我真的没有想法了。这是我的问题:我需要通过网络按需流式传输mp4(H264)。我是gstreamer的新手,经过多次试用版本> 1.0我决定使用0.10,因为到目前为止似乎最有希望。
下面的命令很完美(我看到我的电影的窗口)
gst-launch filesrc location=/home/zuko/sintel_trailer-368p.mp4 ! decodebin2 name=dec ! queue ! ffmpegcolorspace ! autovideosink dec. ! queue ! audioconvert ! audioresample ! autoaudiosink
现在我尝试使用命令构建TCP流(到目前为止仅在localhost上):
Server side:
gst-launch filesrc location=/home/zuko/sintel_trailer-368p.mp4 ! decodebin2 name=dec ! tcpserversink host=127.0.0.1 port=5000
Client side:
gst-launch tcpclientsrc host=127.0.0.1 port=5000 ! decodebin2 name=dec ! queue ! ffmpegcolorspace ! autovideosink dec. ! queue ! audioconvert ! audioresample ! autoaudiosink
但来自"客户端的响应"命令如下:
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstDecodeBin2:dec/GstTypeFindElement:typefind: Could not determine type of stream.
Additional debug info:
gsttypefindelement.c(813): gst_type_find_element_chain_do_typefinding (): /GstPipeline:pipeline0/GstDecodeBin2:dec/GstTypeFindElement:typefind
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
缺少什么,或者我做错了什么?
我正在测试:VirtualBox 4.3.12 with Ubuntu 14.04,kernel 3.13.0-24-generic#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux
完整错误(GST_DEBUG_NO_COLOR = 1 GST_DEBUG = *:3)附于此处: https://app.box.com/s/4ntyk6am2ibg0pohtg9h
答案 0 :(得分:1)
首先,使用0.10绝对不是一个好主意,你应该坚持1.0,你将获得社区支持。
其次,对于你的问题本身,你试图通过网络流式传输解码的流(“decodebin2!tcpserversink”)并在另一侧再次解码它(“tcpclientsrc!decodebin2” )。不仅在带宽使用方面是非常错误的,它也不会直接起作用。
我建议你看一下gstreamer提供的rtp插件。
答案 1 :(得分:0)
使用 gstreamer 1.0 服务器端可以共享h264流:
gst-launch-1.0 filesrc location="C:\\Videos\\videotestsrc.avi" ! decodebin ! x264enc ! mpegtsmux ! queue ! tcpserversink host=127.0.0.1 port=8080
客户端收到:
gst-launch-1.0 tcpclientsrc host=127.0.0.1 port=8080 ! decodebin ! videoconvert ! autovideosink sync=false
或者,可以使用VLC通过以下方式模拟客户端:
Media >> Open Network Stream >> tcp://127.0.0.1:8080 >> Play