init output stream初始化输出流源码分析

作者:Loken1 时间:2023-01-08 09:53:20 

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

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

init output stream初始化输出流源码分析

音频 OutputStream初始化

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

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

init output stream初始化输出流源码分析

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

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

init output stream初始化输出流源码分析

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

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

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

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

init output stream初始化输出流源码分析

这个 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初始化输出流源码分析

来源:https://juejin.cn/post/7160400432274571277

标签:init,output,stream,初始化,输出流
0
投稿

猜你喜欢

  • Java异常处理之try...catch...finally详解

    2023-09-17 05:38:24
  • Java语言实现简单FTP软件 FTP上传下载队列窗口实现(7)

    2021-07-25 04:01:58
  • MyBatis在SQL语句中如何获取list的大小

    2021-08-15 12:09:55
  • 详解Android OkHttp完全解析

    2023-04-05 05:05:31
  • Java数据结构之双向链表图解

    2023-02-07 10:07:22
  • Spring boot+beetl+i18n国际化处理的方法

    2023-07-22 00:36:31
  • Java中双大括号初始化的理解与使用

    2023-08-30 08:44:55
  • java去除字符串中的空格、回车、换行符、制表符的小例子

    2022-04-13 12:33:44
  • C#的String和StringBuilder详解

    2022-06-21 09:51:31
  • MybatisPlus #{param}和${param}的用法详解

    2023-02-02 13:08:10
  • JavaFX实现UI美观效果代码实例

    2021-08-27 21:02:15
  • Spring Cloud Eureka 服务上下线监控的实现

    2022-02-18 21:06:15
  • 使用SpringBoot开发Restful服务实现增删改查功能

    2023-01-20 05:17:29
  • java使用归并删除法删除二叉树中节点的方法

    2022-03-31 23:06:12
  • JavaWeb入门教程之分页查询功能的简单实现

    2021-11-11 21:52:23
  • Idea 搭建Spring源码环境的超详细教程

    2023-09-30 16:13:17
  • Android 中在有序广播中添加自定义权限的实例

    2021-08-10 05:09:35
  • asp.net实现遍历Request的信息操作示例

    2022-11-15 23:15:18
  • Unity Shader片段着色器使用基础详解

    2022-09-29 10:08:28
  • Android框架组件Lifecycle的使用详解

    2022-08-01 08:48:59
  • asp之家 软件编程 m.aspxhome.com