音视频基本概念

多线程好处

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

相关推荐
无声旅者2 小时前
深度解析 IDEA 集成 Continue 插件:提升开发效率的全流程指南
java·ide·ai·intellij-idea·ai编程·continue·openapi
Blossom.1183 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
da-peng-song3 小时前
ArcGIS Desktop使用入门(二)常用工具条——数据框工具(旋转视图)
开发语言·javascript·arcgis
galaxy_strive3 小时前
qtc++ qdebug日志生成
开发语言·c++·qt
Ryan-Joee3 小时前
Spring Boot三层架构设计模式
java·spring boot
TNTLWT3 小时前
Qt功能区:简介与安装
开发语言·qt
Hygge-star3 小时前
【数据结构】二分查找5.12
java·数据结构·程序人生·算法·学习方法
dkmilk3 小时前
Tomcat发布websocket
java·websocket·tomcat
工一木子3 小时前
【Java项目脚手架系列】第七篇:Spring Boot + Redis项目脚手架
java·spring boot·redis
哞哞不熬夜4 小时前
JavaEE--初识网络
java·网络·java-ee