2012-11-26 44 views
7

Tôi muốn gửi dữ liệu đa phương tiện qua RTP. Những gì tôi muốn biết là làm thế nào để gửi và nhận các gói RTP với Python. Tôi tìm thấy lớp python DPKT. Nhưng không thể tìm thấy một tài liệu tham khảo tốt để hình dung làm thế nào để tạo ra từng nộp trong RTP.Python gửi và nhận các gói RTP

Tôi sẽ đánh giá cao nếu ai đó có thể giúp tôi tạo và nhận các gói rtp tại máy chủ.

+0

Tôi phát hiện ra rằng GSteamer là một lựa chọn rất tốt. Đã phải đọc để hiểu những điều cơ bản của đường ống. Với gstreamer tôi có thể gửi một âm thanh từ một máy và nghe từ một máy khác, thông qua TCP. Bây giờ tôi đang cố gửi video qua RTP. Bất kỳ trợ giúp được thực sự đánh giá cao. –

+0

Sau vài ngày nghiên cứu, tôi có thể sử dụng gstreamer trong thiết bị đầu cuối ubuntu để thực hiện nhiệm vụ trên. Phạm vi chính của tôi là tìm hiểu về đồng bộ hóa các luồng. Tôi đã sử dụng các hàm RTP và RTCP trong gstreamer. Tôi chia một video thành bốn phần theo chiều dọc và gửi từ máy tính này sang máy tính khác và hiển thị trong PC thứ hai. Sau đây là mã được sử dụng. –

Trả lời

5

Sau vài ngày nghiên cứu, tôi đã có thể sử dụng gstreamer trong thiết bị đầu cuối ubuntu để thực hiện tác vụ trên. Phạm vi chính của tôi là tìm hiểu về đồng bộ hóa các luồng. Tôi đã sử dụng các hàm RTP và RTCP trong gstreamer. Tôi chia một video thành bốn phần theo chiều dọc và gửi từ máy tính này sang máy tính khác và hiển thị trong PC thứ hai. Sau đây là mã được sử dụng.

Tên người gửi:

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 

Receiver:

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 

tôi đã có thể nhận được bốn con suối trong một cửa sổ như mong đợi. Nhưng các luồng vẫn không được đồng bộ một cách hoàn hảo.

+0

Hãy đến với bạn bè, ít nhất đăng những gì mã của bạn có ý nghĩa hoặc thêm một liên kết để tìm hiểu những điều cơ bản của gstreamer – repzero

0

Bạn cũng có thể đặt trọng tải âm thanh từ luồng RTP với rtpdump vào SoX. Gần đây tôi đã viết một kịch bản Python nhỏ mà chỉ làm điều đó.

https://github.com/kylophone/xplay