我目前正在扩展这个项目http://www.csee.umbc.edu/~pmundur/courses/CMSC691C/lab5-kurose-ross.html来实现一个非常基本的 RTSP 服务器。
到目前为止,我有一个粗略的多线程实现硬编码来响应使用 VLC 播放器作为客户端的 OPTIONS、DESCRIBE、SETUP 和 PLAY 请求。问题是在响应 PLAY 请求后,VLC 似乎没有确认在它在 SETUP 请求中指定的端口号上发送的任何 RTP 数据包。输出时,我的 SETUP 响应的相关部分 -
RTSPBufferedWriter.write("Transport: RTP/AVP;unicast;client_port="
+ RTP_dest_port + "-" + (RTP_dest_port + 1)
+ ";server_port=55556-55557" + CRLF);
RTP_dest_port 匹配客户端请求。UDP初始化如下:
RTPsocket = new DatagramSocket(55556);
...
senddp = new DatagramPacket(packet_bits, packet_length, ClientIPAddr, RTP_dest_port);
RTPsocket.send(senddp);
但是,由于没有视频输出,数据包似乎永远不会到达客户端,并且最终会出现此错误。
live555 warning: no data received in 10s. Switching to TCP
在切换到 RTP over TCP 模式之前。
我不确定 UDP 初始化是否错误,或者它是否正在接收格式错误的 RTP 数据包,但只是没有将它们注册为 mjpeg 数据。任何关于这里到底发生了什么的建议都将非常有用!
只是为了获得更多信息,我正在使用 localhost 进行测试,从 TCP 套接字检索 ClientIPAddr 并且尚未处理 RTCP。