2012-11-26 103 views
7

RTPでマルチメディアデータを送信します。私が知っておくべきことは、PythonでRTPパケットを送受信する方法です。私はpythonクラスDPKTを見つけました。しかし、RTPで各ファイルを生成する方法を視覚化するための良いリファレンスを見つけることができませんでした。PythonはRTPパケットを送受信します

誰かがサーバでrtpパケットを生成して受信するのを助けることができたら、私は感謝します。

+0

私はGSteamerは非常に良い選択肢であることが分かりました。パイプラインの基本を理解するために読む必要があった。 gstreamerを使用すると、あるマシンからオーディオを送信し、もう1台のマシンからTCPを介して聴くことができました。今私はRTPを通してビデオを送ろうとしています。どんな助けでも本当に感謝しています。 –

+0

数日間の調査の後、私は上記のタスクを達成するためにubuntu端末でgstreamerを使用することができました。私の主な範囲は、ストリームの同期について学ぶことでした。私はgstreamerでRTPとRTCPの機能を使用しました。私はビデオを縦に4分割して1台のPCから別のPCに送り、2台目のPCに表示しました。使用されるコードは次のとおりです。 –

答えて

5

数日間の調査の後、私は上記の作業を達成するためにubuntu端末でgstreamerを使用することができました。私の主な範囲は、ストリームの同期について学ぶことでした。私はgstreamerでRTPとRTCPの機能を使用しました。私はビデオを縦に4分割して1台のPCから別のPCに送り、2台目のPCに表示しました。使用されるコードは次のとおりです。

送信者:

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 

私は予想通り1つのウィンドウで4つのストリームを受信することができました。しかし、まだストリームは完全には同期していません。

+0

あなたのコードが意味するものを少なくとも投稿したり、リンクを追加してgstreamerの基礎を学ぶ – repzero

0

rtpdumpのRTPストリームからのオーディオペイロードをSoXにパイプすることもできます。私は最近、ちょうどそれを行う小さなPythonスクリプトを書いた。

https://github.com/kylophone/xplay

関連する問題