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

做网站的资料手机网站禁止缩放

做网站的资料,手机网站禁止缩放,小米发布会ppt,产品开发流程6个步骤音视频入门基础#xff1a;H.264专题系列文章#xff1a; 音视频入门基础#xff1a;H.264专题#xff08;1#xff09;——H.264官方文档下载 音视频入门基础#xff1a;H.264专题#xff08;2#xff09;——使用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 Headerforbidden_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专题14——计算视频帧率的公式》中讲述了通过SPS中的属性计算H.264编码的视频的帧率的公式。本文讲解FFmpeg源码中计算视频帧率的实现。 二、FFmpeg源码中计算视频帧率的实现 从文章《音视频入门基础H.264专题10——FFmpeg源码中存放SPS属性的结构体和解码SPS的函数分析》中我们可以知道FFmpeg源码中通过ff_h264_decode_seq_parameter_set函数解码SPS从而拿到SPS中的属性。 计算视频帧率所需的属性在SPS的VUI parameters视频可用参数中。ff_h264_decode_seq_parameter_set函数通过调用decode_vui_parameters函数解码VUI parameters int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx,H264ParamSets *ps, int ignore_truncation) { //...sps-vui_parameters_present_flag get_bits1(gb);if (sps-vui_parameters_present_flag) {int ret decode_vui_parameters(gb, avctx, sps);if (ret 0)goto fail;}//... } decode_vui_parameters函数中通过下面的这部分代码拿到计算视频帧率所需的属性timing_info_present_flag、num_units_in_tick、time_scale static inline int decode_vui_parameters(GetBitContext *gb, void *logctx,SPS *sps) { //...sps-timing_info_present_flag get_bits1(gb);if (sps-timing_info_present_flag) {unsigned num_units_in_tick get_bits_long(gb, 32);unsigned time_scale get_bits_long(gb, 32);if (!num_units_in_tick || !time_scale) {av_log(logctx, AV_LOG_ERROR,time_scale/num_units_in_tick invalid or unsupported (%u/%u)\n,time_scale, num_units_in_tick);sps-timing_info_present_flag 0;} else {sps-num_units_in_tick num_units_in_tick;sps-time_scale time_scale;}sps-fixed_frame_rate_flag get_bits1(gb);}//... } 然后在FFmpeg源码的源文件libavcodec/h264_parser.c的parse_nal_units函数中通过如下代码得到视频帧率 static inline int parse_nal_units(AVCodecParserContext *s,AVCodecContext *avctx,const uint8_t * const buf, int buf_size) {//...for (;;) {switch (nal.type) {case H264_NAL_SPS:ff_h264_decode_seq_parameter_set(nal.gb, avctx, p-ps, 0);break;//...case H264_NAL_IDR_SLICE://...if (sps-timing_info_present_flag) {int64_t den sps-time_scale;if (p-sei.unregistered.x264_build 44U)den * 2;av_reduce(avctx-framerate.den, avctx-framerate.num,sps-num_units_in_tick * avctx-ticks_per_frame, den, 1 30);}//... }//...} } 可以看到在FFmpeg源码的parse_nal_units函数中最终是通过语句 av_reduce(avctx-framerate.den, avctx-framerate.num,sps-num_units_in_tick * avctx-ticks_per_frame, den, 1 30); 计算出视频帧率的。 上述函数av_reduce的实参avctx-ticks_per_frame是结构体AVCodecContext的成员变量它会被设置为每帧的时基的时钟数。默认值为1如果编解码器是H.264或MPEG-2会被设置为2 typedef struct AVCodecContext {/*** For some codecs, the time base is closer to the field rate than the frame rate.* Most notably, H.264 and MPEG-2 specify time_base as half of frame duration* if no telecine is used ...** Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.*/int ticks_per_frame; } 用户需要获取H.264编码的视频的媒体信息时会调用avformat_find_stream_info函数而该函数内部会调用h264_decode_init函数让avctx-ticks_per_frame被初始化为2也就是说对于H.264avctx-ticks_per_frame的值就是2 static av_cold int h264_decode_init(AVCodecContext *avctx) { //...if (avctx-ticks_per_frame 1) {if(h-avctx-time_base.den INT_MAX/2) {h-avctx-time_base.den * 2;} elseh-avctx-time_base.num / 2;}avctx-ticks_per_frame 2; //... } 所以在parse_nal_units函数中语句 av_reduce(avctx-framerate.den, avctx-framerate.num,sps-num_units_in_tick * avctx-ticks_per_frame, den, 1 30); 等价于 av_reduce(avctx-framerate.den, avctx-framerate.num,sps-num_units_in_tick * 2, den, 1 30); 而den的值为sps-time_scale。所以上述语句等价于 av_reduce(avctx-framerate.den, avctx-framerate.num,sps-num_units_in_tick * 2, sps-time_scale, 1 30); av_reduce函数是用来计算视频帧率的其源码定义在FFmpeg源码libavutil/rational.c中 int av_reduce(int *dst_num, int *dst_den,int64_t num, int64_t den, int64_t max) {AVRational a0 { 0, 1 }, a1 { 1, 0 };int sign (num 0) ^ (den 0);int64_t gcd av_gcd(FFABS(num), FFABS(den));if (gcd) {num FFABS(num) / gcd;den FFABS(den) / gcd;}if (num max den max) {a1 (AVRational) { num, den };den 0;}while (den) {uint64_t x num / den;int64_t next_den num - den * x;int64_t a2n x * a1.num a0.num;int64_t a2d x * a1.den a0.den;if (a2n max || a2d max) {if (a1.num) x (max - a0.num) / a1.num;if (a1.den) x FFMIN(x, (max - a0.den) / a1.den);if (den * (2 * x * a1.den a0.den) num * a1.den)a1 (AVRational) { x * a1.num a0.num, x * a1.den a0.den };break;}a0 a1;a1 (AVRational) { a2n, a2d };num den;den next_den;}av_assert2(av_gcd(a1.num, a1.den) 1U);av_assert2(a1.num max a1.den max);*dst_num sign ? -a1.num : a1.num;*dst_den a1.den;return den 0; } 所以语句 av_reduce(avctx-framerate.den, avctx-framerate.num,sps-num_units_in_tick * 2, sps-time_scale, 1 30); 相当于执行了公式视频帧率 time_scale / (2 * num_units_in_tick)。然后把得到的视频帧率的分子和分母分别存放到avctx-framerate.den和avctx-framerate.num中返回。
http://www.hkea.cn/news/14409146/

相关文章:

  • 网站建设合同性质做搜狗手机网站优化点
  • 哪家公司做网站正规网站定制建设
  • 做一个平台网站大概多少钱个人营业执照怎么申请
  • 山东省品牌专业群建设网站网站开发后端是什么
  • 浅析社区网站的建设wordpress挂黑页
  • 长春几个火车站啊江门网站优化排名
  • 太原的网站建设公司哪家好企业网站 phpcms
  • 加盟网网站建设php网站只能打开首页
  • 南宁个人做网站的做网站的公司怎么推广
  • 87网站建设工作室莱钢吧贴吧
  • saas建站工具wordpress修改固定链接404
  • 泰州专门做网站北京市建设网
  • 百度蜘蛛网站新闻20字摘抄大全
  • 网站的功能包括哪些深圳在线教育
  • 电商思维做招聘网站沧州黄骅港赶海的地方
  • 做外国网站怎么买空间成都网站建设空间
  • 宜城做网站在wordpress里_怎么把文章放到指定的导航栏目里
  • 在线免费网站模板最专业的企业营销型网站建设价格
  • 怎么优化整站门户网站建设和推广
  • 济南网站河南网站建设价格与方案
  • 2018年静安区品牌网站建设公司简介模板免费下载电子版
  • 苏州电商网站建设企业融资渠道有哪些
  • 帮人做网站收费合法吗商城app制作
  • 网站建设怎么解析域名一级域名如何分发二级域名
  • 网站建设情况怎么写范文网页的网站建设在哪里
  • wordpress词汇插件信息流优化师简历怎么写
  • 建立化妆品网站功能2022最新通道地址1
  • 手机网站 php怎么用文本做网站
  • 有网站了怎么设计网页安顺住房和城乡建设部网站
  • 蒙城做网站学校的网站怎么做的