pCodecCtx->bit_rate = 400000; pCodecCtx->gop_size = 25; //I帧间隔 pCodecCtx->time_base.num = 1; pCodecCtx->time_base.den = 25; //time_base一般是帧率的倒数,但不总是 pCodecCtx->framerate.num = 25; //帧率 pCodecCtx->framerate.den = 1; AVCodecParameters *codecpar = video...
二、AVStream使用codecpar来替换codec AVStream和AVCodec,一个保存流信息,一个保存解码器实例和参数。在之前的版本中AVStream的codec指针保存了解码器实例,这意味着如果要创建一个新的AVStream对象,就要创建一个AVCodec对象。流信息和解码器实例本身不具备强耦合关系,因此只使用一个codecpar变量只保存解码器参数更为合适。
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...
typedefstructAVStream{intindex;/**< stream index in AVFormatContext */// stream IDintid;// 与流关联的编解码器的参数结构AVCodecParameters*codecpar;//time_base AVRational结构体有两个成员,组成一个分数(有理数)AVRational time_base;...int64_t duration;int64_t nb_frames;///< number of frames ...
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par); 那我们codec参数替换为codecpar 代码就可以这样写了(错误处理省略) //打开多媒体文件,我们假定视频流索引为0AVFormatContext*ic=NULL;avformat_open_input(&ic,"test.mp4",0,0);//找到视频×××,比如H264AVCodec*codec=...
avcodec_parameters_from_context(out_stream->codecpar,audio_enc_ctx); 6、创建初始化AvioContext资源 avio_open(&ofmt_ctx->pb, outputFile,AVIO_FLAG_WRITE); 7、写入文件头到音频文件 avformat_write_header(ofmt_ctx, NULL); 8、音频重采样
ffmpeg新版本中(封装流)AVStream的codec参数要被codecpar参数所替代,这样替代我们要注意什么,为什么要替代,我们先来看下ffmpeg的代码。 代码分析和新参数优势 typedefstructAVStream{#ifFF_API_LAVF_AVCTX/** * @deprecated use the codecpar struct instead ...
avcodec_parameters_to_context(codecContext, codecpar); avcodec_open2(codecContext, dec, NULL); 第八步:进行视频的 参数设置,获取数据进行压缩 SwrContext *swrContext = swr_alloc(); // 输入的这些参数 AVSampleFormat in_sample = codecContext->sample_fmt; ...
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"); ...
video_stream_ = input_ctx_->streams[video_stream_idx_];//新版本不再将音视频流信息直接保存到streams[video_stream_idx_]中,而是存放在AVCodecParammeters中(涉及format,width,height,codec_type等),该函数提供了转换if((ret =avcodec_parameters_to_context(decoder_ctx_, video_stream_->codecpar)) <0...