广告
返回顶部
首页 > 资讯 > 移动开发 >initoutputstream初始化输出流源码分析
  • 729
分享到

initoutputstream初始化输出流源码分析

initoutputstream初始化输出流initoutputstream 2022-11-13 19:11:24 729人浏览 独家记忆
摘要

目录正文音频 OutputStream初始化init_output_stream() 函数流程图正文 init_output_stream() 是一个公

正文

init_output_stream() 是一个公共的函数,无论是音频,还是视频的输出流的初始化,都是通过它来完成的。

init_output_stream() 上面还会套一个 wrapper ,主要是做一些简单的封装,例如已经初始化了,就直接返回,代码如下:

音频 OutputStream初始化

音频 OutputStream 的初始化主要有两个地方。

1, 如果是 stream copy,不进行编解码,就是在 transcode_init() 里面如下:

从上图可以看到,如果不进行编解码,音频,视频的输出流,都是在 transcode_init() 里面初始化的。

2, 滤镜模式,进行了编解码,就是在 reap_filter() 里 初始化音频的输出流的,如下:

音频的输出流可以在未从滤镜读取到 AVFrame 的时候就开始初始化,而视频的输出流的初始化,需要从滤镜拿到 AVFrame 之后才能初始化,视频的初始化是在 封装在do_video_out() 函数里面的。

至于为什么音频输出流需要提前初始化,可以看一下他的注释,我没细看。

init_output_stream() 函数其实没有太多的重点,主要就是设置编码器参数,然后打开编码器,再设置一下 OutputStream 的一些字段,就初始化完成了。

不过 OutputStream 有一个字段特别重要,就是 initialized ,如下:

这个 initialized 特别重要,只有输出文件里面的所有输出流,包括音频跟视频流,他们的 initialized 都是 1,才能调 avfORMat_write_header() 函数写入头部信息,

因为 init_output_stream() 会对 AVStream 设置一些信息,例如编码信息等等。

必须设置完这些信息,initialized 全部都是 1,才能调 avformat_write_header()

因此,如果音频输出流没初始化完成,那视频流的 AVPacket 就不能写入文件,必须先写到队列缓存下来,如下:

init_output_stream() 函数流程图

以上就是init output stream初始化输出流源码分析的详细内容,更多关于init output stream初始化输出流的资料请关注编程网其它相关文章!

--结束END--

本文标题: initoutputstream初始化输出流源码分析

本文链接: https://www.lsjlt.com/news/170444.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作