win_publisher_unity2.png 需要注意的地方有几点: 1. 数据采集投递,确保高效率; 2. 屏幕分辨率发生变化,可实时适配; 3. Unity环境下RTMP|RTSP播放器 Unity环境下RTMP或RTSP直播播放我们前几年就有发布,并已应用在好多传统行业领域,比如教育或工业仿真或一些低延迟的控制场景。 Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式; 2. 多实例支持:播放端和推送不一样,比如智慧城市,播放端有多路场景,所以多实例支持是必备功能,多实例环境下,需要能有好的区分event状态回调等; 2. 相关博客: Windows平台Unity3d下如何同时播放多路RTSP或RTMP流 https://cloud.tencent.com/developer/article/1800633 如何在Unity3d
好多开发者问我们,Unity环境下,除了RTSP或RTMP的播放,如果有录像诉求,怎么实现?实际上录像相对播放来说,更简单一些,因为不涉及到绘制,只要拉流下来数据,直接写mp4文件就好了。 本文以大牛直播SDK的Windows平台为例,大概介绍下如何实现Unity环境下的录制,Linux、Android、iOS平台实现也类似,都是原生接口,然后对接下就好:图片开始录像因为涉及到可能同时录制多路的场景 ,直接调用播放接口就好了。 //status 2:表示已经写好一个录像文件 { Debug.Log("RecordCallBack, 已生成一个录像文件, sel: " + sel + " status: " + 平台RTMP或RTSP播放端录像相关接口设计和调用实例,感兴趣的开发者可以参考。
概述与优势1.1 SDK功能特性1.1.1 支持协议与格式 支持RTMP、RTSP协议,兼容H.265、H.264视频格式及AAC、PCMA等音频格式,满足多样化播放需求。 2. Unity播放器架构设计2.1 核心模块划分2.1.1 PlayerInstance模块 管理单个播放实例的生命周期,负责视频播放、录制及视频帧回调。 核心技术架构设计4.1 原生模块与Unity的高效交互大牛直播SDK的核心优势在于其原生模块(Windows/Linux/Android/iOS)直接处理流媒体协议解析、解码和网络优化,仅将解码后的YUV /RGB数据通过回调接口传递给Unity,避免在Unity层处理复杂的协议栈和解码逻辑。 的Texture2D,避免每帧重建(通过is_need_init_texture_标志控制) 结语通过大牛直播SDK的深度集成与参数调优,开发者能够在Unity中构建毫秒级延迟的RTSP/RTMP播放器
技术背景在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前,我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程:通过Native RTSP或RTSP直播播放SDK回调RGB Unity3D环境下,我们之前已覆盖以下模块:Windows平台RTMP直播推送模块(采集Unity窗体、摄像头或屏幕); Windows平台RTMP|RTSP直播播放模块; Linux平台RTMP 直播推送模块(采集Unity窗体、Unity声音); Linux平台RTMP|RTSP直播播放模块; Android平台RTMP直播推送模块(采集Unity窗体、麦克风或Unity声音); Android 平台RTMP|RTSP直播播放模块; iOS平台RTMP|RTSP直播播放模块。 , 范围是[0, 100], 0是静音,100是最大音量, 默认是100 // 设置上传下载报速度 int is_report = 0; int report_interval = 2; NTSmartPlayerSDK.NT_SP_SetReportDownloadSpeed
我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。 虽然我们软解码,已经做的资源占有非常低了,但考虑到多路播放的情况,我们也设计了硬解码的接口,下面大概讲下,如何在Unity下开启硬解码: 图片 检测系统是否支持硬解码 /* * 检查是否支持 extern UInt32 NT_SP_SetH265HardwareDecoder(IntPtr handle, Int32 is_hardware_decoder, Int32 reserve); Unity 1 : 0, 0); 如果系统支持硬解码,开启后,可以明显看到CPU占用,会有一定的改善,在多路播放的场景下,还是非常必要,感兴趣的开发者,可以参考设计。
背景 尽管Windows平台有诸多优势,Linux平台的发展还是势不可挡,特别实在传统行业,然而Linux生态构建,总是差点意思,特别是有些常用的组件,本文基于已有的Linux平台RTSP、RTMP播放模块 ,构建Unity下的RTSP和RTMP直播播放。 技术实现 实际上,Unity层面这块没什么好介绍的,和Windows、Android、iOS平台一样,调用原生的播放模块,回调解码后的数据,在Unity绘制,主要的技术难点,还在原生的处理,也就是拉流、 先上个直观感受图,本视频以Windows平台采集秒表计时器窗体,然后编码打包传输到RTMP服务,Unity3D的Linux平台RTMP播放器拉流播放,整体延迟毫秒级。 unity推送linux2.jpg Linux平台,我们是回调的YUV的数据,也就是 NT_SP_E_VIDEO_FRAME_FROMAT_I420: /*定义视频帧图像格式*/ public enum
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品 ),本文以调用大牛直播SDK(Github)的Windows平台RTSP、RTMP播放器SDK为例,具体代码如下: public void Play(int sel) { "); } videoctrl[sel].is_running = true; } 2. Debug.LogError("sel: " + sel + " w:" + u3d_frame.width_ + "h:" + u3d_frame.height_); } } 3.Unity3D 具体播放效果如下 windows4player.png 总结 Unity3d下,做多路播放的话,首先确保调用的拉流解码数据的模块具备回调yuv/rgb数据能力,回上来后,再上层直接刷新显示即可,是不是没有你想的那么复杂
、网络自动重连等,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流,同时四路播放 功能列表: [支持播放协议]RTMP、RTSP; [多实例播放]支持多实例播放; [事件回调]支持网络状态、buffer状态等回调; [视频格式]支持RTMP扩展H.265,H.264; [音频格式]支持 在播放过程中,会通过回调函数OnVideoFrame获取视频帧数据,并将其渲染到Unity的Texture2D对象上,实现视频的显示。同时,还支持硬件解码功能,提高了播放性能。 2. YUV420纹理处理视频流通常采用YUV420格式,需转换为Unity支持的RGB材质。 随着人工智能技术的发展,在集成大牛直播SDK的Unity的RTSP|RTMP播放模块的时候,后续可以在播放器中引入智能播放和推荐功能。
技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。 实际上,我们在前几年发布Unity下直播播放模块的时候,就已经支持了Android多实例播放RTMP|RTSP,随着大家对这块的技术诉求和性能要求越来越高,我们需要持续考虑如何低资源占用的播放多实例流。 实现思路目前,我们是通过大牛直播SDK原生的RTMP|RTSP播放器,设置回调解码后的YUV或RGB数据,然后投递到Unity层,在Unity层做渲染。 [sel].vTexture_.Apply();}}}总结直接在Unity中播放RTMP|RTSP流可能并不简单,因为Unity没有内置对RTMP|RTSP的直接支持。 以上是Unity下多路播放RTMP|RTSP的技术探讨,感兴趣的开发者,可以单独跟我沟通讨论。
我们知道多数监控摄像头都是支持RTMP协议的,当然公安部的摄像头是支持GB28181协议的,这个我们在本文不做过多赘述,我们来探讨一下网页播放RTMP视频流的播放器。 ? ? 网页可以播放RTMP视频流吗?当然是可以的,但是对于PC端来说,网页播放RTMP流媒体视频流将会承受更多的服务器压力,满足网页播放RTMP视频流有哪些要求,下文我们一起来看一下。 1.便捷。 基于Web页面观看监控画面,访问同一个地址; 2.跨平台。跨平台支持PC端、安卓端、iOS端等主流终端; 3.易用。无须安装任何自有插件、监控APP等,减少资源消耗; 4.无限制。 我们研发的流媒体服务器自身支持对成功接入的摄像机实时视频进行7*24h录像,支持录像的检索与回放,并且支持网络硬盘录像机NVR按设备、通道、日期获取对应录像文件进行录像的检索与回放,无需安装各个安防厂商的视频播放插件 本文已经为大家介绍完毕啦,结论就是网页是能够播放RTMP视频流的,如果想体验网页播放RTMP视频流的流媒体服务器或者播放器,可以继续关注本栏目。
方法一 直接转flv吧 方法二 使用flash 示例代码 如果直接前端放rtmp直播流, 则需要有flash, 而Chrome已经不再支持flash了, 所以得借助flash插件 1659969197107 搭环境 使用 vue-cli5 + vue-cli-plugin-electron-builder搭建, 具体看插件文档 播放器使用vue-video-player组件和videojs-flash插件 { "video.js": "^7.10.0" }, 参考资料: https://github.com/surmon-china/vue-video-player/issues/221 2. /mp4', src: 'rtmp://127.0.0.1/live/test', }], techOrder: ['flash', 'html5'] , poster: '', notSupportedMessage: '服务错误', //允许覆盖Video.js无法播放媒体源时显示的默认信息。
随着VR类、游戏类场景的快速发展,开发者对Unity3d低延迟的直播需求量越来越大,前两年,大牛直播SDK发布了Windows平台、Android平台和iOS平台的Unity3d RTMP和RTSP的播放 本文以Android平台为例,我们的实现:基于大牛直播SDK现有非常成熟的native RTMP和RTSP播放模块,回调解码后的原始数据,传递给Unity3d,实现相应的绘制即可,对应demo,可以参考 Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式; 2. Unity3D创建相应的RGB/YUV420等Shader; 3.Unity3D从各个平台获取图像数据来填充纹理即可。 url.StartsWith("rtmp://") && !
今天,我们主要介绍的是VR头显下,如何低延迟的实现RTMP或RTSP的播放。技术实现说了这么多,如何在VR头显端,尽可能的降低直播播放延迟呢? 常用的方法,比如可以用专门的播放器中间件,实现数据的拉流解码会数据回调,在unity下,优化数据处理和渲染。 以大牛直播SDK为例,我们在做Unity下RTMP或RTSP直播播放的时候,大多场景对延迟和资源占有要求非常高,鉴于好多时候,特别是头显终端,性能可能不尽人意,需要播放的视频分辨率码率又高,如何高效率的实现低延迟的 RTMP或RTSP播放,是Unity下比较棘手的问题,特别是毫秒级延迟。 环境下的RTMP、RTSP直播播放,如果需要延迟和稳定性都靠谱,建议数据接收、解包解码回调yuv/rgb数据在原始native模块处理,然后把解码后的数据,高效率的投递到unity测,实现unity环境下的低延迟
前言 RTMP协议规定,播放一个流媒体需要执行以下几个步骤: 建立一个网络连接(NetConnection),网络连接代表RTMP服务器端和客户端之间建立真正的网络连接。 播放网络流 在RTMP服务器端对于每一个网络媒体流都建立了一个状态机,包括以下几个状态: 握手态; 连接态; 媒体流已建立态; 播放态; RTMP通过命令来变更状态机。并在每个状态下做相应的工作。 当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。 当客户端和服务器分别收到S2和C2后,握手完成。 ? 之后,服务器发送客户端要播放的音频和视频数据。 ? 小结 以上就是 RTMP协议的播放过程。建立一个网络流的播放就是以下这几步。 握手; 连接; 建立网络流; 播放; 目前,已经有很多开源库实现了 RTMP 协议。其中比较著名的是 librtmp 库,它是 rtmpdump 工具的一部分。
因此,在 Unity 中集成 RTSP/RTMP 的播放器,已经成为多数可视化方案的基础能力要求。 那么问题来了: ✅ 在 Unity 中实现 高性能、低延迟、跨平台 的 RTSP/RTMP 播放功能,开源方案真的够用吗? 一、 Unity下播放 RTSP / RTMP 的典型技术挑战尽管 Unity 拥有强大的跨平台图形能力,但它并不原生支持任何流媒体解码与播放功能。 2️⃣ Unity 跨平台深度集成能力Unity 本身不具备流媒体处理能力,因此是否能无缝集成一个专业播放内核,决定了系统的“上限”。 的播放端延迟,适用于控制与分析同步要求高的业务可视化友好与 Unity 紧密集成,兼容 OES 纹理与 Texture2D 渲染模式,适配多终端AI对接能力强支持完整帧数据回调与裸码流导出,适合对接
技术背景好多开发者,希望我们能探讨下Unity平台RTMP或RTSP直播流数据播放和录制相关的模块,实际上,这块流程我们已经聊过多次,无非就是通过原生的RTMP或者RTSP模块,先从协议层拉取到数据 ;Windows平台RTMP|RTSP直播播放模块;Linux平台RTMP直播推送模块(采集Unity窗体、Unity声音),也可扩展轻量级RTSP服务模块;Linux平台RTMP|RTSP直播播放模块 ;Android平台RTMP直播推送模块(采集Unity窗体、麦克风或Unity声音);Android平台轻量级RTSP服务模块(采集Unity窗体、麦克风或Unity声音);Android平台RTMP 图片技术实现本文以Android平台RTMP、RTSP播放模块为例,介绍下Unity相关接口设置和逻辑处理:开始播放 public void Play() { if (is_running 下实现RTMP或RTSP无论是播放还是录像,甚至快照,说难不难,但是做好真的比较难,特别是移动端,Unity和原生层交互的时候,数据交互效率相对较低,需要尽可能减少拷贝。
在Unity中使用RTMP播放器播放8K流,需要考虑到多个方面的因素和技术要求。以下是一个详细的步骤和要点概述,帮助实现这一目标:1. 选择合适的RTMP播放器插件首先,需要选择一个支持8K视频流播放的RTMP播放器插件。并非所有插件都支持8K分辨率,据我们了解,好多Unity的RTMP播放器,连4K都非常吃力。 大牛直播SDK的SmartPlayer的Unity插件目前来看,RTMP或RTMP直播流,无论是资源占用、延迟还是性能,是相对优异的。2. 软件兼容性:Unity版本和RTMP播放器插件需要兼容,同时操作系统也需要支持相应的视频解码技术,8K的视频流,肯定是需要硬解码,软解几乎不太现实。3. 可选的RTMP播放插件本文以大牛直播SDK的Android平台Unity3D RTSP|RTMP播放模块为例:开始播放:/* * SmartPlayerAndroidMono.cs * Author:
技术实现本文以大牛直播SDK的Windows平台RTMP直播推送和RTMP直播播放模块为例,考虑到老的扩展CodecID 12的场景依然使用,我们添加了个设置接口:RTMP推送端,对应文件为SmartPublisherSDK <4);else*p |= (2 << 4); if (pts ! is_ex_header = true;else is_ex_header = false; if (is_ex_header) {auto video_fourcc = (p[1] << 24)|(p[2] 推流URL,实现Enhanced RTMP推送,播放端拉流播放,整体延迟如下:可以看到,尽管开启了Enhanced RTMP,整体延迟还在毫秒级。 技术总结鉴于目前RTMP扩展265这块,大多还是用的老的CodecID设置为12的模式,如果需要支持新的Enhanced RTMP,除了推送端和播放端外,RTMP服务端也需要做响应的调整,来适配这种情况
技术背景Unity平台下,RTSP、RTMP播放和RTMP推送,甚至包括轻量级RTSP服务这块都不再赘述,今天探讨的一位开发者提到的问题,如果在Unity下,实现RTSP播放的同时,随时转RTMP推送出去 RTSP转RTMP,在原生环境下老早已经有了,这里,其实就是把原生的挪到Unity即可,相关流程如下:图片技术实现本文以Windows平台为例,在RTSP播放模块的基础上,加个RTSP转RTMP推送模块 此外,关闭播放或拉流的时候,需要判断是不是处于拉流或播放状态,只要二者有一个还没关闭,实例就无法关闭。 push_handle_ == IntPtr.Zero) return; //新接口 NTSmartPublisherSDK.NT_PB_PostVideoEncodedDataV2( 环境下的RTSP转RTMP推送,相对RTMP、RTSP播放或推流,对接更容易,因为基本不涉及到页面交互,感兴趣的开发者可以尝试看。