avformat_new_stream 获取的 avStream 需要调用 avcodec_parameters_alloc 出世后 codecpar 吗
时间: 2024-05-05 20:21:12 浏览: 219
simplest_ffmpeg_transcoder.rar_ffmpeg C++builder
5星 · 资源好评率100%
是的,avformat_new_stream函数会创建一个AVStream结构体实例,但是其中的codecpar字段是空的,需要调用avcodec_parameters_alloc函数为其分配内存空间,然后再根据需要设置其它属性。具体的代码示例如下:
```c
AVStream *stream = avformat_new_stream(formatContext, codec);
if (!stream) {
// 创建流失败
return;
}
// 分配codecpar内存空间
AVCodecParameters *codecpar = avcodec_parameters_alloc();
if (!codecpar) {
// 分配内存失败
avformat_free_context(formatContext);
return;
}
// 设置codecpar属性
codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
codecpar->codec_id = codecId;
codecpar->width = width;
codecpar->height = height;
// 将codecpar赋值给stream
stream->codecpar = codecpar;
```
其中,formatContext是AVFormatContext结构体实例,codec是AVCodec结构体实例,codecId是对应的编码器ID,width和height是视频的宽度和高度。
阅读全文