如何在不解码的情况下将flv文件(由gstreamer flvmux编码,其中包含带有aac音频的h264视频)流式传输



我有一个动态管道(用c代码编写),它模仿以下静态管道并生成flv视频:

gst-launch-1.0  flvmux name=mux streamable=true ! queue ! filesink sync=true location="cam.flv" rtspsrc location="rtsp://192.168.0.157:7001/yamahamg10xu.sdp" caps="application/x-rtp, media=(string)audio, clock-rate=(int)90000, encoding-name=(string)MPA, payload=(int)96" ! rtpjitterbuffer latency=1000 ! rtpmpadepay !  mpegaudioparse ! queue ! mad ! audioconvert ! queue ! voaacenc bitrate=64000 ! aacparse ! audio/mpeg,mpegversion=4,stream-format=raw ! queue ! mux. rtspsrc location="rtsp://admin:fallenjiva@192.168.0.161:554/cam/realmonitor?channel=1&subtype=1" ! rtpjitterbuffer latency=1000 ! rtph264depay ! shift delay=550000 running-time=true ! queue ! mux.

这个动态管道运行良好,并生成视频(让我们称之为管道-1)

现在我有了另一个静态管道(管道-2),它运行并将其广播到rtmp服务器:

gst-launch-1.0 filesrc location=cam.flv ! decodebin name=demux ! queue ! x264enc pass=pass1 threads=0 bitrate=900 tune=zerolatency ! flvmux name=mux ! rtmpsink location='rtmp://xxxxxxxxx live=1' demux. ! queue ! progressreport ! audioconvert ! audiorate ! audioresample ! faac bitrate=96000 ! audio/mpeg,mpegversion=4,stream-format=raw ! mux.

第二流水线(如上)也工作良好,没有错误,但它正在解码/编码已编码的视频,该视频被优化用于传输。

我的问题是关于第二管道。第二个管道将cam.flv作为输入,该输入已经是以flv格式编码的h264/aac。我想在不使用gstreamer进行解码/重新编码的情况下对其进行流式传输。

我该怎么做?我知道我可以在ffmpeg中做到这一点(使用-acdec复制和-vcodec复制选项),但我不使用ffmpeg。我想使用gstreamer来实现同样的功能。

我试过了,但管道没有广播任何内容,而且退出速度很快(<30秒)。

GST_DEBUG=3 gst-launch-1.0 filesrc location=live_cam.flv ! queue ! flvdemux name=demuxer ! queue ! aacparse ! muxer. demuxer. ! queue ! h264parse ! flvmux name=muxer streamable=true ! rtmpsink sync=true async=true location='rtmp://XXXXXXXXXXXXXXXX live=1'

正在将管道设置为PAUSED。。。管道正在准备。。。0:00:00.066118003 8316 0x2504d90 FIXME basesink gstbasesink。c:3064:gst_base_sink_default_event:无组id的流启动事件。考虑在上游元素中实现组id处理管道已预卷。。。正在将管道设置为播放。。。新时钟:GstSystemClock

最新更新