OBS源码阅读笔记(五)--媒体源处理
来源:互联网 发布:上海工银安盛软件开发 编辑:程序博客网 时间:2024/04/27 18:23
OBS关于媒体源的处理在obs-ffmpeg模块中;
在ffmpeg_source_start中,初始化解复用器,在解复用器中调用ff_demuxer_set_callbacks设置音频及视频包读取后的回调为video_frame和audio_frame;
然后调用ff_demuxer_open,在这里创建demux_thread解复用,该线程中调用av_read_frame读取帧,并使用ff_decoder_accept将音视频帧放入对应的音频或者视频解码器的队列中;
在ff_decoder_init中,创建定时器ff_timer_init,该定时器使用线程来实现,线程函数为timer_thread,最后调用timer->callback(timer->opaque);来具体处理定时器的具体处理过程;
目前看到,该定时器回调被设置到ff_decoder_refresh这个函数中,调用ff_circular_queue_peek_read读取解码队列中的一个包,然后又很多同步的操作,同步过后,调用ff_callbacks_frame,里面调用decoder->callbacks->frame,也就是之前通过ff_demuxer_set_callbacks注册的video_frame或者audio_frame处理;
在obs-ffmpeg-source.c中定义了video_frame:其中一般调用video_frame_scale对视频包进行转换,转换出的视频格式是RGBA格式的,然后也是调用obs_source_output_video将包丢到source的async_frames队列中,下面的处理就交由obs_video_thread处理了;obs_video_thread在(四)中有比较详细的描述。
audio_frame 处理中,对采集到的数据进行一些初始化计算及拷贝,然后调用obs_source_output_audio,source_output_audio_data将数据
- OBS源码阅读笔记(五)--媒体源处理
- OBS源码阅读笔记(三)--RTMP
- OBS源码阅读笔记(四)--视频采集显示
- OBS源码阅读笔记(六)--推流地址设置
- OBS源码阅读笔记--绿化配置文件路径
- OBS源码阅读笔记--去掉顶部menubar
- OBS源码阅读笔记---32位编译
- OBS源码阅读笔记--无边框
- OBS源码阅读 --RTMP
- obs源码阅读链接
- OBS源码阅读
- OBS源码阅读笔记(七)--如何往工程中添加自己的界面
- OBS源码阅读笔记--将声音设置和场景挂钩
- OBS源码阅读笔记--取出licence和update
- obs-studio源码阅读笔记:学习obs流程的第一步,test程序
- OBS源码学习笔记(一)
- OBS源码学习笔记(二)
- AFNetworking 3.0 源码阅读笔记(五)
- 自定义控件工作的时候会影响标题textview的文字出现锯齿显得很模糊问题解决方案
- IOS学习资料汇总记录
- ListView+CheckBox实现单选效果
- Android Studio你不知道的调试技巧
- QTableView只允许选中单行且不允许编辑的方法
- OBS源码阅读笔记(五)--媒体源处理
- $.parseJSON的使用规则
- nltk安装第三方自然语言处理工具
- tjut 3565
- ES6 + Webpack + React + Babel 如何在低版本浏览器上愉快的玩耍(上)
- Powershell知识点总结
- LeetCode—397. Integer Replacement
- 设计模式
- input框只能输入数字的两种方法