sdp错误是否会导致流损坏?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sdp错误是否会导致流损坏?相关的知识,希望对你有一定的参考价值。

我正在尝试使用GStreamer(rpicamsrc)从我的Raspberry Pi获取RTP(over udp)直播流(h264)。正在使用Kurento媒体服务器捕获视频并将其转发到浏览器,即RPi - > KMS - >浏览器。

流来了大约4s延迟(这是不理想但没关系)然而显示的东西似乎已损坏,我不知道为什么。

损坏的流显示:

image

有些同事提出了隔行扫描/ p帧的问题(?),但我对此没有任何线索或我应该寻找什么。

来自接收器的混乱SDP

String rtpSdpOffer =
    "v=0
"
    + "o=- 0 0 IN IP4 " + senderIp + "
"
    + "s=Kurento Tutorial - RTP Player
"
    + "c=IN IP4 " + senderIp + "
"
    + "t=0 0
";

if (useAudio) {
  rtpSdpOffer +=
      "m=audio " + senderRtpPortA + " RTP/AVPF 96
"
      + "a=rtpmap:96 opus/48000/2
"
      + "a=sendonly
"
      + sdpComediaAttr
      + "a=ssrc:" + senderSsrcA + " cname:" + senderCname + "
";
}

rtpSdpOffer +=
    "m=video " + senderRtpPortV + " " + senderProtocol + " 103
"
    + sdpCryptoAttr
    + "a=rtpmap:103 " + senderCodecV + "/90000
"
    + "a=rtcp-fb:103 goog-remb
"
    + "a=sendonly
"
    + sdpComediaAttr
    + "a=ssrc:" + senderSsrcV + " cname:" + senderCname + "
"
    + "";

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'

任何帮助是极大的赞赏

答案

SDP可能会导致腐败。如果您在那里传输的编解码器数据与流不匹配。但看起来你不是通过SDP传输编解码器数据 - 但可能是带内传输。

图像中的工件看起来像是一个rowbyte / stride问题。可能是由您的视频尺寸引起的。建议使用16的倍数分辨率。但它仍然可以使用。可能是解码器/渲染器做了一些奇怪的事情。我会尝试接收流并保存到文件中,在常规视频播放器中观看它并检查它是否显示更好以及报告的视频尺寸。

以上是关于sdp错误是否会导致流损坏?的主要内容,如果未能解决你的问题,请参考以下文章

损坏的顶点和片段着色器

pcmask磁盘错误

堆栈缓冲区溢出会导致堆损坏吗?

造成SD卡数据丢失的原因和恢复数据方法

由于 ViewPager2 导致 TabLayout 损坏

使用 memset 和 freeaddrinfo 会导致双重释放或损坏错误