3,881
社区成员
发帖
与我相关
我的任务
分享
// 注册所有的的codec和视频文件格式
av_register_all();
// 分配视频解码器内存
video_decode_context = avcodec_alloc_context();
// 分配音频解码器内存
video_decode_context = avcodec_alloc_context();
// 分配视频编码器内存
video_encode_context = avcodec_alloc_context();
// 分配音频编码器内存
audio_encode_context = avcodec_alloc_context();
//
MMAGW_DEBUG(("Open video"));
// 视频打开
ret = av_routine.alloc_input_format_context(&input_format_context, input_filename);
if(ret < 0)
{
return ret;
}
MMAGW_DEBUG(("Retrieve stream information"));
// 查找流信息
ret = av_find_stream_info(input_format_context) ;
input_format_context->programs
if(ret < 0)
{
return ret;
}
MMAGW_DEBUG(("Find the %d channels") % input_format_context->nb_streams );
// 查找 视频 音频 流
for(int i = 0; i < input_format_context->nb_streams; i++)
{
if(input_format_context->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO)
{
video_stream_index = i;
}
else if (input_format_context->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO)
{
audio_stream_index = i;
}
}
// 若没有音频 & 视频
if(video_stream_index == -1 && audio_stream_index == -1)
{
MMAGW_DEBUG(("Do not have video stream and audio stream"));
return -1;
}
// 得到视频流编码上下文的指针
if( -1 != video_stream_index )
{
MMAGW_DEBUG(("Find the video stream %d") % video_stream_index);
// 视频解码内容
video_decode_context = input_format_context->streams[video_stream_index]->codec;
// 寻找视频流的解码器
video_decode = avcodec_find_decoder(video_decode_context->codec_id);
if(!video_decode)
{
MMAGW_DEBUG (("FFMPEG Can Not Decoder For %d "), % (int)video_decode_context->codec_id );
}
// 打开解码器
ret = avcodec_open(video_decode_context,video_decode);
if(0 != ret)
{
MMAGW_DEBUG (( "FFMPEG Can Not Open Video Decoder ." ));
}
printf("Image Size %ld * %ld \n",video_decode_context->width, video_decode_context->height);
printf(( "Frame Rate %lf \n"), (float)video_decode_context->time_base.den / (float)video_decode_context->time_base.num);
}
len = avcodec_decode_video(video_decode_context, pFrameDec, &frameFinished, packet.data, packet.size);
printf(" video_decode_context->coded_height = %ld \n", video_decode_context->coded_height);
printf(" video_decode_context->coded_width = %ld \n", video_decode_context->coded_width);
av_find_stream_info(input_format_context) ;
avcodec_open(video_decode_context,video_decode);