用wordpress开发网站,淘宝客做网站还是做app,网络销售怎么做网站,网站流量一直下降介绍 在本系列#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器#xff0c;在这个项目#xff0c;您可以学到音视频解封装#xff0c;解码#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话#xff0c;请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本… 介绍 在本系列我打算花大篇幅讲解我的 gitee 项目音视频播放器在这个项目您可以学到音视频解封装解码SDL渲染相关的知识。您对源代码感兴趣的话请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本文可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析六 解析 我们这篇文章解析 decodethread 的四个函数InitStartStopRun如果您对于 decodethread 不是很了解建议您先去看看上篇文章基于FFmpeg和SDL的音视频播放器解析六
Init 函数
int DecodeThread::Init(AVCodecParameters* par){if(!par){return -1;}codec_ctx avcodec_alloc_context3(nullptr);int ret avcodec_parameters_to_context(codec_ctx, par);if(ret 0){return -1;}AVCodec* codec;if(codec_ctx-codec_id AV_CODEC_ID_H264){codec avcodec_find_decoder_by_name(h264_qsv);}else {codec avcodec_find_decoder(codec_ctx-codec_id);}if(!codec){return -1;}ret avcodec_open2(codec_ctx, codec, nullptr);if(ret 0){return -1;}return 0;
}
这个初始化函数主要负责 AVCodecContext 的初始化。
首先运用了 avcodec_alloc_context3 为 AVCodecContext 变量 codec_ctx 分配内存。
接着我们可以看到 avcodec_parameters_to_context 函数用于将一个 AVCodecParameters 结构体转换为 AVCodecContext 结构体。AVCodecParameters 是 FFmpeg 中用于表示编解码器参数的结构体包含了编解码器的类型、比特率、帧率、分辨率等信息。而 AVCodecContext 是 FFmpeg 中用于表示编解码器上下文的结构体包含了编解码器的状态、输入输出缓冲区等信息。
然后我们需要找相应的解码器并且打开它。
于是先做一个条件判断如果解码器上下文的 codec_id 是 AV_CODEC_ID_H264这是一个 H.264 编解码器的标识符则通过 “h264_qsv” 的名字找编解码器。否则调用 avcodec_find_decoder 函数查找合适 codec_ctx 的解码器。总体上就是一个查找解码器的方法。
然后就是打开操作了avcodec_open2 就是打开解码器的操作比较容易理解。 Start、Stop 函数
int DecodeThread::Start(){mythread new thread(Run, this);if(!mythread){return -1;}return 0;
}int DecodeThread::Stop(){Thread::Stop();
}
这段代码不长比较好理解。
Start 函数就是 new 了一个线程Stop 函数就是调用了父类 Thread 的 Stop作用就是终止线程和释放资源。
好了我们还剩下一个函数 Run这比较多我们下一篇文章再讲。
欲知后事如何请听下回分解。