2024-06-01 19:10:54 发布
网友
我想通过RTP发送多媒体数据。我想知道的是如何用Python发送和接收RTP包。我找到了python类DPKT。但无法找到一个很好的参考来可视化如何在RTP中生成每个文件。
如果有人能帮我在服务器上生成和接收rtp包,我将不胜感激。
经过几天的研究,我能够在ubuntu终端使用gstreamer来完成上述任务。我的主要工作是学习流的同步。我在gstreamer中使用了RTP和RTCP功能。我把一段视频垂直分成四部分,从一台电脑发送到另一台电脑,然后显示在第二台电脑上。下面是使用的代码。
发件人:
gst-launch -v \ \ gstrtpbin name=rtpbin1 \ filesrc location=/home/x101.avi ! decodebin ! x264enc ! rtph264pay ! rtpbin1.send_rtp_sink_0 \ rtpbin1.send_rtp_src_0 ! udpsink host=192.168.1.100 port=5011 \ rtpbin1.send_rtcp_src_0 ! udpsink host=192.168.1.100 port=5012 \ udpsrc port=5013 ! rtpbin1.recv_rtcp_sink_0 \ \ gstrtpbin name=rtpbin2 \ filesrc location=/home/x102.avi ! decodebin ! x264enc ! rtph264pay ! rtpbin2.send_rtp_sink_0 \ rtpbin2.send_rtp_src_0 ! udpsink host=192.168.1.100 port=5021 \ rtpbin2.send_rtcp_src_0 ! udpsink host=192.168.1.100 port=5022 \ udpsrc port=5023 ! rtpbin2.recv_rtcp_sink_0 \ \ gstrtpbin name=rtpbin3 \ filesrc location=/home/x103.avi ! decodebin ! x264enc ! rtph264pay ! rtpbin3.send_rtp_sink_0 \ rtpbin3.send_rtp_src_0 ! udpsink host=192.168.1.100 port=5031 \ rtpbin3.send_rtcp_src_0 ! udpsink host=192.168.1.100 port=5032 \ udpsrc port=5033 ! rtpbin3.recv_rtcp_sink_0 \ \ gstrtpbin name=rtpbin4 \ filesrc location=/home/x104.avi ! decodebin ! x264enc ! rtph264pay ! rtpbin4.send_rtp_sink_0 \ rtpbin4.send_rtp_src_0 ! udpsink host=192.168.1.100 port=5041 \ rtpbin4.send_rtcp_src_0 ! udpsink host=192.168.1.100 port=5042 \ udpsrc port=5043 ! rtpbin4.recv_rtcp_sink_0
接收器:
gst-launch -v \ videomixer name=mix ! ffmpegcolorspace ! autovideosink sync=false async=false \ \ gstrtpbin name=rtpbin1 \ udpsrc port=5011 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01AFeygbCPNLgIgAAADAC7msoAB4sWywA\\=\\=\\,aOvssg\\=\\=\", payload=(int)96, ssrc=(uint)861153369, clock-base=(uint)4026289255, seqnum-base=(uint)30449" ! rtpbin1.recv_rtp_sink_0 rtpbin1. ! rtph264depay ! queue ! ffdec_h264 ! videobox border-alpha=0 top=0 left=0 ! mix. \ udpsrc port=5012 ! rtpbin1.recv_rtcp_sink_0 \ rtpbin1.send_rtcp_src_0 ! udpsink port=5013 host=192.168.1.104 \ \ gstrtpbin name=rtpbin2 \ udpsrc port=5021 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01AFeygbCPNLgIgAAADAC7msoAB4sWywA\\=\\=\\,aOvssg\\=\\=\", payload=(int)96, ssrc=(uint)861153369, clock-base=(uint)4026289255, seqnum-base=(uint)30449" ! rtpbin2.recv_rtp_sink_0 rtpbin2. ! rtph264depay ! queue ! ffdec_h264 ! videobox border-alpha=0 top=-120 left=0 ! mix. \ udpsrc port=5022 ! rtpbin2.recv_rtcp_sink_0 \ rtpbin2.send_rtcp_src_0 ! udpsink port=5023 host=192.168.1.104 \ \ gstrtpbin name=rtpbin3 \ udpsrc port=5031 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01AFeygbCPNLgIgAAADAC7msoAB4sWywA\\=\\=\\,aOvssg\\=\\=\", payload=(int)96, ssrc=(uint)861153369, clock-base=(uint)4026289255, seqnum-base=(uint)30449" ! rtpbin3.recv_rtp_sink_0 rtpbin3. ! rtph264depay ! queue ! ffdec_h264 ! videobox border-alpha=0 top=-240 left=0 ! mix. \ udpsrc port=5032 ! rtpbin3.recv_rtcp_sink_0 \ rtpbin3.send_rtcp_src_0 ! udpsink port=5033 host=192.168.1.104 \ \ gstrtpbin name=rtpbin4 \ udpsrc port=5041 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01AFeygbCPNLgIgAAADAC7msoAB4sWywA\\=\\=\\,aOvssg\\=\\=\", payload=(int)96, ssrc=(uint)861153369, clock-base=(uint)4026289255, seqnum-base=(uint)30449" ! rtpbin4.recv_rtp_sink_0 rtpbin4. ! rtph264depay ! queue ! ffdec_h264 ! videobox border-alpha=0 top=-360 left=0 ! mix. \ udpsrc port=5042 ! rtpbin4.recv_rtcp_sink_0 \ rtpbin4.send_rtcp_src_0 ! udpsink port=5043 host=192.168.1.104
我能像预期的那样在一个窗口接收到四条小溪。但静态流并没有完全同步。
您还可以使用rtpdump将音频负载从RTP流管道传输到SoX。我最近写了一个小的Python脚本。
rtpdump
SoX
https://github.com/kylophone/xplay
经过几天的研究,我能够在ubuntu终端使用gstreamer来完成上述任务。我的主要工作是学习流的同步。我在gstreamer中使用了RTP和RTCP功能。我把一段视频垂直分成四部分,从一台电脑发送到另一台电脑,然后显示在第二台电脑上。下面是使用的代码。
发件人:
接收器:
我能像预期的那样在一个窗口接收到四条小溪。但静态流并没有完全同步。
您还可以使用
rtpdump
将音频负载从RTP流管道传输到SoX
。我最近写了一个小的Python脚本。https://github.com/kylophone/xplay
相关问题 更多 >
编程相关推荐