2013-07-22 4 views
0

У меня есть 2 сценария: сервер, отправляющий видеопоток h264 и клиент, который воспроизводит поток. Оба используют gstreamer-1.0. Вот код клиента:Запись видео с видео с помощью gstreamer 1.0

DEST=10.2.2.30 
LATENCY=0 

VIDEO_CAPS="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264" 


VIDEO_DEC="rtph264depay ! avdec_h264 max_threads=0" 

VIDEO_SINK="videoconvert ! videoscale ! autovideosink sync=false async=false" 


gst-launch-1.0 -v rtpbin name=rtpbin latency=$LATENCY         \ 
    udpsrc caps=$VIDEO_CAPS port=6000 ! rtpbin.recv_rtp_sink_0      \ 
     rtpbin. ! $VIDEO_DEC ! $VIDEO_SINK            \ 
    udpsrc port=6001 ! rtpbin.recv_rtcp_sink_0          \ 
     rtpbin.send_rtcp_src_0 ! udpsink port=6005 host=$DEST sync=false async=false 

Вместо того, чтобы играть поток, я хотел бы, чтобы записать его в файл YUV. Как мне это сделать ?

ответ

2

Просто замените autovideosink файлами, и, возможно, capsfilter, чтобы решить, какой формат YUV вы хотите. Так что для I420 вы могли бы сделать что-то вроде:

VIDEO_SINK="videoconvert ! 'video/x-raw,format=(string)I420' ! filesink location=myfile.yuv sync=false async=false" 

или если вы хотите определенное разрешение:

VIDEO_SINK="videoconvert ! videoscale ! 'video/x-raw,format=(string)I420,width=1280,height=720' ! filesink location=myfile.yuv sync=false async=false" 

Надежда, что помогает.

Смежные вопросы