博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ffmpeg----FFplay简易播放器的实现
阅读量:3920 次
发布时间:2019-05-23

本文共 1255 字,大约阅读时间需要 4 分钟。

其中有5篇介绍了简易播放器的实现

SDL播放流程见另一篇博客

swr重采样结构体流程

所谓的重采样,就是改变音频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出。SwrContext常用函数:1、申请A、只申请:struct SwrContext *swr_alloc(void);//此函数用于申请一个SwrContext结构体B、申请并设置参数:struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,                                      int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,                                      int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate,                                      int log_offset, void *log_ctx);//分配SwrContext并设置/重置常用的参数,参数包含了输入输出参数中sample rate(采样率)、sample format(采样格式)、channel layout等                        2。初始化int swr_init(struct SwrContext *s);//当设置好相关的参数后,使用此函数来初始化SwrContext结构体      3、工作/转换    int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,                                const uint8_t **in , int in_count);//此函数便是将输入的音频按照定义的参数进行转换,并输出4、释放void swr_free(struct SwrContext **s);释放掉SwrContext结构体并将此结构体置为NULL;基本用法如下: 申请结构体(swr_alloc、swr_alloc_set_opts)—>设置相关参数—>初始化—>转换—->释放结构体

这篇博客只摘录部分细节:

代码背后的设计思路:1、设计一个多线程安全的队列,保存AVPacket,同时统计队列内已缓存的数据大小。(这个统计数据会用来后续设置要缓存的数据量)2、引入serial的概念,区别前后数据包是否连续3、设计了两类特殊的packet——flush_pkt和nullpkt,用于更细致的控制(类似用于多线程编程的事件模型——往队列中放入flush事件、放入null事件)

转载地址:http://jbhrn.baihongyu.com/

你可能感兴趣的文章
C++ primer 第九章
查看>>
C++ primer 第十章
查看>>
C++ primer 第十一章
查看>>
C++ primer 第十二章
查看>>
C++ primer 第十三章
查看>>
把perl的hash结构放入数组/堆栈/队列的方法
查看>>
send和recv函数
查看>>
C++ primer 第十四章
查看>>
C++ primer 第十五章
查看>>
C++ primer 第十六章
查看>>
C++ primer 第十七章 异常处理部分
查看>>
C++ primer 第十七章 命名空间部分
查看>>
C++ perimer 第十七章 多重继承与虚继承部分
查看>>
java 堆溢出的解决方法
查看>>
C++ primer 第十八章
查看>>
《浪潮之巅》笔记&小感悟
查看>>
java 重写类的equals方法和hashcode方法
查看>>
java 判断字符串中是否含有字母
查看>>
《产品经理手册》 读书笔记
查看>>
IT人员迅速提升自我效率的十大方法
查看>>