如何快速开发一个模板视频相关的产品标签

四、从队列中提取音视频包并解码

音频解码的方式基本没有什么改变。

// 上一帧音频数据还没有播完 // 重新设置音频缓存 // 尽可能的给系统传递音频buffer但不会超出已经解析的夶小(audio_len),也不会多给超出系统索要的大小(len)

在这里需要注意在解码音频帧后计算出了音频的时间。并且保存在了audio_clk中这将作为视频帧何时显示的基础。

时间戳的计算是当前的pts(即第几帧音频)乘以时间基time_base得到当前pts的时间戳(这里的时间基是一个分数其值等于1秒/视频的帧率)。

解碼视频帧的过程与音频类似但是播放视频与音频缺完全不同。因为视频的播放需要渲染视频同时还要根据音频的时间戳去显示视频帧。

//计算视频流的时间基av_q2d将一个分数转换成小数 //将纹理信息拷贝给渲染器

在计算视频时间戳时,根据视频的格式不同有时frame里的pts并不是实际播放的pts(这里涉及到 I帧P帧 的问题,在下一章我们会讲或者自行百度),所以一般通过av_frame_get_best_effort_timestamp来获取视频帧的pts用这个pts乘以视频流时间基time_base得到視频的当前时间戳()。
因为音频时sdl系统根据音频的帧率自动播放的所以他的播放速率是一般是正确的。而我们知道了音频和视频的时間戳就可以在每次解码视频帧后根据音频帧的时间觉得行是否需要等待。

前两篇中两个例子可以说都是最为基本的视频和音频的播放器但他们都包含了一个播放器所必须的流程。接下来可能会写两篇完整的播放器带视频快进。倍速播放等方面的或者写两个有关于直播,推流的敬请期待。

我要回帖

更多关于 前端模板 的文章

 

随机推荐