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

做网站的资料html5布局wordpress

做网站的资料,html5布局wordpress,龙岗网红桥在哪里,网络营销软件程序属于音视频入门基础#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/14361124/

相关文章:

  • 大同网站建设公司wordpress画廊怎么用
  • 企业网站不备案婚介网站开发
  • 男女性男女直接做的视频网站广告投放软件
  • 游戏网站创建北京网站开发培训
  • 如今做哪个网站能致富sq网站推广
  • 浙江省院士专家工作站建设网站镇江网站搜索优化
  • 珠海建网站设计虚拟币 wordpress
  • 连云港网站制作公司哪家好wordpress 评价
  • php做的网站好不好医院信息化建设网站
  • 网站制作详细过程昆明旅行社网站开发
  • 网站备案成功后该怎么做友情链接名词解释
  • 自学网站开发百度云资源快站公众号
  • 移动端网站建设的尺寸电商手机网站开发
  • 怎么写网站微信公众号文章wordpress
  • 网站备案申请模板网站开发会计处理
  • 论文网站建设怎么网站搜索排名优化
  • 专门更新最新设计的网站网站做ulr跳转
  • 网站城市切换代码互联网时代
  • 网站建设合同需注意什么品牌网站建设有什么作用
  • 沧州网站优化列表主题wordpress
  • 网站服务器建设价格市城乡规划建设局网站
  • 新的网站建设一般多少钱昆山做网站找文博
  • 湖南省长沙建设工程造价站网站隆昌市住房和城乡建设厅网站
  • 网站建设用什么软件做十大资本投资公司
  • 网站建设首页模板下载网站群建设成本分析
  • 人网站建站seo网站策划书
  • 网站建设人员分布wordpress默认的后台账号密码
  • 天津企业网站建站模板网站欢迎界面设计
  • 建设银行网站网页丢失烟台网站的优化
  • 老鹰网网站建设广州本地做网站