摘要:
一、实现seek功能 我们主要是使用ffmpeg的av_seek_frame方法实现seek功能,但是我们给外界提供seek功能的方法可以不叫seek,我这里使用setTime方法,单位是秒。 /** * 移动视频到指定的关键帧位置 * * @param s 输入媒体的上下文 * @param st 阅读全文
摘要:
简介 音视频同步的实现可以有两种方式 视频同步到音频 音频同步到视频 我们这里选择第一种,因为音频播放的频率是SDL控制的,我们没法改变,所以使用视频同步到音频。 实现音视频同步 在videoplayer.h先定义两个全局变量,用于记录音频时钟和视频时钟 /** 音频时钟,当前音频包对应的时间值 * 阅读全文
摘要:
一、简介 上节介绍了使用SDL播放音频,这节介绍视频显示,其解码流程跟音频差不多。 解码视频是比较耗时的,需要我们自己开个线程去解码,而音频是SDL帮我们管理了子线程去解码音频,初始化音频SDL后就开始进行播放(SDL_PauseAudio(0);)了,一播放就会调用回调函数(sdlAudioCal 阅读全文
摘要:
一、简介 接着上节的音频解码,使用SDL播放音频。 通过上节程序运行打印发现这些音频信息明显不符合SDL的,所以我们需要进行重采样 二、音频重采样 这里我们可以参考之前的《12_采样格式&音频重采样》来实现现在的重采样。 2.1 引入头文件 extern "C" { #include <libswr 阅读全文
摘要:
一、简介 如上图,我们在主线程中开启一个子线程进行解封装,然后在开两个线程分别进行视频解码和音频解码,其中音频解码我们使用的是SDL去渲染,SDL自己会管理子线程,不用我们来创建子线程,而视频解码是需要我们自己创建子线程进行管理。 解封装会解出视频包和音频包,分别塞入各自的队列中,然后各自解码器取出 阅读全文
摘要:
一、简介 我们使用QT+ffmpeg实现一个播放器,这里我们主要是为了学习ffmpege了,而QT只是辅助的,所以播放器的界面搭建我们不在介绍,可以直接看代码(界面搭建代码)。 现在我们直接接入主题,ffmpeg的解封装我们可以直接参考之前介绍的 FFmpeg音视频解封装格式 下面是使用FFmpeg 阅读全文
摘要:
一、简介 为什么要用多线程?在音视频领域主要是实现音视频同步。实现了音视频同步,我们的播放器就基本上合格了。 多线程的好处主要是能使程序更加充分利用硬件(主要是CPU)的性能。但是也存在相应的隐患,如果多线程管理不好,会出现协调问题。 这里我们将讲解一下SDL的多线程与锁机制。 引进的机制:线程的互 阅读全文