2015-04-22 200 views
5

我正在第一次使用gstreamer並嘗試使用Gstreamer(RTP和UDP)將MP4視頻文件從服務器傳輸到客戶端。 命令行,我想使用:在Gstreamer上流式傳輸MP4視頻文件

在服務器端:

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 

我能夠成功地流式視頻。但是,我不想在服務器端執行decodebinx264enc操作。 所以,我刪除這些操作,並使用在服務器端

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

上,我無法串流播放視頻此命令行。

任何人都可以引導我,爲什麼我們需要在發送數據時在這種情況下進行解碼和編碼操作。 有什麼辦法可以發送數據而不使用這些操作。

謝謝。

回答

1

解碼和重新編碼是沒有必要的。你之後的元素是解複用器,在這種情況下,qtdemux

這裏從它的文件夾:

解複用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