【发布时间】:2018-09-05 02:49:27
【问题描述】:
我正在尝试使用 GStreamer (rpicamsrc) 从我的 Raspberry Pi 获取 RTP(通过 udp)实时流 (h264)。正在使用 Kurento 媒体服务器捕获视频并将其转发到浏览器,即 RPi -> KMS -> 浏览器。
流通过大约 4 秒的延迟(虽然不理想,但还可以),但是显示的内容似乎已损坏,我不知道为什么。
流显示损坏:
一些同事提出了隔行扫描/p 帧 (?) 的问题,但我对此一无所知,也不知道我应该寻找什么。
接收器损坏的 SDP
String rtpSdpOffer =
"v=0\r\n"
+ "o=- 0 0 IN IP4 " + senderIp + "\r\n"
+ "s=Kurento Tutorial - RTP Player\r\n"
+ "c=IN IP4 " + senderIp + "\r\n"
+ "t=0 0\r\n";
if (useAudio) {
rtpSdpOffer +=
"m=audio " + senderRtpPortA + " RTP/AVPF 96\r\n"
+ "a=rtpmap:96 opus/48000/2\r\n"
+ "a=sendonly\r\n"
+ sdpComediaAttr
+ "a=ssrc:" + senderSsrcA + " cname:" + senderCname + "\r\n";
}
rtpSdpOffer +=
"m=video " + senderRtpPortV + " " + senderProtocol + " 103\r\n"
+ sdpCryptoAttr
+ "a=rtpmap:103 " + senderCodecV + "/90000\r\n"
+ "a=rtcp-fb:103 goog-remb\r\n"
+ "a=sendonly\r\n"
+ sdpComediaAttr
+ "a=ssrc:" + senderSsrcV + " cname:" + senderCname + "\r\n"
+ "";
开始流式传输的 Gstreamer 脚本
PEER_A={KMS_AUDIO_PORT} PEER_V={KMS_VIDEO_PORT} PEER_IP={KMS_PUBLIC_IP} \
SELF_PATH="{PATH_TO_VIDEO_FILE}" \
SELF_A=5006 SELF_ASSRC=445566 \
SELF_V=5004 SELF_VSSRC=112233 \
bash -c 'gst-launch-1.0 -e \
rtpbin name=r sdes="application/x-rtp-source-sdes,cname=(string)\"user\@example.com\"" \
rpicamsrc ! video/x-raw,width=200,height=150,framerate=25/1 ! decodebin name=d \
d. ! x264enc tune=zerolatency \
! rtph264pay ! "application/x-rtp,payload=(int)103,clock-rate=(int)90000,ssrc=(uint)$SELF_VSSRC" \
! r.send_rtp_sink_1 \
r.send_rtp_src_1 ! udpsink host=$PEER_IP port=$PEER_V bind-port=$SELF_V \
r.send_rtcp_src_1 ! udpsink host=$PEER_IP port=$((PEER_V+1)) bind-port=$((SELF_V+1)) sync=false async=false \
udpsrc port=$((SELF_V+1)) ! tee name=t \
t. ! queue ! r.recv_rtcp_sink_1 \
t. ! queue ! fakesink dump=true async=false'
非常感谢任何帮助
【问题讨论】:
标签: raspberry-pi udp streaming gstreamer rtp