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

建设能源官方网站电子商务网站建设考卷

建设能源官方网站,电子商务网站建设考卷,wordpress添加工具,2017网站建设价目表音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

=================================================================

音视频入门基础:H.264专题系列文章:

音视频入门基础:H.264专题(1)——H.264官方文档下载

音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件

音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB

音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介

音视频入门基础:H.264专题(5)——FFmpeg源码中 解析NALU Header的函数分析

音视频入门基础:H.264专题(6)——FFmpeg源码:从H.264码流中提取NALU Header、EBSP、RBSP和SODB

音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现

音视频入门基础:H.264专题(8)——H.264官方文档的描述符

音视频入门基础:H.264专题(9)——SPS简介

音视频入门基础:H.264专题(10)——FFmpeg源码中,存放SPS属性的结构体和解码SPS的函数分析

音视频入门基础:H.264专题(11)——计算视频分辨率的公式

音视频入门基础:H.264专题(12)——FFmpeg源码中通过SPS属性计算视频分辨率的实现

音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现

音视频入门基础:H.264专题(14)——计算视频帧率的公式

音视频入门基础:H.264专题(15)——FFmpeg源码中通过SPS属性获取视频帧率的实现

音视频入门基础:H.264专题(16)——FFmpeg源码中,判断某文件是否为H.264裸流文件的实现

音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程

=================================================================

一、引言

本文对之前音视频入门基础H.264专题(1)到(16)中的内容进行一个总结。通过FFmpeg命令可以获取到AnnexB格式的H.264裸流文件的信息,包括视频压缩编码格式、色彩格式、视频分辨率、帧率:

二、FFmpeg源码获取H.264裸流文件信息的内部实现原理

(一)打开H.264裸流文件

执行命令:./ffmpeg -i output.h264时,FFmpeg内部会执行avformat_open_input函数,而该函数内部会调用avpriv_open函数,打开需要被解析的H.264裸流文件。

avpriv_open函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为5.0.3)的源文件libavutil/file_open.c中:

int avpriv_open(const char *filename, int flags, ...)
{int fd;unsigned int mode = 0;va_list ap;va_start(ap, flags);if (flags & O_CREAT)mode = va_arg(ap, unsigned int);va_end(ap);#ifdef O_CLOEXECflags |= O_CLOEXEC;
#endif
#ifdef O_NOINHERITflags |= O_NOINHERIT;
#endiffd = open(filename, flags, mode);
#if HAVE_FCNTLif (fd != -1) {if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)av_log(NULL, AV_LOG_DEBUG, "Failed to set close on exec\n");}
#endifreturn fd;
}

可以看到avpriv_open函数内部通过系统调用 fd = open(filename, flags, mode) 打开需要被解析的H.264裸流文件,得到文件描述符fd。


 

(二)读取H.264裸流文件的数据

然后avformat_open_input函数内部会调用file_read函数读取H.264裸流文件的内容(二进制数据)。

file_read函数定义在FFmpeg源码的源文件libavformat/file.c中:

static int file_read(URLContext *h, unsigned char *buf, int size)
{FileContext *c = h->priv_data;int ret;size = FFMIN(size, c->blocksize);ret = read(c->fd, buf, size);if (ret == 0 && c->follow)return AVERROR(EAGAIN);if (ret == 0)return AVERROR_EOF;return (ret == -1) ? AVERROR(errno) : ret;
}

可以看到file_read函数内部通过系统调用 ret = read(c->fd, buf, size)读取H.264裸流文件的内容,并将其保存到缓存区buf中。

(三)判断该文件是否为H.264裸流文件

然后avformat_open_input函数内部通过h264_probe函数判断该文件是否为AnnexB格式的H.264裸流文件。具体可以参考:《音视频入门基础:H.264专题(16)——FFmpeg源码中,判断某文件是否为H.264裸流文件的实现》。

(四)获取色彩格式、视频分辨率、帧率等信息

然后FFmpeg内部会调用avformat_find_stream_info函数,在该函数内部,首先通过ff_h264_decode_seq_parameter_set函数解码SPS,得到SPS中的属性(具体可以参考:《音视频入门基础:H.264专题(10)——FFmpeg源码中,存放SPS属性的结构体和解码SPS的函数分析》)。然后在parse_nal_units函数中,根据上述获取到的SPS中的属性,计算出色彩格式、视频分辨率和帧率(具体可以参考:《音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现》、《音视频入门基础:H.264专题(12)——FFmpeg源码中通过SPS属性计算视频分辨率的实现》、《音视频入门基础:H.264专题(15)——FFmpeg源码中通过SPS属性获取视频帧率的实现》。

http://www.yayakq.cn/news/673837/

相关文章:

  • 站长工具高清无吗网络规划设计师教程pdf
  • 企业能建站吗郑州专门做喷绘安装的网站
  • 建设机械网站公司简约网站模板html
  • 网站建设开发哪个好学应届生招聘去哪个网站
  • cms网站开发实验报告服务营销策划方案
  • 网站推广的优势天眼查河南建设网站公司
  • 那种导航网站福田专业做网站公司
  • 做钓鱼网站要具备什么做网站的的价格
  • 台州企业网站建设公司国外推广网站有什么
  • 五屏网站建设免费推荐大全app下载
  • 程序代码优化网站查大学专业网站
  • 网站发布工具长沙装修公司招聘网
  • 张家口网站建设公司百度输入法免费下载
  • wordpress 免费完整中文主题下载wordpress目录页seo
  • 如何选择网站建设常州 网站建设
  • 域名转移 网站访问爱设计作图
  • 盐田区住房和建设局网站莱芜网逃人员
  • 做高仿包的能做网站吗东昌府网站制作
  • 为什么要建手机网站个人网页介绍
  • 咖啡色网站模板400电话网络推广微信网站
  • 当当网网站建设案例wordpress 漂亮的主题
  • 建设一个门户网站需要多久企业文化视频制作
  • 物流公司 网站模板form e哪个网站做
  • 陕西省高速公路建设集团公司网站影视视频网站怎么做
  • 百度关键词推广网站做网站设计师的原因
  • 关于动漫的网站建设wordpress 代码 高亮
  • ftp建网站太原网站建设方案策划
  • cms网站开发网站模板广州网站建设第一公司
  • 如何免费做网站的教程深圳市 交易建设中心网站
  • 中国工程建设造价信息网站厦门思明区建设局网站