首页 > 其他分享 >码流格式: Annex-B, AVCC(H.264)与HVCC(H.265), extradata详解(转)

码流格式: Annex-B, AVCC(H.264)与HVCC(H.265), extradata详解(转)

时间:2023-09-07 15:23:20浏览次数:38  
标签:码流 H.265 H.264 字节 Annex extradata NAL AVCC 格式

原文:http://www.taodudu.cc/news/show-6091235.html?action=onClick

1.前言

介绍H.264结构的文章铺天盖地,无责任翻译、无责任转载以及部分经验之谈(目前搜索最靠前的一篇实际是对stackoverflow上答案的翻译。。链接后面给出了),所以缺的不是资料,是叙述准确的资料。来吧,看这篇整理就够了。

2.典型问题

iOS 硬解264视频(MP4),出现绿屏,或上半部分正常下半部分绿屏。
iOS 硬解265视频,同样也要解决的extradata处理问题。
参:iOS11 VideoToolbox硬解HEVC

首先来看两种格式:

3.Annex-B 和 AVCC/HVCC

H.264码流分Annex-B和AVCC两种格式。
H.265码流是Annex-B和HVCC格式。
(以下内容针对H.264,但大体也适用于H.265/HEVC)

3.1别名

  • AVCC格式 也叫AVC1格式,MPEG-4格式,字节对齐,因此也叫Byte-Stream Format。用于mp4/flv/mkv, VideoToolbox。
  • Annex-B格式 也叫MPEG-2 transport stream format格式(ts格式), ElementaryStream格式。

Annex-B 附录B, 指ITU-T的 Recommendation(h.264和h.265)在附录B中规定码流格式。

3.2 结构上的区别:

区别有两点:一个是参数集(SPS, PPS)组织格式;一个是分隔。
- Annex-B:使用start code分隔NAL(start code为三字节或四字节,0x000001或0x00000001,一般是四字节);SPS和PPS按流的方式写在头部。
- AVCC:使用NALU长度(固定字节,通常为4字节)分隔NAL;在头部包含extradata(或sequence header)的结构体。(extradata包含分隔的字节数、SPS和PPS,具体结构见下)

3.2.1 Annex B

 

3.2.2 extradata

H.264/AVC extradata 语法

参考:《ISO/IEC 14496-15 NAL unit structured video》AVCDecoderConfigurationRecord结构:(最小长度7字节)

 说明:
FFmpeg中,extradata解析,见ff_h264_decode_extradata()

注意:
第5字节的最后2位,表示的就是NAL size的字节数。在AVCC格式中,每个NAL前面都会有NAL size字段。NAL size可能是1字节、2字节或4字节(4字节较常见),解析extradata重要目的就是确认这个值。(而Annex-B格式,要split NAL,只要去探测0x000001就可以了)

H.264 extradata 示例(AVCC格式)

05| FF          NAL size:  4字节
06| E1          SPS num:   1
07| 00 1F       SPS size:  31字节
09| 67          NAL type:  SPS
40| 01          PPS num:   1
41| 00 05       PPS size:  5字节
42| 68          NAL type:  PPS

H.265/HEVC extradata语法

参照HEVCDecoderConfigurationRecord:(最小长度23字节)

HEVC extradata 示例(HVCC格式)

 

 

3.3 实践

VideoToolbox 与 AVCC格式 1

硬解 仅支持avcC格式。 如ES格式,需要转为MPEG-4格式 P58
硬编 输出avcC格式。 P204

MediaCodec 与 Annex-B格式

硬解 支持Annex-B格式,avcC需要做转换,NALU长度替换为start code

Annex-B 转 AVCC 2

对于仅接受AVCC格式的播放器(如Quicktime v7.0),需要进行convert Annex-B to AVCC:
- start code 转为4字节 NAL size
- SPS, PPS创建 extradata

AVCC 转 Annex-B

FFmpeg “extract_extradata” bitstream filter: 3
h264码流转换:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
hevc码流转换:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts

4. 后续

了解了H.264 extradata以及NAL组织结构,自然引出H.264码流结构的议题,下篇干脆系统分析下H.264, HEVC码流结构。

 

标签:码流,H.265,H.264,字节,Annex,extradata,NAL,AVCC,格式
From: https://www.cnblogs.com/ajianbeyourself/p/17685012.html

相关文章

  • LntonMedia点播H.265格式的MTS文件,视频前10秒无法播放该如何解决?
    LntonMedia视频直播点播平台是一款集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体的平台。该平台可以提供音视频采集、视频推拉流、播放H.265编码视频、存储和分发功能,适用于各种终端和平台。LntonMedia在点播视频方面具备以下能力:支持用户上传视频文件并进行点......
  • EasyPlayer开放外部录像接口:自由扩展H.265网页播放功能
    EasyPlayer通过实现视频实时录像功能,不仅提供轻量化、便捷化的视频资源下载能力,同时有效减少了带宽和计算资源的消耗。这种创新的功能使得用户可以灵活地获取所需的视频数据,为其节省使用成本并提升整体效率。今天我们来分享一下EasyPlayer播放器对外开放录像的方法。1)在播放器内部......
  • EasyCVR视频融合平台Linux环境下CGO调用C接口推流异常,H.265转H.264失败的原因是?
    EasyCVR视频融合云平台采用云边端一体化架构,可以将分散在仓储各处的前端监控设备(如IPC、NVR等)集中接入,并提供实时视频监控、视频录像、云存储、录像检索与回放、智能告警、云台控制、平台级联、服务器集群等视频能力服务。通过实时高清视频监控,仓储管理人员可以高效地监管人员和货......
  • 通过调整解码器参数,EasyPlayer.js可以实现H.265音频解码
    EasyPlayer是一款稳定且流畅的流媒体播放器,它能够支持H.264和H.265视频播放。该播放器能够处理各种视频流格式,包括RTSP、RTMP、HLS、FLV和WebRTC等。EasyPlayer具备多个版本,例如EasyPlayer-RTSP、EasyPlayer.js和EasyPlayerPro,以满足不同用户在不同场景下的需求。此外,EasyPlayer还......
  • 如果您在集成H.265视频流媒体播放器EasyPlayer.js时遇到了"SourceBuffer"报错,您可以采
    EasyPlayer是由青犀视频公司推出的一款功能强大且高度开放的H.265视频流媒体播放器。它支持播放H.264和H.265视频格式,具有出色的稳定性和流畅的播放效果。此外,EasyPlayer还提供多个版本供用户选择,包括EasyPlayer-RTSP、EasyPlayer-Pro和EasyPlayer.js等版本。每个版本都具有自己的......
  • 国标GB28181视频平台EasyGBS国标平台添加针对H.265视频流的告警信息的具体操作流程
    EasyGBS国标视频云服务支持设备/平台通过国标GB28181协议注册接入,可实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。在EasyGBS平台中接入......
  • 国标GB28181视频平台EasyGBS国标平台添加针对H.265视频流的告警信息的具体操作流程
    EasyGBS国标视频云服务支持设备/平台通过国标GB28181协议注册接入,可实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格式。 在E......
  • H.265视频无插件流媒体播放器EasyPlayer.js播放webrtc断流重连的异常修复
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能。测试......
  • 在集成H.265视频流媒体播放器EasyPlayer.js时遇到"SourceBuffer"报错,应该如何解决?
    EasyPlayer,是由TSINGSEE青犀视频推出的一款功能强大且开放性很高的H.265视频流媒体播放器。它支持H.264和H.265视频格式的播放,并具有稳定性强、流畅播放等特点。此外,EasyPlayer还有多个版本可供选择,例如EasyPlayer-RTSP、EasyPlayer-Pro、EasyPlayer.js等。有用户反馈,在使用播放器......
  • 使用EasyPlayer.js,通过设置解码器参数实现H.265音频解码
    EasyPlayer是一款稳定且流畅的流媒体播放器,它能够支持H.264和H.265视频播放。该播放器能够处理各种视频流格式,包括RTSP、RTMP、HLS、FLV和WebRTC等。EasyPlayer具备多个版本,例如EasyPlayer-RTSP、EasyPlayer.js和EasyPlayerPro,以满足不同用户在不同场景下的需求。此外,EasyPlayer还......