ffmpeg命令分析-管道输出多路流 - 弦外之音

/ 0评 / 0

本文 以 ffmpeg4.4 源码为准,a.mp4下载链接:百度网盘,提取码:nl0s 。


早期 FFmpeg 在 转 码 后 输出 直播 流 时并 不支持 编码 一次 之后 同时 输出 多路 直播 流, 需要 使用 管道 方式 进行 输出, 而在 新版本 的 FFmpeg 中 已经 支持 tee 文件 封装 及 协议 输出, 可以 使用 tee 进行 多路 流 输出, 本节 将 主要 讲解 管道 方式 输出 多路 流 与 tee 协议 输出 方式 输出 多路 流。

刘歧; 赵文杰. FFmpeg从入门到精通 (电子与嵌入式系统设计丛书) (p. 405). 北京华章图文信息有限公司. Kindle Edition.

本文主要讲解 管道方式 输出多路流 在 ffmpeg.c 里面的逻辑实现,命令如下:

ffmpeg.exe -i a.mp4 -acodec aac -vcodec h264_mf -f flv - | ffmpeg -f flv -i - -c copy -f flv tcp://127.0.0.1:1234/live/stream -c copy -f flv rtmp://192.168.0.122/live/livestream

上面的命令 音频编码 为 AAC,视频编码为 H264,转成 flv 的封装,然后推了两路流。

1,tcp 流,把 flv 的数据放在 tcp 包里面进行传输。

2,rtmp 流,把flv 的数据放在 rtmp 上层进行传输。

这两路流的服务器请自行搭建。



因为用了 管道 所以在 qt_creator 里面并不好调试,直接根据之前的积累猜测逻辑流程。

如上图所示,因为有两路输出流,所以 l->nb_groups 等于2 ,会打开两次输出文件,这也就是为什么 ffmpeg 的 全局变量,input_files,output_files,以及 filter_graph 是一个数组的原因,因为可以有多个。数组的结构看起来比较复杂,其中一个应该场景就是为了解决多路输出的问题,这个知识点是之前《ffmpeg源码分析-参数解析》没有过多提及的,之前的分析,输入输出都是单个文件。

ffmpeg 的主要结构如下:

img

版权所属:知识星球:弦外之音,QQ:2338195090。 由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注