2015-04-22 3 views
5

Я работаю над gstreamer в первый раз и пытаюсь с потоком передать видеофайл MP4 с сервера на клиент, используя Gstreamer (RTP и UDP). Командная строка, которую я пытаюсь использовать:Streaming MP4 Video File на Gstreamer

На стороне сервера:

gst-launch-1.0 -v filesrc location = file_name.mp4 ! decodebin ! x264enc ! rtph264pay ! udpsink host=192.1XX.XX.XX port=9001 

На стороне клиента:

gst-launch-1.0 -v udpsrc port=9001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtpstreamdepay ! decodebin ! videoconvert ! autovideosink 

Я могу поток видео успешно. Но я не хочу, чтобы операции decodebin и x264enc выполнялись на стороне сервера. Итак, я удалил эти операции и использовать эту командную строку на стороне сервера

gst-launch-1.0 -v filesrc location =file_name.MP4 ! rtpstreampay ! udpsink host=192.1XX.XX.XX port=9001 

На которой я был не в состоянии потока видео.

Может ли кто-нибудь помочь мне, почему нам нужно выполнять операции декодирования и кодирования в этом сценарии при отправке данных. Есть ли способ, по которому мы можем отправлять данные без использования этих операций.

Спасибо.

ответ

1

Декодирование и повторное кодирование не нужны. Элементом, которым вы пользуетесь, является демультиплексор, и в этом случае qtdemux.

Вот клип от его документа:

Demultiplex в QuickTime файлов в аудио и видео потоки ISO базу медиа-поддержка формата файлов (MP4, 3GPP, QT, MJ2)

Это достаточно, чтобы демультиплексировать видеоконтейнер открытым и просто прочитать закодированный видеопоток непосредственно из контейнера. mp4 Контейнеры обычно содержат H.264 закодированное видео, поэтому ваш серверный трубопровод упростится до:

gst-launch-1.0 -v filesrc location = file_name.mp4 ! qtdemux ! video/x-h264 ! rtph264pay ! udpsink host=192.1XX.XX.XX port=9001