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

 更新时间:2022年10月31日 08:58:51   作者:Loken1  
这篇文章主要为大家介绍了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初始化输出流的资料请关注脚本之家其它相关文章!

相关文章

  • Kotlin浅析延迟初始化与密封类的实现方法

    Kotlin浅析延迟初始化与密封类的实现方法

    Kotlin语言的许多特性,包括变量不可变,变量不可为空,等等。这些特性都是为了尽可能地保证程序安全而设计的,但是有些时候这些特性也会在编码时给我们带来不少的麻烦,下面我们来了解延迟初始化和密封类的特点
    2022-08-08
  • Android曲线更圆滑的签名画板

    Android曲线更圆滑的签名画板

    这篇文章主要为大家详细介绍了Android曲线更圆滑的签名画板,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android Caused by: java.lang.ClassNotFoundException解决办法

    Android Caused by: java.lang.ClassNotFoundException解决办法

    这篇文章主要介绍了Android Caused by: java.lang.ClassNotFoundException解决办法的相关资料,需要的朋友可以参考下
    2017-03-03
  • android push推送相关基本问答总结

    android push推送相关基本问答总结

    现在网上一大堆的关于推送方面的实现原理:1.通过pull(拉),也就是通过客户端主动定时轮询服务器请求数据。2.通过push(推),服务器通过一个长连接主动推送消息到客户端。这两个方式都可以实现推送功能。pull这个方式没什么问题好理解。
    2015-05-05
  • Android 不解压直接读取zip包的方法

    Android 不解压直接读取zip包的方法

    下面小编就为大家分享一篇Android 不解压直接读取zip包的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • android判断动画已结束示例代码

    android判断动画已结束示例代码

    添加一个动画效果,发现动画没执行完 就直接跳转或者finish掉,添加动画监听事件即可,示例代码如下
    2014-10-10
  • Android PickerView底部选择框实现流程详解

    Android PickerView底部选择框实现流程详解

    本次主要介绍Android中底部弹出框的使用,使用两个案例来说明,首先是时间选择器,然后是自定义底部弹出框的选择器,以下来一一说明他们的使用方法
    2022-09-09
  • Android实现两台手机屏幕共享和远程控制功能

    Android实现两台手机屏幕共享和远程控制功能

    在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台 Android 手机之间的屏幕共享与远程控制,需要的朋友可以参考下
    2025-04-04
  • Android实现可复用的选择页面

    Android实现可复用的选择页面

    这篇文章主要为大家详细介绍了Android实现可复用的选择页面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Android编程实现图片透明的方法

    Android编程实现图片透明的方法

    这篇文章主要介绍了Android编程实现图片透明的方法,涉及Android针对图片布局及属性相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-03-03

最新评论