概述与优势1.1 SDK功能特性1.1.1 支持协议与格式 支持RTMP、RTSP协议,兼容H.265、H.264视频格式及AAC、PCMA等音频格式,满足多样化播放需求。 2. Unity播放器架构设计2.1 核心模块划分2.1.1 PlayerInstance模块 管理单个播放实例的生命周期,负责视频播放、录制及视频帧回调。 开启RTSP TCP/UDP自动切换功能,使播放器能根据网络状况自动选择最优传输模式。 /RGB数据通过回调接口传递给Unity,避免在Unity层处理复杂的协议栈和解码逻辑。 的Texture2D,避免每帧重建(通过is_need_init_texture_标志控制) 结语通过大牛直播SDK的深度集成与参数调优,开发者能够在Unity中构建毫秒级延迟的RTSP/RTMP播放器
、网络自动重连等,RTMP支持扩展H265播放, RTSP也支持H265播放。 Linux原生的RTSP、RTMP播放模块这里我们不做赘述,本文主要讲的是如何在Linux平台构建Unity下的RTSP和RTMP低延迟直播播放。 技术实现国产操作系统和Linux平台下,Unity环境的播放器,和Windows、Android、iOS平台基础流程并无大的差异,简单来说,通过调用原生的播放模块,回调解码后的YUV或RGB数据,投递到 Unity侧,在Unity下完成绘制,这里就需要原生的RTMP、RTSP播放模块,拉流解码延迟非常低,数据投递效率非常高,无图无真相:Linux平台,我们是回调的YUV的数据,也就是 NT_SP_E_VIDEO_FRAME_FROMAT_I420 RTMP、RTSP直播播放器大概的实现参考,随着国产操作系统的推进,Linux下RTMP、RTSP高质量的播放器需求越来越大,Unity下,可以实现和Windows、Android等平台统一开发管理,
整体架构设计废话不多说,先上实际测试时延,左侧用大牛直播SDK的Windows平台RTMP直播推送模块,采集毫秒计数器窗体,推RTMP到nginx服务器,右侧unity的播放器,播放RTMP流,同时四路播放 在播放过程中,会通过回调函数OnVideoFrame获取视频帧数据,并将其渲染到Unity的Texture2D对象上,实现视频的显示。同时,还支持硬件解码功能,提高了播放性能。 2. YUV420纹理处理视频流通常采用YUV420格式,需转换为Unity支持的RGB材质。 总结与展望本文实现了一个高性能Unity多实例播放器,关键技术包括硬件解码、YUV处理和异步事件管理,毫秒级延迟,可以满足大多数低延迟场景诉求。 随着人工智能技术的发展,在集成大牛直播SDK的Unity的RTSP|RTMP播放模块的时候,后续可以在播放器中引入智能播放和推荐功能。
因此,在 Unity 中集成 RTSP/RTMP 的播放器,已经成为多数可视化方案的基础能力要求。 一、 Unity下播放 RTSP / RTMP 的典型技术挑战尽管 Unity 拥有强大的跨平台图形能力,但它并不原生支持任何流媒体解码与播放功能。 开发者通常需要自行调用底层系统 API 或集成第三方播放器实现 RTSP / RTMP 流播放。 2️⃣ Unity 跨平台深度集成能力Unity 本身不具备流媒体处理能力,因此是否能无缝集成一个专业播放内核,决定了系统的“上限”。 以下是基于 RTSP/RTMP 协议和 Unity 渲染框架的典型落地场景,以及各自的技术价值分析。
好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTMP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTMP的播放都面向直播场景,如果延迟过大,严重影响体验,所以,低延迟是衡量一个好的RTMP播放器非常重要的指标,目前大牛直播SDK的RTMP直播播放延迟比开源播放器更优异(大牛直播SDK ,又不影响延迟,对此,我们设计了快速启动接口,快速render第一帧的同时,追到最新的播放数据: 2. 支持多实例:大牛直播SDK提供的RTMP直播播放SDK支持在设备性能允许的情况下,支持多实例播放RTMP流数据,大多开源播放器对多实例支持不太友好; 除了常规的多实例外,比如大屏监控场景下,尽管我们CPU 长期运行稳定性:大牛直播SDK提供的RTMP直播播放SDK适用于长时间运行,开源播放器对长时间运行稳定性支持较差; 11.
我们知道多数监控摄像头都是支持RTMP协议的,当然公安部的摄像头是支持GB28181协议的,这个我们在本文不做过多赘述,我们来探讨一下网页播放RTMP视频流的播放器。 ? ? 网页可以播放RTMP视频流吗?当然是可以的,但是对于PC端来说,网页播放RTMP流媒体视频流将会承受更多的服务器压力,满足网页播放RTMP视频流有哪些要求,下文我们一起来看一下。 1.便捷。 基于Web页面观看监控画面,访问同一个地址; 2.跨平台。跨平台支持PC端、安卓端、iOS端等主流终端; 3.易用。无须安装任何自有插件、监控APP等,减少资源消耗; 4.无限制。 本文已经为大家介绍完毕啦,结论就是网页是能够播放RTMP视频流的,如果想体验网页播放RTMP视频流的流媒体服务器或者播放器,可以继续关注本栏目。
我们在实现Windows平台RTSP播放器或RTMP播放器的时候,需要考虑的点很多,比如多实例设计、多绘制模式兼容、软硬解码支持、快照、RTSP下TCP-UDP自动切换等,以下就其中几个方面,做个大概的探讨 实时快照 实时快照功能不表,是一个好的RTSP播放器和RTMP播放器必备的功能,实时快照是把解码后的yuv数据重新编码成png,所以有一定的CPU消耗,不建议过于频繁操作,具体实现如下: Length + 1]; buffer3[buffer2.Length] = 0; Array.Copy(buffer2, buffer3, buffer2 set_capture_image_call_back_(result, image_name); } } 后续,我们将针对RTSP和RTMP 播放器设计过程中的其他点,做更进一步的探讨,谢谢大家的关注。
在Unity中使用RTMP播放器播放8K流,需要考虑到多个方面的因素和技术要求。以下是一个详细的步骤和要点概述,帮助实现这一目标:1. 选择合适的RTMP播放器插件首先,需要选择一个支持8K视频流播放的RTMP播放器插件。并非所有插件都支持8K分辨率,据我们了解,好多Unity的RTMP播放器,连4K都非常吃力。 大牛直播SDK的SmartPlayer的Unity插件目前来看,RTMP或RTMP直播流,无论是资源占用、延迟还是性能,是相对优异的。2. 软件兼容性:Unity版本和RTMP播放器插件需要兼容,同时操作系统也需要支持相应的视频解码技术,8K的视频流,肯定是需要硬解码,软解几乎不太现实。3. 配置RTMP播放器设置播放源:将RTMP播放器的播放源设置为8K视频流的RTMP URL。解码设置:启用硬件解码(如果插件支持)以减轻CPU的负担并提高播放效率。
然而,传统 Unity 接入视频的方式——通过 CPU 内存拷贝 + Texture2D 更新——在高分辨率或高帧率场景下,依然面临性能开销与延迟上的瓶颈。 ,防止外泄与反编译 JNI 事件回调,保障数据同步 架构示意:[ RTSP/RTMP 流 ] ↓[ 大牛直播 SDK 播放器 (Native) ] ↓[ OpenGL OES SurfaceTexture.setOnFrameAvailableListener() 在有新帧时被触发 确保 Unity 调用 updateTexImage() 以同步最新画面 2️⃣ Unity 将此纹理 ID 绑定为可用 Texture2D 对象 绑定到 Unity 材质 赋值到 Unity 的 Shader 或 RawImage 组件进行显示 每帧更新同步 因为 OES 纹理是动态更新的 采用 超高清 RTSP/RTMP 视频流,结合 Unity 的三维场景可视化, 能够实现多视角、多终端的视频实时监控与调度。
技术背景RTMP播放器的延迟可以受到多种因素的影响,包括网络状况、推流设置、播放器配置以及CDN分发等。因此,RTMP播放器的延迟并不是一个固定的数值,而是可以在一定范围内变化的。 正常情况下,网上大多看到的,针对RTMP播放器的延迟在2秒到3秒左右。这是基于RTMP协议本身的特性和一般的推流、播放设置所得出的结论。 然而,当网络状况不佳、推流设置不当或播放器配置不合理时,延迟可能会增加。具体来说,RTMP播放器的延迟可能受到以下因素的影响:网络状况:网络延迟和丢包是影响RTMP播放器延迟的重要因素。 此外,由于视频数据的处理和传输需要一定的时间,因此即使在最理想的情况下,RTMP播放器的延迟也会存在一定的最小值。综上所述,RTMP播放器的延迟可以控制在一定范围内,但具体数值会受到多种因素的影响。 所以,我们可以有底气的说,在没测试过大牛直播SDK的SmartPlayer RTMP播放器之前,你甚至不相信行业内,RTMP播放器延迟可以稳定的做到毫秒级。
在本文之前,我们发布了Unity环境下的RTMP推流(Windows平台+Android平台)和RTMP|RTSP拉流(Windows平台+Android平台+iOS平台)低延迟的解决方案,今天做个整体汇总 Unity环境下RTMP推流 Unity环境下,不管是camera还是窗体数据也好,主要是高效率的拿到原始数据,采集端可用的数据格式是RGB的,拿到之后,通过高效率的数据传递,发给封装后的原生SDK,完成数据编码和 win_publisher_unity2.png 需要注意的地方有几点: 1. 数据采集投递,确保高效率; 2. 屏幕分辨率发生变化,可实时适配; 3. 下RTMP推送 https://cloud.tencent.com/developer/article/1832046 2. Unity环境下RTMP|RTSP播放器 Unity环境下RTMP或RTSP直播播放我们前几年就有发布,并已应用在好多传统行业领域,比如教育或工业仿真或一些低延迟的控制场景。
技术背景Unity平台下,RTSP、RTMP播放和RTMP推送,甚至包括轻量级RTSP服务这块都不再赘述,今天探讨的一位开发者提到的问题,如果在Unity下,实现RTSP播放的同时,随时转RTMP推送出去 RTSP转RTMP,在原生环境下老早已经有了,这里,其实就是把原生的挪到Unity即可,相关流程如下:图片技术实现本文以Windows平台为例,在RTSP播放模块的基础上,加个RTSP转RTMP推送模块 push_handle_ == IntPtr.Zero) return; //新接口 NTSmartPublisherSDK.NT_PB_PostVideoEncodedDataV2( audio_info.parameter_info_, audio_info.parameter_info_size_); }}总结实际上,Unity 环境下的RTSP转RTMP推送,相对RTMP、RTSP播放或推流,对接更容易,因为基本不涉及到页面交互,感兴趣的开发者可以尝试看。
RTMP header的长度不固定,可能的长度为12字节,8字节,4字节,1字节。具体长度为多少个字节,由RTMP header数据包的第一个字节的高2位决定。 ? 如下方表格,Format决定了RTMP header的长度为多少个字节: Format取值(2bits) header的长度 说明 0(二进制00) 12字节 onMetaData流开始的绝对时间戳控制消息 第一个字节,高2位为01,所以RTMP Header的长度为8字节,接下来是时间戳的delta,简单讲就是时间戳的变化量,BodySize不多说,后面6个字节也比较赤裸裸。 可以看到,第一个字节为0xa2,所以高2位的值为10,所以,RTMP Header占用4个字节,后面跟着的时间戳的增量。 1字节的RTMP Header ? 抓个包,好奇的看一下。 ? 一个字节,就是第一个字节,后面啥也没有喽,高2位为11,所以,RTMP Header占用1个字节,只包含Format 和chunk stream ID。
技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。 实现思路目前,我们是通过大牛直播SDK原生的RTMP|RTSP播放器,设置回调解码后的YUV或RGB数据,然后投递到Unity层,在Unity层做渲染。 对于每一路RTMP或RTSP流,可以分别创建个播放实例,并启动播放。可以创建一个管理类,用于统一管理多个播放器实例,方便对多路流的播放状态进行监控和控制。 当从原生播放器中获取到视频流的数据后,需要将数据回调到 Unity 中进行渲染。 [sel].vTexture_.Apply();}}}总结直接在Unity中播放RTMP|RTSP流可能并不简单,因为Unity没有内置对RTMP|RTSP的直接支持。
忙里偷闲,今天我们就再聊一聊老生常谈的问题:如何实现功能完备性能优异的RTMP、RTSP播放器? 图片技术剖析这里我们说的播放器,系直播播放,确切的说,是如何在保障播放体验的情况下,实现低延迟的RTMP或RTSP播放模块。 无论是RTMP还是RTSP播放器,我们目前都是毫秒级的体验。更重要的长时间运行,不会发生内存泄漏或其他异常。2. 可扩展:比如,我们RTMP、RTSP播放器,针对Unity平台的配套解决方案,Unity环境下调用我们原生的RTMP、RTSP播放模块,通过回调YUV/RGB数据,在Unity绘制,实现Unity环境下低延迟播放的友好体验 总结不管是基于开源播放器二次开发,还是全自研内核,一个好的RTMP播放器或RTSP播放器,设计的时候,更多考虑的应该是如何做的更灵活、更稳定、延迟更低、资源占用更小,单纯的几个接口,很难满足通用化的产品诉求
很多开发者在开发RTSP或RTMP播放器的时候,不晓得哪些event回调事件是有意义的,针对此,我们以大牛直播SDK(github)的Android平台RTSP/RTMP直播播放端为例,简单介绍下常用的 常规网络状态显示:如开始播放、网络中断、重连、收不到媒体数据等; 2. 视频宽高信息回调:用于上层显示回调的分辨率信息; 3. 流实时下载回调:显示播放rtsp或rtmp流时,实时流量,注意,这块最好是可设置回调时间间隔,防止不必要的资源消耗; 8. RTSP错误状态:如401鉴权不通过。 会返回缓冲百分比)EVENT_DANIULIVE_ERC_PLAYER_STOP_BUFFERING停止缓冲数据EVENT_DANIULIVE_ERC_PLAYER_DOWNLOAD_SPEED返回当前 RTSP/RTMP
(Windows/Android/iOS)二次封装,也可能是Unity3D平台下首款真正功能强大的高稳定、超低延迟的RTMP/RTSP直播播放器。 Unity3D RTSP/RTMP播放SDK相关(支持Windows/Android/iOS) windows/android/iOS播放器SDK(V2)Unity3D调用说明(更新于2020/03/25 RTSP直播播放器SDK 支持RTSP H.265播放及扩展录像、业内为数不多真正好用的RTSP播放器SDK,支持IE浏览器OCX控件接口调用; Unity3D RTMP/RTSP直播播放器 ); RTSP直播播放器SDK 支持RTSP H.265播放及扩展录像、业内为数不多真正好用的RTSP播放器SDK; Unity3D RTMP/RTSP直播播放器SDK 业内首家Android SDK 支持RTSP H.265播放及扩展录像、业内为数不多真正好用的RTSP播放器SDK; Unity3D RTMP/RTSP直播播放器SDK 业内首家iOS支持Unity3D的超低延迟RTMP
从高效率的角度,磨刀不误砍柴工,在模块集成之前,还是希望开发者能了解播放器集成的一些前置条件,少走弯路,尽快完成RTSP、RTMP低延迟播放能力构建。 本文不关注接口集成调用细节,主要介绍下,播放器集成的一些前置条件和注意事项。 |RTMP直播播放器Demo工程源码SmartPlayerV2\app\src\main\jniLibssmartavengine.jar和libSmartPlayer.soSmartPlayerV2\ app\src\main\java\com\daniulive\smartplayer\SmartPlayerJniV2.java播放器头文件SmartPlayerV2\app\src\main\java 包名下(可在其他包名下调用);Smartavengine.jar加入到工程;拷贝SmartPlayerV2\app\src\main\jniLibs\armeabi-v7a、 SmartPlayerV2
像Unity3D下的RTMP或RTSP播放器一样,好多开发者苦于在Unity环境下,如何高效率低延迟的把数据采集并编码实时推送到流媒体服务器,实现Unity场景下的低延迟推拉流方案。 如果只需要拿到Unity的窗体或摄像机数据推出去,可在Unity下获取到需要推送的原始数据,然后封装原生的RTMP推流接口,调用原生SDK实现数据推送,这种做法的好处是,可以自定义需要采集的数据内容,只要按照原生 Android平台Unity3D的RTSP或RTMP播放器,可以参考 https://cloud.tencent.com/developer/article/1800633 本文以Android平台为例 ,介绍下Unity环境下的Android平台RTMP推流,数据采集在Unity完成,数据编码推送,调用大牛直播SDK(官方)Android平台RTMP直播推送SDK原生库对外二次封装的接口,高效率的实现 下图系Android平台Unity环境下采集屏幕,编码推送到RTMP服务器,然后Windows平台播放器拉取RTMP流播放,为了方便看到延迟效果,特地在Android端的Unity窗口显示了当前时间,可以看到
经过多轮技术迭代与场景打磨,该 SDK 已覆盖 Windows / Linux / Android / iOS / Unity 等主流平台,并在 RTSP / RTMP / HTTP-FLV 等协议支持 2. RTMP 播放器 SDK 优化首帧时间与延迟,适用于直播互动与远程监控场景,支持软解/硬解切换。 / RTMPRTSP / RTMP––支持实时录制支持公网/内网穿透低延迟 P2P 交互SEI 数据扩展 SDK全平台任意支持视频流RTSP/RTMP–SEI 发送 / 接收可随流录制保存–支持图像标注 案例2:Android 移动终端采集 + 推送 + 录像 场景描述:用于远程运维、巡检、教学、新闻移动直播等场景,需边拍边推 + 实时录像 推荐组合: RTMP 推送模块(支持摄像头采集、屏幕录制)