ffmpeg对视频文件进行解码的大致流程
2011-05-08 15:05
423 查看
音视频同步原理[ffmpeg]
2010年08月25日 星期三 12:11
2010年08月25日 星期三 12:11
ffmpeg对视频文件进行解码的大致流程
阅读前希望大家先了解一下时间戳的概念。 /* compute current audio and video time */ if (pOutputVars->pOutAudio_st)//存在音频流 pOutputVars->audio_pts = (double)pOutputVars->pOutAudio_st->pts.val * pOutputVars->pOutAudio_st->time_base.num / pOutputVars- >pOutAudio_st->time_base.den; //(pts是时间戳结构)输出音频的时间戳, 转换为基准时间 else pOutputVars->audio_pts = 0.0; if (pOutputVars->pOutVideo_st) pOutputVars->video_pts = (double)pOutputVars->pOutVideo_st->pts.val * pOutputVars->pOutVideo_st->time_base.num / pOutputVars- >pOutVideo_st->time_base.den;//输出视频时间戳 else pOutputVars->video_pts = 0.0; if (!pOutputVars->pOutAudio_st && !pOutputVars->pOutVideo_st) return 0; /* write interleaved audio and video frames */ if (!pOutputVars->pOutVideo_st || (pOutputVars->pOutVideo_st && pOutputVars->pOutAudio_st && pOutputVars->audio_pts < pOutputVars->video_pts)) { write_audio_frame(pOutputVars->pOutFormatCtx, pOutputVars->pOutAudio_st, pInputAudioBuf); //没有视频流,或者音频流时间没赶上视频流(通过比较时间戳), 则输出(编码输出)音频祯数据 } else { write_video_frame(pOutputVars->pOutFormatCtx, pOutputVars->pOutVideo_st, pInputVedioFrame);//否则输出视频祯数据 } 输出数据的时间戳怎么得到的, 以音频为例: pkt.size= avcodec_encode_audio(c, audio_outbuf, audio_outbuf_size, pInputAudioBuf);//源数据应该包含时间戳, pInputAudio是源文 件解码后的音频数据 pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);//编码后的祯也含有源文件的时间戳,这个函数应该是转换同时 间基准,没研究过 pkt.flags |= PKT_FLAG_KEY; pkt.stream_index= st->index; pkt.data= audio_outbuf; ... 应该就是这么个过程了,然后用av_write_frame(oc, &pkt), 把音频祯和视频祯交错写入到输出文件. 通过上面分析,可以看到,有时候可能连续写几个音频 祯或视频祯. 播放时的同步可能ffplay中有,还没细看 |
相关文章推荐
- FFMpeg对视频文件进行解码的大致流程
- ffmpeg对视频文件进行解码的大致流程
- 使用FFmpeg对视频进行编解码的一般流程
- FFMPEG解码流程理解搜集整理及tutorial5的理解,主要是音视频同步
- FFmpeg 学习之 定时器解码两路视频并进行对比
- ffmpeg 重写tutorial01程序--将一个视频文件解码输出ppm文件或bmp文件
- 利用ffmpeg来进行视频解码的完整示例代码(H.264)
- (转)利用ffmpeg来进行视频解码的完整示例代码(H.264)
- Android 本地视频播放器开发 —— ffmpeg解码视频文件中的音频
- ffmpeg开发之旅(3)--AAC 文件解析及解码流程
- FFMPEG 视频解码流程
- FFMPEG SDK流媒体开发2---分离.mp4等输入流音视频并且进行解码输出(转)
- 【转】ffmpeg解码含有B帧的视频文件的输出顺序
- 利用ffmpeg提供的库(API)进行音频与视频的编码并生成文件
- ffmpeg解码视频存为BMP文件
- Android 音视频深入 九 FFmpeg解码视频生成yuv文件(附源码下载)
- FFMPEG解码流程理解搜集整理及tutorial5的理解,主要是音视频同步
- FFmpeg4Android:视频文件解码
- 使用ffmpeg进行解码的基本流程 和几个重要函数
- 基于FFmpeg的TS音视频解码流程之视频解码