音视频基本概念

多线程好处

充分利用cpu资源的工具

多线程带来的问题

多线程管理问题

线程的互斥与同步

互斥

资源 有限多个人去抢

同步

有序进行

锁的种类

读写锁 读写分离

自旋锁 等待资源释放(例如)

可重入锁

SDL锁

互斥锁

SDL_CreateMutex/SDL_DestroyMutex

SDL_LockMutex/SDL_UnlockMutex

信号量

SDL_CreateCond/SDL_DestroyCond

SDL_CondWait/SDL_CondSignal

使用锁

复制代码
typedef struct _PacketQueue{
    AVPacketList *first_pkt, *last_pkt;
    int nb_packets;
    int size;
    SDL_mutex *mutex;
    SDL_cond *cond;
}PacketQueue;

基本概念

pts:Presentation timestamp 展示音频和视频时间戳 最终渲染也是根据这个时间戳

dts: Decoding timestamp 解码时间戳

I帧 (关键帧 帧内压缩)

p帧(向前参考帧 帧间压缩 只记录前一帧变化的部分)

B帧(帧间压缩 记录前一帧和后一帧的差别 可参考前后几帧 )

实际帧顺序 I B B P

存放顺序 I P B B

解码时间戳 1423

展示时间戳1234

有b帧的时候pts和dts不一致 无b帧的时候pts和dts是一致的

从哪获取pts

AVpacket 中的pts

AVFrame中的pts

av_frame_get_best_effort_timestamp()

时间基

tbr: 帧率

tbn: time base of stream 流的时间基

tbc: time base of codec 解码时间基

计算当前帧的pTS

PTS = PTS * av_q2d(video_stream->time_base)

下一帧

video_clockl: 预测的下一帧的pts

frame_delay: 1/ tbr

video_clock:音频当前播放的时间戳

音视频同步方式

视频同步到音频

音频同步到视频

音视频同步到外部时钟

视频同步到音频思路

一般的做法,展示第一帧视频帧后获得要显示的下一个视频帧的PTS 然后设置一个定时器,当定时器超时后,刷新新的视频帧,如此反复操作

相关推荐
木风小助理几秒前
JavaAtomicInteger底层实现深度解析
java
易营宝3 分钟前
高效的跨境电商广告优化系统:易营宝广告投放实操指南
大数据·开发语言·人工智能·php
superman超哥6 分钟前
路由的艺术:Rust Web 框架中的高效匹配与类型安全提取
开发语言·rust·编程语言·rust web框架·rust路由
BD_Marathon6 分钟前
搭建MyBatis框架之创建MyBatis的映射文件(五)
java·数据库·mybatis
一只叫煤球的猫7 分钟前
为什么Java里面,Service 层不直接返回 Result 对象?
java·spring boot·面试
洛阳泰山7 分钟前
智能体项目MaxKB4J - 本地部署与开发完整指南
java·agent·工作流·rag·智能体·maxkb
hqwest11 分钟前
码上通QT实战22--趋势页面01-准备图表对象
开发语言·qt·qpainter·qss·painevent·qt绘图事件
Solar202513 分钟前
机械制造业TOB企业获客软件选型指南:从挑战到解决方案的深度解析
java·大数据·服务器·架构·云计算
星火开发设计29 分钟前
C++ stack 全面解析与实战指南
java·数据结构·c++·学习·rpc··知识
宋情写34 分钟前
JavaAI06-SpringAI
java·人工智能