当avformat_open_input 函数打开一个 MP4 的时候,编码器参数就会放在 codec_type 字段里,如下: fmt_ctx->streams[0]->codecpar->codec_type 上面的codec_type就是一个AVCodecParameters,只需要用avcodec_parameters_to_context函数把codec_type的参数复制给AVCodecContext即可,很方便。 请先下载本文代码仔细阅读一遍。
if(pFormatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO){ audio_stream_index = i; pCodecParameters = pFormatContext->streams[i]->codecpar; pCodec = avcodec_find_decoder(pCodecParameters->codec_id); } } // create codec context AVCodecContext *pCodecContext = avcodec_a...
if(in_stream->codecpar->codec_type==AVMEDIA_TYPE_AUDIO){ //查找具有匹配编解码器ID的已注册解码器 //失败返回NULL guard.codec=avcodec_find_decoder(in_stream->codecpar->codec_id); if(guard.codec==NULL){ returnfalse; } //分配AVCodecContext并将其字段设置为默认值 //需要使用avcodec_free_contex...
OFormat = poFormatCtx->oformat;//给输出添加视频流for(i =0; i < pvFormatCtx->nb_streams; i++) {//Create output AVStream according to input AVStreamif(pvFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {/* * 步骤: * 1、首先根据视频流创建新的输出流(要添加初...
in_codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE) { stream_mapping[i] = -1; continue; } stream_mapping[i] = stream_index++; // 分配一个新的输出流 out_stream = avformat_new_stream(ofmt_ctx, NULL); if (!out_stream) { fprintf(stderr, "Failed allocating output stream\n"); ...
outStream->time_base.num =1;// 编码解码器相关的参数集// 设置分辨率和bit率AVCodecParameters *outCodecPara = outFmtCtx->streams[outStream->index]->codecpar; outCodecPara->codec_type=AVMEDIA_TYPE_VIDEO; outCodecPara->codec_id = outFmt->video_codec; ...
读取多媒体文件音频流和视频流信息,函数av_find_best_stream是在 FFmpeg 新版本中添加的,老版本只可通过遍历的方式读取,我们可以通过stream->codecpar->codec_type判断流类型,可以取得同样的效果: intav_find_best_stream(AVFormatContext*ic,enumAVMediaType type,intwanted_stream_nb,intrelated_stream,AVCodec**dec...
(avFormatContext,NULL)<0){LOGE("avformat_find_stream_info error");return;}intaudio_index=-1;for(inti=0;i<avFormatContext->nb_streams;++i){if(avFormatContext->streams[i]->codecpar->codec_type==AVMEDIA_TYPE_AUDIO){audio_index=i;}}if(audio_index==-1){LOGE("audio index not find");...
if (fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { videoStreamIndex = i; break;//找到视频流就退出 } } //如果videoStream为-1 说明没有找到视频流 if (videoStreamIndex == -1) { printf("cannot find video stream\n"); goto end; }...
if (fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { videoStreamIndex = i; break;//找到视频流就退出 } } //如果videoStream为-1 说明没有找到视频流 if (videoStreamIndex == -1) { printf("cannot find video stream\n"); ...