音视频基本概念

多线程好处

充分利用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 然后设置一个定时器,当定时器超时后,刷新新的视频帧,如此反复操作

相关推荐
程序猿乐锅14 小时前
【计算机组成原理 | 第六章】中央处理器 CPU
java·开发语言
大模型丫丫14 小时前
如何提升单体 Spring Boot 应用的并发数?
java·spring boot·后端
Terra.K14 小时前
ThreadLocal解决一个线程里面跨层传递问题
java·开发语言·后端
泡海椒15 小时前
低代码规则开发:JQuick-Java声明式配置驱动开发落地教程
java·低代码·rxjava
变与不变80615 小时前
引用类型、内存原理与对象
开发语言·前端·javascript
wuyk55515 小时前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习
weixin_4407305015 小时前
socket解决多次输入问题-大数据接收问题-模块动态导入
java·开发语言·servlet
用户31268748772015 小时前
ReentrantLock 和 synchronized 到底选哪个?源码级对比与选型
java
计算机毕设定制辅导-无忧学长15 小时前
基于Spring Boot的玄幻小说个性化推荐平台设计与实现
java·vue.js·spring boot·后端·mysql·推荐算法
码路漫漫15 小时前
LRU 真的能解决日志按业务 Key 分文件的落地瓶颈吗?
java·后端