不久前我们已经在RTMP推送端扩展支持了HEVC(H.265 后文统称H265)编码格式,但是,由于RTMP官方指定的协议格式已经不再更新,官方的播放器的Flash播放器并不支持H265格式的编码数据进行解码播放 ;现在,我们需要在播放器端解析RTMP流时对H265编码格式进行扩展支持。 首先,我们可以通过扩展ffmpeg,让其支持拉H265封装的RTMP流进行解码播放,我们可以通过金山云对FFmepg的扩展支持H265来解决。 扩展支持HEVC(H.265) e_FlvVideoCodecId_Hevc = 12, }; enum FlvCodeId { FlvCodeId_Jpeg = 1, FlvCodeId_Sorenson 扩展支持HEVC(H.265) FlvCodeId_Hevc = 12, }; 2.
然而,传统 RTMP 也存在先天局限: 编码器单一:仅支持 H.264,不具备承载新一代高效编码器的能力; 扩展性不足:不支持 H.265/HDR 等新格式,难以满足超高清/4K 场景; 带宽成本高 它在不破坏现有生态的前提下,增加了对 HEVC/H.265 的支持,扩展了 FLV 容器结构,使 RTMP 可以在同一链路上同时承载 H.264 与 H.265,从而为后续的 AV1/H.266 演进预留了空间 国内 CDN 厂商联盟的 RTMP-H.265 扩展模式。 这些方案普遍采用“在原有 RTMP/FLV 结构上强行塞入 H.265 码流”的方式,虽然能用,但存在以下问题: 无统一标准:不同厂商的兼容方式略有差异; 缺乏 FourCC 标识:仅依靠扩展的 CodecID H.265 标识); 直接按扩展 FLV 封装解析 H.265 NALU; 已广泛适配国内 CDN 商用环境。
RTMP要支持H.265,大家约定俗成的做法是扩展flv协议,CDN厂商携手给出的解决方案是给flv的videotag CodecID增加一个新类型(12)来表示h265(hevc),和h264不同的地方是要解析 遗憾的是,尽管CodecID可以自定义,但CodecID只有4个bits,增加H.265尚可,如果后续再新增VP8、VP9、 AV1甚至H.266就很尴尬,这种尴尬持续了数年,直到官方发布了 Enhancing 技术实现本文以大牛直播SDK的Windows平台RTMP直播推送和RTMP直播播放模块为例,考虑到老的扩展CodecID 12的场景依然使用,我们添加了个设置接口:RTMP推送端,对应文件为SmartPublisherSDK 1,那就是扩展头,Enhanced-Rtmp格式。 技术总结鉴于目前RTMP扩展265这块,大多还是用的老的CodecID设置为12的模式,如果需要支持新的Enhanced RTMP,除了推送端和播放端外,RTMP服务端也需要做响应的调整,来适配这种情况
对于直播而言,大部分推拉流协议是基于RTMP的,因此本文将主要介绍如何在RTMP协议中增加对HEVC视频编码格式的支持。 HEVC在RTMP中的扩展 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具体修改内容见下。 4.1 FLV规范扩展 HEVC为视频编码格式,因此对FLV规范的扩展,只集中在Video Tag,其它部分,无任何改动。 扩展后的VideoTagBody如下图所示(红色字体为HEVC新增内容): 图10. 结束语 本文简单介绍了如何在FFmpeg中扩展rtmp协议对HEVC编码格式的支持,而要将HEVC应用于直播整体方案,除推流端和播放端要提供相应能力外,源站、CDN、转码服务同样都需要提供这种能力。
直播推流SDK RTMP推送SDK(支持同时推多路url,支持RTMP扩展H.265推送(64位库))); RTSP直播推流SDK 支持RTSP H.264/H.265推送,音频支持AAC格式, ,超低延迟; RTMP直播播放器SDK 业内首屈一指的RTMP超低延迟直播播放器SDK(支持RTMP H.265扩展播放); RTSP直播播放器SDK 支持RTSP H.265播放及扩展录像 扩展H.265]Windows/Android/iOS推送SDK支持RTMP扩展H.265推送,Windows针对摄像头采集软编码,使用H.265可变码率,带宽大幅节省,效果直逼传统H.265编码摄像头 ]支持网络状态、buffer状态等回调; [视频格式]支持RTSP H.265、RTMP扩展H.265,RTSP/RTMP H.264,此外,还支持RTSP MJPEG播放; [音频格式]RTMP/ /rtmp流到rtmp server; [H.265支持]业内首家支持RTSP/RTMP H.265转RTMP推送的SDK(提供配套RTMP扩展H.265服务器); 对应Demo: Windows测试程序
但随着 H.265/HEVC 的普及,产业提出了两种扩展方案: RTMP 扩展 H.265:在 VideoTag 中通过扩展 CodecID 表示 HEVC,兼容 H.264 的封装方式; Enhanced RTMP 扩展 H.265 的封装业界将 CodecID 扩展为 12,标识 HEVC。 整体架构分为四层: 输入与协议层 标准 RTMP 协议栈 RTMP 扩展 H.265 / Enhanced RTMP HEVC 支持 自动重连与多路 URL 切换 解复用与缓存层 支持 AAC 五、与规范的对应关系层面规范/扩展SDK 实现视频编码RTMP H.264 (CodecID=7)软/硬解全面支持RTMP 扩展 H.265 (CodecID=12)内核支持,适配 H.265 解码器Enhanced 在 H.265/HEVC 普及的背景下,通过 RTMP 扩展 H.265 与 Enhanced RTMP HEVC 的演进,RTMP 不仅延续了传统优势,还成功拓展到 低延迟、高压缩比的新一代实时视频链路
扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;支持特定机型硬编码;支持实时音量调节;支持扩展录像模块;支持Unity接口;支持H.264扩展SEI发送模块;支持Windows7 ;支持实时动态水印;支持实时快照;支持降噪处理、自动增益控制;支持外部编码前音视频数据对接;支持外部编码后音视频数据对接;支持RTMP扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;支持实时音量调节;支持扩展录像模块;支持Unity接口;支持H.264扩展SEI发送模块;支持Android 5.1及以上版本。 、竖屏推送;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;实时快照;外部编码前音视频数据对接;外部编码后音视频数据对接;特定设备H.265硬编码;RTMP扩展H.265 (需设备支持H.265特定机型硬编码);扩展录像模块;H.264扩展SEI发送模块;支持iOS 9.0及以上版本。
不久前刚实现SkeyeRTMPPusher扩展支持h265推送,当时在网上也查找了很多资料,发现都不尽详细,而官方也没有更新对HEVC(H265,后文统称HEVC)tag的支持,反正是走了不少弯路,当然 首先, RTMP头部信息封装并没有定义HEVC,我们采用CDN联盟的HEVC扩展标准,将HEVC的VideoTagHeader定义为12,详见下图: 图片 然后,我们在H264封装的基础上进行改进,以支持
可扩展性:随着直播行业的不断发展,对推流技术的要求也越来越高。RTMP推送技术可以根据实际需求进行扩展和优化,以支持更高清、更低延迟的直播传输。 涵盖了准备工作、接口设计、数据对接、RTMP推送以及扩展功能等方面。 Android平台RTMP推送模块功能设计:音频编码:AAC/SPEEX;视频编码:H.264、H.265;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;[摄像头]支持采集过程中,前后摄像头实时切换 支持RTMP扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;支持实时音量调节;支持扩展录像模块;支持Unity接口;支持H.264扩展SEI发送模块;支持Android 扩展功能: 本地录像与快照:支持本地录像和快照功能,通过相关接口实现。H.265与Enhanced RTMP支持:除了H.264外,还支持H.265编码和Enhanced RTMP扩展。
:音频编码:AAC/SPEEX;视频编码:H.264、H.265;推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;[屏幕/摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置 扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;支持特定机型硬编码;支持实时音量调节;支持扩展录像模块;支持Unity接口;支持H.264扩展SEI发送模块;支持Windows7 如果是轻量级RTSP服务: [基础功能]支持Windows平台RTMP直播推送模块常规功能; [音频格式]AAC; [视频格式]H.264、H.265; [协议类型]RTSP; [传输模式]支持单播和组播模式 在Windows 64位系统上,如果推RTMP流,需要服务器支持RTMP H.265扩展(或Enhanced RTMP),同时播放器SDK也需要同步支持RTMP H.265扩展播放。 扩展功能:支持实时快照、实时录像、降噪处理、自动增益控制、VAD端点检测等扩展功能。
可以将桌面、摄像头、程序窗口通过rtmp推送到流媒体服务器上。 推流]超低延时的RTMP协议直播推流SDK(Windows/Android/iOS支持RTMP扩展H.265推送); [视频格式]Windows/Android平台支持H.264/H.265编码(Android 硬编码]Windows/Android/iOS平台支持H.265特定机型硬编码; [硬编码自适应]Android/iOS平台支持硬编码自适应,如检测到硬编码不支持,自动切换到软编(iOS如H.265硬编 扩展H.265]Windows/Android/iOS推送SDK支持RTMP扩展H.265推送,Windows针对摄像头采集软编码,使用H.265可变码率,带宽大幅节省,效果直逼传统H.265编码摄像头 跨平台支持 利用 Flash Media Live Encoder 中的扩展支持 — 现在在 PC 和 Mac 平台上可用。
技术演进“大牛直播SDK”始于2015年,致力于传统行业极致体验的音视频直播技术解决方案,产品涵盖跨平台的实时RTMP推流、RTMP/RTSP直播播放(支持RTSP|RTMP H.265,Enhanced RTMP H.265)、GB28181设备接入、推送端播放端实时录像、多路流媒体转发(RTSP转RTMP,RTMP转RTMP,RTSP|RTMP转GB28181)、音视频导播、动态视频合成、音频混音、 ]支持RTMP扩展H.265和Enhanced RTMP H.265,H.264; [音频格式]支持AAC/PCMA/PCMU/Speex; [H.264/H.265软解码]支持H.264/H.265软解 ; [H.264硬解码]Windows/Android/iOS支持特定机型H.264硬解; [H.265硬解]Windows/Android/iOS支持特定机型H.265硬解; [H.264/H.265 平台支持指定回调图像大小的接口(可以对原视图像缩放后再回调到上层); [解码前音频数据回调]支持AAC/PCMA/PCMU/SPEEX数据回调; [音视频自适应]支持播放过程中,音视频信息改变后自适应; [扩展录像功能
RTSP H.265到RTMP,首先需要扩展RTMP协议。目前,我国已有相应的推广标准,国内开发商基本上都是按照该协议进行推广的。协议层面的问题已经得到解决。 剩下的关键问题是实现RTMP H.265推送模块。 ? rtmp h265 server 支持,目前常用的nginx-rtmp 和 srs还不支持rtmp h265,需要做些修改。 对于nginx rtmp,由于nginx rtmp 模块代码较少,支持265 很方便,也是增加265类型,解析HEVCDecoderConfigurationRecord,对相应模块做处理即可。 另外就是 nal type 针对h.265需要处理。解析出nal units之后。下一个关键点就是解码,目前安卓部分手机已经支持h265硬解,或者用软解也可以。 rtmp h265 推送支持,如果已经有了 h265 nal unit, 用 vps, sps, pps 构造出HEVCDecoderConfigurationRecord, 按扩展协议打包rtmp包即可
扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;支持特定机型硬编码;支持实时音量调节;支持扩展录像模块;支持Unity接口;支持H.264扩展SEI发送模块;支持Windows7 ;支持实时动态水印;支持实时快照;支持降噪处理、自动增益控制;支持外部编码前音视频数据对接;支持外部编码后音视频数据对接;支持RTMP扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced 、竖屏推送;[对接服务器]支持自建标准RTMP服务器或CDN;支持断网自动重连、网络状态回调;实时快照;外部编码前音视频数据对接;外部编码后音视频数据对接;特定设备H.265硬编码;RTMP扩展H.265 (需设备支持H.265特定机型硬编码);扩展录像模块;H.264扩展SEI发送模块;支持iOS 9.0及以上版本。 推流功能: RTMP 推流:提供超低延时的 RTMP 协议直播推流功能,并且 Windows、Linux、Android、iOS 支持 RTMP 扩展 H.265 推送,在保证推流质量的同时,能够有效降低带宽占用
这正是 大牛直播SDK(SmartMediaKit) 的定位:提供面向机器人与边缘智能的低延迟 RTSP 播放/服务、内网公网 RTMP 分发(含 Enhanced RTMP + HEVC/H.265) RTMP + HEVC/H.265,在同等码率下更高画质或更低带宽; 轻量转发/小型服务:端侧或边缘即可完成发流/转封装/转发,减少对集中式流媒体的依赖; GB28181 对接:适配政企安防汇聚、 [支持播放协议] RTSP、RTMP; [多实例播放]支持多实例播放; [事件回调]支持网络状态、buffer状态等回调; [视频格式]支持H.265、H.264,此外,还支持RTSP MJPEG播放; [视频格式]支持RTMP扩展H.265和Enhanced RTMP H.265,H.264; [音频格式]支持AAC/PCMA/PCMU/SPEEX(RTMP); [H.264/H.265软解码]支持 H.264/H.265软解; [H.264硬解码]Windows/Android/iOS支持特定机型H.264硬解; [H.265硬解]Windows/Android/iOS支持特定机型H.265硬解;
[多实例播放]支持多实例播放; [事件回调]支持网络状态、buffer状态等回调; [视频格式]支持RTMP扩展H.265和Enhanced RTMP H.265,H.264; [音频格式]支持AAC/ PCMA/PCMU/Speex; [H.264/H.265软解码]支持H.264/H.265软解; [H.264硬解码]Windows/Android/iOS支持特定机型H.264硬解; [H.265硬解 ]Windows/Android/iOS支持特定机型H.265硬解; [H.264/H.265硬解码]Android支持设置Surface模式硬解和普通模式硬解码; [缓冲时间设置]支持buffer time 实时下载速度更新]支持当前下载速度实时回调(支持设置回调时间间隔); [ARGB叠加]Windows平台支持ARGB图像叠加到显示视频(参看C++的DEMO); [解码前视频数据回调]支持H.264/H.265 平台支持指定回调图像大小的接口(可以对原视图像缩放后再回调到上层); [解码前音频数据回调]支持AAC/PCMA/PCMU/SPEEX数据回调; [音视频自适应]支持播放过程中,音视频信息改变后自适应; [扩展录像功能
作用:该协议提供了一个可扩展的框架,以控制、按需传送实时数据。 协议特点: 可扩展性:新方法和参数很容易加入 RTSP,方便根据不同的需求进行功能扩展。 易于集成: RTMP 协议被广泛应用于各种流媒体服务器和客户端软件中,具有良好的兼容性和可扩展性。 扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;支持特定机型硬编码;支持实时音量调节;支持扩展录像模块;支持Unity接口;支持H.264扩展SEI发送模块;支持Windows7 ]支持RTMP扩展H.265和Enhanced RTMP H.265,H.264; [音频格式]支持AAC/PCMA/PCMU/Speex; [H.264/H.265软解码]支持H.264/H.265软解
高性能 RTMP 播放核心 协议兼容性强: 支持标准 RTMP; 支持扩展格式:RTMP + H.265、Enhanced RTMP-H.265; 行业稀缺的 H.265 RTMP 播放支持,适用于高效视频传输 解码数据回调与AI/录像扩展 解码前数据回调: 支持 H.264/H.265 原始码流回调; 支持 AAC/PCMA/PCMU/SPEEX 音频数据回调; 解码后数据回调: 支持解码后 YUV / Enhanced RTMP-H.265 / RTMP-H.264视频解码H.264 / H.265(软解 & 硬解,支持 Surface 模式配置)音频解码AAC / PCMA / PCMU / 播放器的硬实力大牛直播SDK 提供的 Android RTMP 播放器,专为“低延迟、高兼容、强扩展”场景打造。 接口组合Pico、Quest、电视端、VR一体机视频分析前端节点采集-解码-YUV回调链路AI盒子、视觉边缘计算终端 应用扩展与组合能力扩展方向配套模块组合本地录像支持RTMP播放器 + 录像SDK(支持音视频
EasyCVR平台一直是TSINGSEE青犀视频产品中支持协议最为丰富的平台,由于原本就支持国标GB28181、RTSP协议,又在我们不断拓宽之下开发了私有协议的接入和RTMP推流功能,可以直接接收客户端推送 rtmp流,可直播、可录像。 接口定义如下: 在调用此接口时protocol传值为RTMP,得到如下返回: 接着用VLC播放就出现异常情况,发现无法播放,如下图: 但是在EasyCVR平台却发现可以播放: 这时我们就可以发现上图中 EasyCVR系统选择的是EasyWasmPlayer播放器,这个播放器是TSINGSEE青犀视频开发的H.265播放器,专门用来播放H.265编码格式的视频流。 问题就在这里,因为vlc不支持RTMP扩展H.265拉流,上图中EasyCVR默认播放的是FLV协议的流。
在上一篇 SkeyeRTMPClient拉取RTMP流扩展支持HEVC(H.265)解决方案 中关于HEVCDecoderConfigurationRecord结构解析的讲解存在一些表述上不清楚的地方, 在SkeyeRTMPPusher扩展支持H265的解决方案讲述时。 我们对Metadata结构进行过详解,大家可以回顾一下这篇文章RTMP推送扩展支持HEVC(H265)之Metadata结构填写详解,重点来了,因为正常情况下,我们只需要从MetaData中取出对我们解码有用的数据头 扩展支持HEVC(H.265) [4/18/2019 SwordTwelve] typedef struct _Parser_HEVCDecoderConfigurationRecord { uint8 扩展支持HEVC(H.265) [4/18/2019 SwordTwlve] typedef struct _Parser_HVCCNALUnitArray { uint8_t NAL_unit_type