• ffplay 源码剖析——框架分析


      ffplay是ffmpeg自带的播放器,调用ffmpeg和SDL API实现的一个非常具有参考价值的播放器,就连著名的B站开源项目ijkplayer也是在ffplay.c上进行二次开发,ffplay实现了播放器大体上的功能,掌握其原理对于做播放器开发非常有意义。

    ffplay框架分析

    黄线框 表示不同的线程控制

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

    初始化 

    1. 初始化packet queque
    2. 初始化frame queque
    3. 初始化clock
    4. 创建数据读取线程

    线程划分

    1 数据读取线程

    1. 打开媒体⽂件
    2. 打开对应码流的decoder以及初始化对应的audiovideosubtitle输出
    3. 创建decoder线程,audiovideosubtitle的解码线程独立
    4. 调⽤av_read_frame读取packet,并根据steam_index放⼊不同stream对应的packet队列

    2 音频解码(视频同 字幕同)

    从packet queue读取packet,解出frame后放入frame queue
    

    3 音频播放(或者回调函数)

    从frame queue读取frame进行播放
    

    4 视频播放(ffplay目前是在main主线程进行视频播放)

    从frame queue读取frame进入播放

    5 字幕播放 (ffplay目前是在main主线程进行字幕播放)

    从frame queue读取frame进行播放

    6 响应控制 (播放/暂停/快进/快退等)(ffplay⽬前是在main主线程进⾏播放控制)

    packet队列的设计

    1. 线程安全,支持互斥、等待、唤醒
    2. 缓存数据大小
    3. 缓存包数
    4. 队列播放可持续时间
    5. 进队列/出队列等

    frame队列的设计

    1. 线程安全,支持互斥、等待、唤醒
    2. 缓存帧数
    3. ⽀持读取数据而不出队列
    4. 进出队列等

    音视频同步 

    1. 音频同步
    2. 视频同步
    3. 外部时钟同步

    音频处理 

    1. 音量调节
    2. 静音
    3. 重采样

    视频处理

    1. 图像格式转换YUV->RGB等
    2. 图像缩放1280*720->800*480

    播放器控制

    1. 播放
    2. 暂停
    3. 停止
    4. 快进/快退
    5. 逐帧
    6. 静音

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

  • 相关阅读:
    c语言:通讯录管理系统(动态分配内存版)
    C++容器string的运用和注意
    【Linux安全之iptables自定义链】
    P8611 [蓝桥杯 2014 省 AB] 蚂蚁感冒(模拟)
    【SpringMVC】Jrebel 插件实现热部署与文件上传
    【已解决】VSCode LaTeX支持minted
    【项目经理】工作流引擎
    阿里8年经验之谈 —— 分享一次接口性能摸底测试过程!
    笔记 | FastAPI创建新项目
    从程序员成长为500强企业的架构师,如何掌控自己的职业生涯?
  • 原文地址:https://blog.csdn.net/m0_60259116/article/details/126785649