首页 技术 正文
技术 2022年11月15日
0 收藏 891 点赞 3,082 浏览 1187 个字

编码可以简单理解为将连续的图片帧转变成视频流的过程。以H264为例给出编码的代码:

        int  InitEncoderCodec(int width, int height)
{
auto enc = avcodec_find_encoder(AV_CODEC_ID_H264);
encodeContext = avcodec_alloc_context3(enc);
auto codec = encodeContext;
codec->codec_id = enc->id;
codec->time_base.num = ;
codec->time_base.den = ;
codec->gop_size = ;
codec->bit_rate = ;
codec->pix_fmt = AV_PIX_FMT_YUV420P;
codec->width = width;
codec->height = height;
codec->has_b_frames = ;
codec->max_b_frames = ;
AVDictionary* options = nullptr;
if (!av_dict_get(options, "threads", nullptr, ))
{
av_dict_set(&options, "threads", "auto", );
}
auto hr = avcodec_open2(codec,enc,nullptr);
return hr;
}

稍微解释下:AV_CODEC_ID_H264是264 codec ID,如果是其他的编码器替换相应的ID.  avcodec_open2返回0表示打开编码器成功,打开失败返回负值。
encode输入是一个AVFrame。注意:Frame的宽高要与codec的宽高一致。编码后的packet组成PES流。

    shared_ptr<AVPacket> encode(AVFrame* frame)
{
int gotpacket = ;
shared_ptr<AVPacket> packet = nullptr;
shared_ptr<AVPacket> pkt((AVPacket*)av_malloc(sizeof(AVPacket)), [&](AVPacket *p){av_free_packet(p);av_freep(&p);});
av_init_packet(pkt.get());
pkt->data = nullptr;
pkt->size = ; int hr = avcodec_encode_video2(encodeContext, pkt.get(), frame, &gotpacket);
if(hr >= && gotpacket)
{
packet = pkt;
}
return packet;
}

视频下载地址:http://www.chungen90.com/?news_3/

Demo下载地址: http://www.chungen90.com/?news_2

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905