QT开发FFMPEG播放器开发流程
2020-04-07 11:36:08 0 举报
ffmpeg开发流程
作者其他创作
大纲/内容
for循环从pFormatCtx->streams中获取音视频流索引,通过pFormatCtx->streams[i]->codec->codec_type判断流类型如AVMEDIA_TYPE_VIDEOAVMEDIA_TYPE_AUDIOAV_MEDIA_TYPE_SUBTITLE等分别赋值给video_indexaudio_indexsubtitle_index
不论结果
返回值!=0
fail错误处理
播放时间为0
否
audio_index>0
是
使用QT进行开发,将pro文件声明INCLUDE_PATH和LIBS用extern C将include的头文件包含具体看以前的代码
avformat_find_stream() //找到音视频流,以此判断是不是音视频文件
isSeek
具体开发流程
avformat_open_input() //打开音视频文件
返回值<0
isStop退出循环
将pFormatCtx 和 audio_index交给音频解码类线程进行处理
initFilter() < 0
Dev是开发时所需要用到的库Shared包含和exe程序一起打包的DLL
FFMPEG的作用
pFormatCtx-iformat->name == rtp/rtsp/sdp等
isPauseSDL_Delay(10)continue;暂停视频线程
步骤1
该线程进入状态机while循环判断
创建SDL视频线程
打印错误avformat_free_context(pFormatCtx)
fail: /* close audio device */ if (audioIndex >= 0) { audioDecoder->closeAudio(); } if (currentType == \"video\") { avcodec_close(pCodecCtx); avcodec_free_context(&pCodecCtx); } avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); isReadFinished = true; if (currentType == \"music\") { setPlayState(Decoder::STOP); } qDebug() << \"Main decoder finished.\";
初始化ffmpeg
播放时间为duration
官网下载Dev、Shared
代码流程
FFMPEG是针对音视频进行编解码、转化、处理的一个解决方案,它封装了各种音视频编解码和网络协议的过程,简化了音视频开发的流程它的应用非常广不少知名的视频网站和软件都是用它来进行音视频解码的
pFormatCtx-iformat->name 可以获取协议类型字符如rtp/rtsp/sdp等以此判断是否是直播
pFormatCtx = avformat_alloc_context//获取格式化IO上下文,靠这个结构体打开文件
pCodec==NULL//没查找到解码器
avfilter_register_all();注册滤镜av_register_all() //初始化ffmpegav_format_network_init() //初始化ffmpeg网络协议模块
videoStream = pFormatCtx->streams[videoIndex];
它有一套音视频开发的api,可以用来开发播放器、网络视频直播、采集屏幕、摄像头的图像等
current_type == \"video\"
认识FFMPEG
index<0
收藏
0 条评论
回复 删除
下一页