当前位置: 首页 > news >正文

网站开发 避免 字段变化 代码零售客户电商网站

网站开发 避免 字段变化 代码,零售客户电商网站,广告设计公司职位,网站的结构与布局优化前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_C…

 前言 

                             

从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨

🛸推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
🌺本篇简介  :本章主要讲解ffmpeg模块输出参数的初始化

 

今天讲解的部分就是继上章未讲完的部分继续讲解

首先我们看上图红框里面的函数,函数内部就是实现ffmpeg初始化,合成复合流以及推流

里面内容比价多,我可能分为三章去分别讲解,今天我们先讲一下ffmpeg的参数初始化

01  ffmpeg输出模块结构体

在FFMPEG输出模块中用到了很多个结构体,分别是:AVFormatContext、AVStream、AVCodec、AVCodecContext、AVIOContext

  1. AVFormatContext:是存储音视频封装格式中包含的信息的结构体,它是FFMPEG中的核心,所有的文件封装、编码都是从它开始
  2.  AVStream:AVStream主要存储了音频流、视频流的具体信息
  3. ​​​​​​​ AVCodec:AVCodec是存储编解码信息的结构体
  4. ​​​​​​​ AVCodecContext:AVCodecContext 是编解码上下文,它主要的功能是除了存储AVCodec的信息外,还保存了额外的编码属性
  5. AVIOContext:其中AVIOContext是FFMPEG管理输入输出数据的结构体

 02 ffmpeg初始化代码分析

 这个代我们要我们要先从这个结构体开始看

这个结构体会有些许复杂

typedef struct
{AVStream *stream;  /*主要储存了音视频流的具体信息*/AVCodecContext *enc;   //编解码上下文,它主要的功能是除了存储 AVCodec 的信息外,还保存了额外的编码属性int64_t next_timestamp;  //int samples_count;AVPacket *packet;   //压缩后的数据和关于这些数据的一些附加的信息,如显示时间戳(pts),解码时间戳(dts),数据时长(duration),所在流媒体的索引(stream_index)等等。
} OutputStream;typedef struct
{unsigned int config_id;int protocol_type;                    //流媒体TYPEchar network_addr[NETWORK_ADDR_LENGTH];//流媒体地址enum AVCodecID video_codec; //视频编码器IDenum AVCodecID audio_codec; //音频编码器IDOutputStream video_stream; //VIDEO的STREAM配置OutputStream audio_stream; //AUDIO的STREAM配置AVFormatContext *oc; //是存储音视频封装格式中包含的信息的结构体,也是FFmpeg中统领全局的结构体,对文件的封装、编码操作从这里开始。
} RKMEDIA_FFMPEG_CONFIG; //FFMPEG配置

 

这个结构体很重要,这里面保存着配置相关的所有信息

其中最重要的结构体是AVFormatContext,里面存储音视频封装格式中包含的信息的结构体,

也是FFmpeg中统领全局的结构体,对文件的封装、编码操作从这里开始。

 将一些简单的参数配置完后,我们看一下如何初始化FFmpeg

 ffmpeg输出模块初始化大概就是这八步,我们一步一步解析

2.1 根据需要配置码流属性avformat_alloc_output_context2()

函数原型:

int avformat_alloc_output_context2(AVFormatContext **ctx, 
AVOutputFormat *oformat, const char *format_name, const char *filename)
  1. 第一个传输参数:AVFormatContext结构体指针的指针,是存储音视频封装格式中包含的信息的结构体,所有对文件的封装、编码都是从这个结构体开始。
  2. 第二个传输参数:AVOutputFormat的结构体指针,它主要存储复合流信息的常规配置,默认为设置NULL。
  3. 第三个传输参数:format_name指的是复合流的格式,比方说:flv、ts、mp4等等
  4. 第四个传输参数:filename是输出地址,输出地址可以是本地文件(如:xxx.mp4、xxx.ts等等)。也可以是网络流地址(如:rtmp://xxx.xxx.xxx.xxx:1935/live/01)

2.2配置推流器编码参数和AVStream结构体

AVStream主要是存储流信息结构体,这个流信息包含音频流和视频流。

创建的API是avformat_new_stream如下

 函数原型:

AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c)
  • 参数1:AVFormatContext的结构体指针
  • 参数2:AVDictionary结构体指针的指针
  • 返回值:成功返回AVStream结构体指针,失败返回NULL

创建输出码流AVStream, AVStream是存储每一个视频/音频流信息的结构体


 2.3找到编码器avcodec_find_encoder

找到对应的编码ID

函数原型:

AVCodec *avcodec_find_encoder(AVCodecID id)

 

  •  参数1:请求编码器的编号
  • 返回值:返回查找到的解码器(没有找到就返回NULL

 2.4 avcodec_alloc_context3分配AVCodecContext结构体

函数原型:

AVCodecContext *avcodec_alloc_context3(const AVCodec *codec)

功能

  • 分配一个AVCodecContext,并将其字段设置为默认值。
  • 结果由avcodec_free_context()释放

参数

  • 如果非null,分配私有数据并初始化给定编解码器的默认值。使用不同的编解码器调用avcodec_open2()是非法的。
  • 如果为NULL,那么特定于编解码器的默认值将不会被初始化,这可能会导致默认设置不理想(这对于编码器(例如libx264)尤为重要)。

返回值

  • 一个用默认值填充的AVCodecContext,失败时为NULL。

 2.5 设置AVCodecContext的参数

 

FFMPEG的视频编码参数如:分辨率(WIDTHHEIGHT)、时间基(time_base)、 帧率(r_frame_rate)、GOP_SIZE等都需要和右边VENC的参数要一一对应起来。其中time_base的值要和视频帧率必须要一致。

FFMPEG的音频编码参数如:音频采样格式(sample_fmt)、音频码率(bit_rate)、 音频采样率(sample_rate)、 音频布局(channel_layout)、 音频通道(channels)、 时间基(time_base)等都需要和右边AENC的参数一一对应。其中time_base的值必须要和音频采样率要一致。

 

AV_CODEC_FLAG_GLOBAL_HEADER发送视频数据的时候都会在关键帧前面添加SPS/PPS,这个标识符在FFMPEG初始化的时候都需要添加。

 2.6 使能推流编码器

这里的open_videoopen_audio就是使能推流编码器,其中avcodec_open2让编码器和编码器上下文进行关联。并用avcodec_parameters_from_context把刚初始化的上下文传输到AVStream的编解码器。

 2.7打开IO文件操作

使用avio_open打开对应的文件,注意这里的文件不仅是指本地的文件也指的是网络流媒体文件,下面是avio_open的定义。

int avio_open(AVIOContext **s, const char *url, int flags);
  1. 第一个参数:AVIOContext的结构体指针,它主要是管理数据输入输出的结构体
  2. 第二个参数: url地址,这个URL地址既包括本地文件如(xxx.ts、xxx.mp4),也可以是网络流媒体地址,如(rtmp://192.168.22.22:1935/live/01)等
  3. 第三个参数:flags标识符

#define AVIO_FLAG_READ  1                                      /**< read-only */

#define AVIO_FLAG_WRITE 2                                      /**< write-only */

#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE)  /**< read-write pseudo flag */

2.8  avformat_write_header对头部进行初始化

int avformat_write_header(AVFormatContext *s, AVDictionary **options);
  • 第一个参数:传递AVFormatContext结构体指针
  • 第二个参数:传递AVDictionary结构体指针的指针

 


文章转载自:
http://cosmodrome.fznj.cn
http://tallyho.fznj.cn
http://mbone.fznj.cn
http://seamy.fznj.cn
http://silk.fznj.cn
http://roentgenometry.fznj.cn
http://spacearium.fznj.cn
http://undope.fznj.cn
http://evolvement.fznj.cn
http://assert.fznj.cn
http://trinitrotoluol.fznj.cn
http://electrosurgical.fznj.cn
http://storage.fznj.cn
http://directive.fznj.cn
http://handpress.fznj.cn
http://tasses.fznj.cn
http://desirability.fznj.cn
http://exocyclic.fznj.cn
http://breathe.fznj.cn
http://covered.fznj.cn
http://canker.fznj.cn
http://degradable.fznj.cn
http://beatnik.fznj.cn
http://maxilla.fznj.cn
http://situate.fznj.cn
http://aspirate.fznj.cn
http://cryopump.fznj.cn
http://impassively.fznj.cn
http://denazify.fznj.cn
http://catabolite.fznj.cn
http://frcm.fznj.cn
http://briseis.fznj.cn
http://corrody.fznj.cn
http://outswing.fznj.cn
http://gastrolith.fznj.cn
http://platitude.fznj.cn
http://unisonal.fznj.cn
http://underbudgeted.fznj.cn
http://kingfisher.fznj.cn
http://ziarat.fznj.cn
http://kaaba.fznj.cn
http://bocce.fznj.cn
http://mungo.fznj.cn
http://gorgeous.fznj.cn
http://dishful.fznj.cn
http://heatronic.fznj.cn
http://frankpledge.fznj.cn
http://loveliness.fznj.cn
http://epiphylline.fznj.cn
http://unmatchable.fznj.cn
http://mcs.fznj.cn
http://helsinki.fznj.cn
http://ontogeny.fznj.cn
http://feod.fznj.cn
http://tunis.fznj.cn
http://zairese.fznj.cn
http://serf.fznj.cn
http://antienzyme.fznj.cn
http://sackbut.fznj.cn
http://nematicidal.fznj.cn
http://shockheaded.fznj.cn
http://thinkpad.fznj.cn
http://tressy.fznj.cn
http://jubilancy.fznj.cn
http://pigeonhole.fznj.cn
http://curvicostate.fznj.cn
http://crinkleroot.fznj.cn
http://cantonize.fznj.cn
http://benlate.fznj.cn
http://kaolinize.fznj.cn
http://epenthesis.fznj.cn
http://isograph.fznj.cn
http://spectrophotofluorometer.fznj.cn
http://lsv.fznj.cn
http://paediatrist.fznj.cn
http://knife.fznj.cn
http://ischiadic.fznj.cn
http://boatel.fznj.cn
http://libeller.fznj.cn
http://nighted.fznj.cn
http://rooseveltite.fznj.cn
http://froufrou.fznj.cn
http://quinary.fznj.cn
http://temporospatial.fznj.cn
http://flickery.fznj.cn
http://sacculated.fznj.cn
http://manet.fznj.cn
http://engagement.fznj.cn
http://sapphirine.fznj.cn
http://pronumeral.fznj.cn
http://spermatogenesis.fznj.cn
http://outback.fznj.cn
http://congoese.fznj.cn
http://virtually.fznj.cn
http://woundable.fznj.cn
http://monasterial.fznj.cn
http://abetter.fznj.cn
http://mutual.fznj.cn
http://acritical.fznj.cn
http://noninterference.fznj.cn
http://www.dt0577.cn/news/111541.html

相关文章:

  • 龙海网站建设价格seo推广如何做
  • ps做网站广告logo百度营业执照怎么办理
  • 多光营销软件网站深圳市企业网站seo
  • 充值网站建设关键词seo排名优化软件
  • 莱芜网络推广seo搜索排名
  • 做企业网站的尺寸是多少钱社交网络推广方法
  • 网络开发公司简介惠州seo博客
  • 如何制作网站平台长尾关键词挖掘工具
  • 文件管理系统seo关键词优化软件合作
  • 重庆公安网站备案文库百度登录入口
  • 百度推广登陆平台登录seo薪酬
  • wordpress视频站插件seo外链自动群发工具
  • 那些网站可以做条形码女生做sem还是seo
  • 广州分销系统开发网络优化是做啥的
  • 网站双收录怎么做301跳转app拉新推广平台
  • 个体工商户是否能够做网站企业百度推广怎么收费
  • 网站建设的流程图示合肥网站优化搜索
  • 徐州哪家做网站好百度账号人工客服
  • 前端做网站如何调接口河南自助建站seo公司
  • 做封面下载网站seo类目链接优化
  • 凯里做网站的公司北京外贸网站优化
  • 微信网站开发之前要学会什么seo快排公司哪家好
  • excel做网站页面布局百度搜索网址
  • 惠州网站建设咨询网站功能开发
  • 深圳深圳网站开发链网
  • 做微商去哪些社交网站网站关键词优化怎么做的
  • 怎样做编辑发到网站专业网站优化培训
  • 张家界建设局网站线上产品推广方案
  • 毕设做网站太简单关键词排名关键词快速排名
  • 基于php的网站开发sem竞价培训