gpt4 book ai didi

FFMPEG:如何将 h264 流包装到 FLV 容器中?

转载 作者:行者123 更新时间:2023-12-04 16:30:42 26 4
gpt4 key购买 nike

我想要的很简单:将 H.264 视频流包装到 FLV 容器中。但是, ffmpeg 只需解码输入流并将原始视频流打包成 FLV。详情如下:

输入流是从硬件编码器摄像机捕获的,FLV 将被发送到某个视频服务器。首先我使用了以下命令:

$ ffmpeg -framerate 15 -s 320x240 -i /dev/video1 -f flv "rtmp://some.website.com/receive/path"

但是,结果流是可疑的。观看方没有得到任何 H.264 的东西。然后我通过将输出写入本地文件进行了测试。

1:读取原始流,通过h264_omx编码,写入FLV文件:
$ ffmpeg -framerate 15 -s 320x240 -i /dev/video0 -codec h264_omx -f flv raw_input_h264_omx.flv

......
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 194017.870905, bitrate: 18432 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 320x240, 18432 kb/s, 15 fps, 15 tbr, 1000k tbn, 1000k tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_omx))
......

2:读取H264流,写入FLV文件:
$ ffmpeg -framerate 15 -s 320x240 -i /dev/video1  -f flv h264_input.flv

......
Input #0, video4linux2,v4l2, from '/dev/video1':
Duration: N/A, start: 194610.307096, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuv420p(progressive), 320x240, 15 fps, 15 tbr, 1000k tbn, 2000k tbc
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> flv1 (flv))
......

然后对应读取这两个文件:
$ ffmpeg -i raw_input_h264_omx.flv
......
Stream #0:0: Video: h264 (High), yuv420p(progressive), 320x240, 200 kb/s, 15 fps, 15 tbr, 1k tbn

$ ffmpeg -i h264_input.flv
......
Stream #0:0: Video: flv1, yuv420p, 320x240, 200 kb/s, 15 fps, 15 tbr, 1k tbn

当我给出 H.264 流时,很清楚, ffmpeg 首先对其进行解码,然后将原始视频打包成 FLV。如何避免这种情况发生,并直接打包 H.264 流?

补充:我最终会推送多个视频流,所以不要让我允许 ffmpeg 的静默解码,并再次对流进行编码。

最佳答案

除非另有说明,否则 ffmpeg 将对流进行转码。

利用

ffmpeg -framerate 15 -s 320x240 -i /dev/video1 -c copy -f flv "rtmp://website/receive/path"

关于FFMPEG:如何将 h264 流包装到 FLV 容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44952940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com