2013-06-26 132 views
12

Tôi là người mới chơi với gstreamer và tôi đang cố gắng sử dụng nó. Mục tiêu đầu tiên của tôi là tạo luồng rtp đơn giản của video h264 giữa hai thiết bị. Tôi đang sử dụng hai đường ống này:Phát video H.264 qua rtp bằng gstreamer

Tên người gửi: gst-launch-1.0 -v filesrc location=c:\\tmp\\sample_h264.mov ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5000

Receiver: gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink

Nhưng với cái đầu tiên (người gửi) Tôi đã nhận được lỗi sau:

Setting pipeline to PAUSED ... 
Pipeline is PE*R*O L(LgIsNtG- l.a.u.n 
h-1.0:5788): CRITICAL **: gst_adapter_map: assertion `size > 0' failed 
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error. 
Additional debug info: 
gstbasesrc.c(2812): gst_base_src_loop(): /GstPipeline:pipeline0/GstFileSrc:filesrc0: 
streaming task paused, reason not-negotiated (-4) 
ERROR: pipeline doesn't want to preroll. 
Setting pipeline to NULL ... 
Freeing pipeline ... 

tôi đã cố gắng nhiều cấu hình khác nhưng tôi không thể tìm được đường dẫn đúng.

Một số thông tin khác: phiên bản GStreamer: 1.0.7 Hệ điều hành: Windows 7

Bất cứ ý tưởng/đề nghị? Thx,

Trả lời

8

filesrc sẽ đọc dữ liệu từ tệp đã cho dưới dạng byte thô; bạn không thể mã hóa các byte thô này với x264enc, bạn sẽ cần dữ liệu video để làm việc này. hãy thử thêm một bộ giải mã demuxer/ trước khi mã hóa lại luồng), ví dụ: một cái gì đó như thế này:

Tên người gửi:

gst-launch-1.0 -v \ 
    filesrc location=/tmp/sample_h264.mov 
    ! qtdemux \ 
    ! h264parse \ 
    ! ffdec_h264 \ 
    ! ffmpegcolorspace \ 
    ! x264enc \ 
    ! rtph264pay \ 
    ! udpsink host=127.0.0.1 port=5000 

Bạn nên làm một kiểm tra nhanh chóng liệu này hoạt động bằng cách sử dụng một soure kiểm tra video:

gst-launch-1.0 -v \ 
    videotestsrc 
    ! x264enc \ 
    ! rtph264pay \ 
    ! udpsink host=127.0.0.1 port=5000 
+0

Cảm ơn bạn cho dữ liệu gợi ý thô/video nhưng tôi nghĩ rằng điều này giải quyết chỉ một mệnh đề của vấn đề. Tôi đã thử các đường ống cổ điển với videotestsrc nhưng không có gì là đi sang phía bên kia. Ngay cả với các đường ống sau tôi không thể nhận được bất cứ điều gì ở phía bên kia: 'gst-launch-1.0 -v videotestsrc! udpsink host = 192.128.52.128 port = 9001' Tôi có cảm giác rằng udpsink không gửi bất cứ thứ gì! PS: không phải là vấn đề của tường lửa, tôi tắt tất cả chúng – abir

+0

Đang thử với: 'ffmpeg -i C: \ tmp \ sample_h264.mov -f mpegts udp: //192.168.52.128: 9001' ... và luồng được nhận ở phía bên kia. Nhưng tôi muốn làm điều đó với gstreamer – abir

+0

'videotestsrc! udpsink' là * không * luồng RTP. bạn phải thêm bộ tải trọng –