获得H.264视频分辨率的方法
在使用ffmpeg解码播放TS流的时候(例如之前写过的UDP组播流),在连接时往往需要耗费大量时间。经过debug发现是av_find_stream_info(已抛弃,现在使用的是avformat_find_stream_info)这个方法十分耗时,而且是阻塞的。av_find_stream_info方法主要是获得相应的流信息,其中对我的应用最有用的就是视频的分辨率。在av_find_stream_info中是要不断的读取数据包,解码获得相应的信息,而其中除了分辨率信息以外的东西对我的应用中是无用的。所以,考虑自己手动从H.264码流中解析出视频的分辨率信息。
以下内容主要参考了这篇文章:http://www.myexception.cn/internet/586390.html
H.264码流的流信息都存储在了特殊的结构中,叫做SPS(Sequence Parameter Set)。要解析SPS就需要知道一些H.264码流的格式信息。
在H.264码流中,都是以0x00 0x00 0x01 或者 0x00 0x00 0x00 0x01为开始码的(在我的应用中为后者),之后通过检测开始码后第一个字节的后五位是否为7(00111)来判断其是否为SPS。得到SPS之后,就可以解析出视频的分辨率。SPS中有两个成员,pic_width_in_mbs_minus1和pic_height_in_map_units_minus_1,分别表示图像的宽和高,但是要注意的是它们都是以16为单位(在面积上就是以16*16的块为单位)再减1,所以实际的宽是(pic_width_in_mbs_minus1 + 1)*16,高为(pic_height_in_map_units_minus_1+1)*16。
欢迎转载,转载请注明出处:http://guoyb.com/Tech/34.html
以下是解析宽高的代码:
转载http://guoyb.com/Tech/34.html
以下部分 转自 http://blog.csdn.net/pkueecser/article/details/7367641
使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么这两项从哪里获取呢?答案是从H264码流中获取.在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的,找到开始码之后,使用开始码之后的第一个字节的低5位判断是否为7(sps)或者8(pps), 及data[4] & 0x1f == 7 || data[4] & 0x1f == 8.然后对获取的nal去掉开始码之后进行base64编码,得到的信息就可以用于sdp.sps和pps需要用逗号分隔开来.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如何解析SDP中包含的H.264的SPS和PPS串
http://www.pernet.tv.sixxs.org/thread-109-1-1.html
例如sps.txt中的内容为:
Z0LgFNoFglE=
pps.txt中的内容为:
aM4wpIA=
http://krdai.info.sixxs.org/blog/mp4-sps-pps-data.html
最近在做跟 h264 encode/decode 相關的研究,目標是希望可以從 Android 的 MediaRecorder 當中取出 h264 的資訊。目前問題是在於 SPS 以及 PPS 到底要怎樣得到。由於 MediaRecorder 是寫入 mp4 檔案中,所以不得已只好來去分析一下 mp4 的檔案格式,發現沒有想像中的困難. 主要是參照 ISO/IEC 14496-15 這部份. 在 mp4 的檔案之中, 找到 avcC 這個字串, 之後就是接上 AVCDecoderConfigurationRecord. AVCDecoderConfigurationRecord 的 format 如下:
- aligned(8) class AVCDecoderConfigurationRecord {
- unsigned int(8) configurationVersion = 1;
- unsigned int(8) AVCProfileIndication;
- unsigned int(8) profile_compatibility;
- unsigned int(8) AVCLevelIndication;
- bit(6) reserved = '111111'b;
- unsigned int(2) lengthSizeMinusOne;
- bit(3) reserved = '111'b;
- unsigned int(5) numOfSequenceParameterSets;
- for (i=0; i< numOfSequenceParameterSets; i++) {
- unsigned int(16) sequenceParameterSetLength ;
- bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;
- }
- unsigned int(8) numOfPictureParameterSets;
- for (i=0; i< numOfPictureParameterSets; i++) {
- unsigned int(16) pictureParameterSetLength;
- bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;
- }
- }
對照一下這樣就可以找到 SPS 和 PPS
问题 packetizer_h264 packetizer warning: waiting for SPS/PPS
是因为解码器只是在第一次执行编码的时候,才编码出 SPS、PPS、和I_Frame; h264 packetizer has set so, that it sends sps/pps only first keyframe,I'm trying to figure what breaks if that is changed so sps/pps is written in every keyframe. [出自| http://trac.videolan.org/vlc/ticket/1384] 解决办法: 1、编码器编码出每个关键帧都加上SPS、PPS ,据说通常情况编码器编出的 SPS、PPS是一样的,所以这种方法耗费资源。 2、在服务器接收到客户端请求时,发送第一个package 加上 SPS、PPS。 具体如下:
[http://topic.csdn.net/u/20100801/17/ef35e664-92ff-4144-a35f-3984dcf11da3.html| 参考] ======================================================================== sdp 关于pps和sps的疑问: packetization-mode 主要是定义包的模式,单一 NALU单元模式(0);非交错(non-interleaved)封包模式(1);交错(interleaved)封包模式(2) sprop-parameter-sets 等于H.264 的序列参数集和图像参数 NAL单元,base64转换;(即= sps+pps) profile-level-id 这个参数用于指示 H.264 流的 profile 类型和级别。这知道这个是啥东东参考 黑暗长老 www.cppblog.com/czanyou/ ffmpeg decode 关于pps sps问题: stackoverflow.com/questions/3493742/problem-to-decode-h264-video-over-rtp-with-ffmpeg-libavcodec/3500432#3500432 |
如何用C语言取出H.264ES文件里的nal(sps,pps)信息。比如width, height, profile等等
请高手指点指点。。。 http://www.oschina.net/question/225813_35707
解析sps,pps的代码在ffmpeg里面就有, 抄出来就行了, 我以前也自己写过...
ffmpeg的libavcodec/h264_parser.c,
h264_ps.c
函数
ff_h264_decode_seq_parameter_set
ff_h264_decode_picture_parameter_set
自己可以看代码.
H264参数语法文档: SPS、PPS、IDR http://blog.csdn.net/heanyu/article/details/6205390
H.264码流第一个 NALU 是 SPS(序列参数集Sequence Parameter Set)
对应H264标准文档 7.3.2.1 序列参数集的语法进行解析
获得H.264视频分辨率的方法相关推荐
- 【FFmpeg编码实战】(2)将YUV420P图片集编码成H.264视频文件(方法二)
[FFmpeg编码实战](2)将YUV420P图片集编码成H.264视频文件(方法二) 一.编码成 H.264 视频文件,运行结果 二.编码成 MPEG4 视频文件,运行结果 三.编码成 AV_COD ...
- Windows 下令 OpenCV 支持 h.264 视频编码的方法
引言 OpenCV 和 ffmpeg 修改 opencv_ffmepgdll 的步骤 安装 MinGW 编译 x264 编译 ffmpeg 生成 opencv_ffmpegdll 准备 生成 测试 结 ...
- H.264 视频质量评价方法 (基于视频内容)
Michal Ries等人在论文<Content Based Video Quality Estimation for H.264/AVC Video Streaming>中,描述了一种基 ...
- H.264视频编码推荐的分辨率和码率配置表
在各种视频编码标准中,行业一直在求追"高压缩比(数据量越小越好)",同时又保证"高视频质量"的算法.鱼和熊掌不可兼得,视频编码是一种折中的游戏.参数" ...
- 音视频开发(24)---H.264视频编码基本知识
H.264视频编码基本知识 一.视频编码技术的发展历程 视频编码技术基本是由iso/iec制定的mpeg-x和itu-t制定的h.26x两大系列视频编码国际标准的推出.从h.261视频编码建议,到 h ...
- 基于RTP协议的H.264视频传输系统:实现
实现的原理:基于RTP协议的H.264视频传输系统:原理 相关文章: [1]RTP协议分析 [2]jrtplib简介 [3]Qt调用jrtplib实现单播.多播和广播 [4]RTP 有效负载(载荷)类 ...
- 四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码
常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码 我们已经知道,H.264是一种视频压缩标准,其只规定了符合标准的码流的格式,以及码流中各个语法元素的解析方法.H.264标准并 ...
- 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 关键帧数据格式 | 非关键帧数据格式 | x264 编码后的数据处理 | 封装 H.264 视频数据帧 )
文章目录 安卓直播推流专栏博客总结 一. x264 编码后的 H.264 数据帧 二. RTMP 协议中 关键帧 / 非关键帧 数据格式 说明 三. 判定 H.264 帧数据分隔符 四. 初始化 RT ...
- H.264 视频的 RTP 载荷格式
本文是 IETF 的规范 RFC 6184 的一部分的翻译,该规范 地址.翻译这份文档,主要是为了编写一段用 RTP 传输 H.264 流的代码.本想在网上找一些文章完成任务了事的,但由于个人之前音视 ...
最新文章
- Java进制转换示例
- mysql错误:this authentication plugin is not supported
- 人脸扫描建模_人脸识别智能锁安全吗?
- 计算机分组教学,中职计算机教学分组协作式学习论文
- 【GDC 21】《对马岛之魂》战斗系统讲解
- oracle百分比变成小数,oracle中计算百分比,并同时解决小数点前0不显示的问题...
- vue 动态加载图片路径报错解决方法
- weblogic + apache 负载均衡与Session复制
- Java TCP小结
- matlab画图函数基本使用(适合新手)
- 23个常见Webshell网站管理工具
- MATLAB——数据类型
- 微信小程序通过BLE低功耗蓝牙向USB HID键盘设备输出汉字(内含GBK编码转汉字)
- 找不到xinput1_3.dll怎么办?如何修复dll文件缺失
- OpenLayers3基础教程——OL3基本概念
- 用JS通过新浪天气API接口获取天气
- 【NLP入门教程】五、命名实体识别
- PPP概念股有哪些?PPP概念股大全
- _motz_ forum.php_开启模块化大门 moto z体验
- 分布式事务中的那些事——微服务总结(二)
热门文章
- android view爆炸效果,Android 显示view的粒子爆炸/绽放效果
- 5月15日直播预告:英飞凌AURIX™培训—图像处理、实车演示等热点问题
- 2021年春季学期-信号与系统-第十次作业参考答案
- AI视觉组基于ESP32的裁判系统第一版本设计要求
- 哈尔滨工程大学智能科学与工程学院成功举办了“一院一节“暨十二届极速挑战智能车总决赛
- arp 不同网段 相同vlan_H3C交换机配置VLAN
- 图书管理系统python源代码-Python实现图书管理系统
- mysql innodb 主键,Mysql InnoDB 引擎 主键性能
- 刘道成mysql视频教程_燕十八刘道成Mysql 系列视频教程 Mysql视频教程打包下载
- 鸿蒙os内测版应用名称,鸿蒙OS2.0发布,只有两款机型可以申请内测