好多开发者的使用场景,需要在Windows特别是Android平台实现Unity3D的全景实时视频渲染,本文以Windows平台为例,简单介绍下具体实现: 如果是RTSP或RTMP流数据,实际上难点,主要在于拉取 RTSP或RTMP流,解析解码,然后把解码后的YUV数据,回调到Unity层,Unity创建个Sphere,创建个材质球(Material),并把材质球挂在到Sphere即可。 ,编码推送到RTMP服务器,播放端拉流回调数据并在Unity渲染为例(左侧是Unity播放端,滑动鼠标,可以实现全景内容切换): unity全景.jpg 废话不多说,大概流程如下: 本文以调用我们写的RTSP _ + 1) / 2); u3d_frame.y_stride_ = d_y_stride; u3d_frame.u_stride_ = d_u_stride; u3d_frame.v_stride 0.0f, 0.0f, 0.0f); } } 以上是Unity3D下实现RTMP或RTSP全景视频播放的大概流程,感兴趣的开发者可自行尝试。
背景 尽管Windows平台有诸多优势,Linux平台的发展还是势不可挡,特别实在传统行业,然而Linux生态构建,总是差点意思,特别是有些常用的组件,本文基于已有的Linux平台RTSP、RTMP播放模块 ,构建Unity下的RTSP和RTMP直播播放。 先上个直观感受图,本视频以Windows平台采集秒表计时器窗体,然后编码打包传输到RTMP服务,Unity3D的Linux平台RTMP播放器拉流播放,整体延迟毫秒级。 _ + 1) / 2); u3d_frame.y_stride_ = d_y_stride; u3d_frame.u_stride_ = d_u_stride; u3d_frame.v_stride Unity下,简单来说就是拉流解码回调,上层绘制,其实也没有那么复杂,需要注意的是DllImport的写法、之前C++结构体或枚举的转换、Unity3D对Linux的版本兼容等一些细节,对熟悉C#的开发者来说
RTSP协议探究RTSP播放器可广泛应用于对延迟要求比较高的场景下,比如协同操控相关的智能机器人或无人机、实时视频监控、远程视频会议、网络电视等。通过控制信令实现对流媒体数据的远程控制和传输管理。 如何实现RTSP播放器 本文以大牛直播SDK的Windows平台RTSP直播播放器为例,大概介绍下,如何集成RTSP直播播放能力。 相关cs头文件,加入需要集成的工程;3. IntPtr.Zero, video_frame_ts_callback_);NT_SP_SetAudioPCMFrameCallBack:设置音频PCM帧回调, 吐PCM数据出来,目前每帧大小是10ms,一般播放器无使用需求的话 就让播放器吐出数据来,用GDI绘制 //video frame callback (YUV/RGB) //format请参见 NT_SP_E_VIDEO_FRAME_FORMAT,如需回调YUV
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品 ,我们认为当前最好的方式就是集成现有Native平台上成熟稳定播放器,回调rgb/yuv数据到上层,上层做绘制即可。 废话不多说,以Windows平台多路播放为例: 1.Native播放器吐RGB/YUV420/NV12等其中的一种未压缩的图像格式 比如Windows平台,我们回调YUV上来(NT_SP_E_VIDEO_FRAME_FROMAT_I420 ),本文以调用大牛直播SDK(Github)的Windows平台RTSP、RTMP播放器SDK为例,具体代码如下: public void Play(int sel) { 具体播放效果如下 windows4player.png 总结 Unity3d下,做多路播放的话,首先确保调用的拉流解码数据的模块具备回调yuv/rgb数据能力,回上来后,再上层直接刷新显示即可,是不是没有你想的那么复杂
通过全自研技术框架,大牛直播SDK的RTSP播放器以功能齐全、性能优异、超低延迟、低代码低集成复杂度,在行业内享有较高的评价,服务了数百家B端用户。 技术特点超低延迟与稳定性超低延迟:大牛直播SDK的RTSP播放器在延迟控制方面表现出色,能够将播放延迟稳定地控制在较低水平,这对于直播场景尤为重要,能够显著提升用户体验。 跨平台支持多平台兼容:大牛直播SDK的RTSP播放器支持Windows、Linux(x86_64|aarch64)\Android、iOS多个平台,满足了不同场景下的使用需求。 客户评价与市场认可客户反馈:数百家业内公司一致认可,大牛直播SDK的RTSP播放器在性能、稳定性和功能方面均表现出色。 RTSP播放器在超低延迟、稳定性、跨平台支持、功能丰富性、易用性与集成性等方面均表现出色,是一款值得推荐的流媒体播放解决方案。
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器. 集成Navtive播放器可行性分析: 安卓: Unity3d可以调用安卓java接口,这方面的例子很多,搜索能找到一大堆。 IOS: Unity3d 可以调用C接口, c又可以调用object-c,那么C#--call-->C---call---object-c. 这类例子也非常多。 Windows: Unity3d调用C#就不用说了,天生支持,C#调用c dll, 可以使用P/INVOKE技术,或者把C接口封装成com组件也可以。 综上Unity3d和3个平台交互是没问题的. 这三个平台已经有成熟稳定低延时的rtmp/rtsp播放器SDK了,只要这些现有的播放SDK能吐图像数据, 然后让Unity3d绘制即可。
技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。 实现思路目前,我们是通过大牛直播SDK原生的RTMP|RTSP播放器,设置回调解码后的YUV或RGB数据,然后投递到Unity层,在Unity层做渲染。 对于每一路RTMP或RTSP流,可以分别创建个播放实例,并启动播放。可以创建一个管理类,用于统一管理多个播放器实例,方便对多路流的播放状态进行监控和控制。 当从原生播放器中获取到视频流的数据后,需要将数据回调到 Unity 中进行渲染。 ;NT_U3D_SetRTSPTimeout(videoctrl[sel].player_handle_, rtsp_timeout); //设置RTSP超时时间
(Windows/Android/iOS)二次封装,也可能是Unity3D平台下首款真正功能强大的高稳定、超低延迟的RTMP/RTSP直播播放器。 Unity3D RTSP/RTMP播放SDK相关(支持Windows/Android/iOS) windows/android/iOS播放器SDK(V2)Unity3D调用说明(更新于2020/03/25 OCX控件接口调用; Unity3D RTMP/RTSP直播播放器SDK 业内首家Windows支持Unity3D的超低延迟RTMP/RTSP直播播放器SDK,支持快照、录像、实时静音、view RTMP超低延迟直播播放器SDK(支持RTMP H.265扩展播放); RTSP直播播放器SDK 支持RTSP H.265播放及扩展录像、业内为数不多真正好用的RTSP播放器SDK; Unity3D RTMP超低延迟直播播放器SDK(支持RTMP H.265扩展播放); RTSP直播播放器SDK 支持RTSP H.265播放及扩展录像、业内为数不多真正好用的RTSP播放器SDK; Unity3D
相关博客: Windows平台实现Unity下窗体|摄像头|屏幕采集推送 https://cloud.tencent.com/developer/article/1833835 Android平台实现Unity3D Unity环境下RTMP|RTSP播放器 Unity环境下RTMP或RTSP直播播放我们前几年就有发布,并已应用在好多传统行业领域,比如教育或工业仿真或一些低延迟的控制场景。 Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式; 2. Unity3D创建相应的RGB/YUV420等Shader; 3.Unity3D从各个平台获取图像数据来填充纹理即可; 需要注意的有几点: 1. 相关博客: Windows平台Unity3d下如何同时播放多路RTSP或RTMP流 https://cloud.tencent.com/developer/article/1800633 如何在Unity3d
好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTSP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTSP的播放都面向直播场景,如果延迟过大,严重影响体验,所以,低延迟是衡量一个好的RTSP播放器非常重要的指标,目前大牛直播SDK的RTSP直播播放延迟比开源播放器更优异(大牛直播SDK ; 备注:如果是超低延迟模式下,可以0 buffer,不做音视频同步: 3. 支持多实例:大牛直播SDK提供的RTSP直播播放SDK支持在设备性能允许的情况下,支持多实例播放RTSP流数据,大多开源播放器对多实例支持不太友好; 4. D3D检测:一般来说市面上的大多Windows都支持D3D,有些小众化的,只支持GDI模式绘制,所以为了更好的兼容性,这个接口非常必要; 15.
随着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从各个平台获取图像数据来填充纹理即可。 ()
{
return DANIULIVE_RETURN_OK;
}
Event传递,我们在unity3d里面解析相应的字串即可:
///
自研播放器虽然可以通过 GStreamer、FFmpeg 等工具链实现延迟压缩,但往往开发成本高、跨平台适配难、稳定性难以保障。那么,如何评估一款 RTSP 播放器的延迟表现? 二、 市面主流 RTSP 播放方案横向评估当前开发者在构建 RTSP 播放功能时,常面临“选用通用播放器 vs 自研定制 vs 商业SDK”之间的技术权衡。 延迟控制 支持裸码流直接回调,绕过传统缓冲机制; Windows/Android/iOS 平台可启用硬件解码(MediaCodec/VideoToolbox); 渲染链路精简,可与 OpenGL / Unity3D 跨平台适配 完整支持 Windows / Linux / Android / iOS / macOS / Unity3D / Web 平台; 支持裸SDK调用和 UI 控件集成,兼容 C/C++、Java 这一机制在 Unity3D、AR/VR头显设备中极为关键,可将系统延迟压缩至 100-200ms。
技术背景我们在对接RTSP直播播放器相关技术诉求的时候,好多开发者,除了选用成熟的RTSP播放器外,还想知其然知其所以然,对RTSP播放器的整体开发有个基础的了解,方便方案之作和技术延伸。 技术实现技术难点在探讨RTSP直播播放器技术实现之前,我们先来看,为什么RTSP播放器的开发看似简单,实则复杂,或者说做播放器容易,做个好的播放器,为什么就那么难? RTSP播放器设计要点1. 低延迟:大多数RTSP的播放都面向直播场景,所以,如果延迟过大,严重影响体验,所以,低延迟是衡量一个好的RTSP播放器非常重要的指标,目前大牛直播SDK的RTSP直播播放延迟比开源播放器更优异,而且长时间运行下 ;3.
SkeyePlayer RTSP Windows端(下文简称:SkeyePlayer)播放器之前抓图代码主要通过OpenCV来实现,且数据格式转换的效率过于低下;故而在当时的代码中采用线程机制来解决抓图导致视频播放时卡顿的问题 got = 0; // init ffmpeg av_register_all(); fileext = file + strlen(file) - 3; 当然强大的格式转换函数也支持图像的缩放,且效率很高; 图像编码,细心的同学不难发现,ffmpeg的编码和存文件/推送流的代码是通用的,这套代码可以用来抓图也可以用来编码H264、265等然后存文件(如MP4等)或者推送RTMP/RTSP strScreenCapturePath, pThread->channelId, szTime) ; int nYuvBufLen = frameinfo.width*frameinfo.height*3; pShotThreadInfo, 0, NULL); pThread->manuScreenshot = 0; } 目前我们所支持的最大数据格式是RGB24,所以我们定义了WidthHeight3+
我们在实现Windows平台RTSP播放器或RTMP播放器的时候,需要考虑的点很多,比如多实例设计、多绘制模式兼容、软硬解码支持、快照、RTSP下TCP-UDP自动切换等,以下就其中几个方面,做个大概的探讨 视频绘制模式 我们在实现Windows平台播放的时候,一般首选D3D,D3D不支持的情况下,考虑数据回上来,采用GDI模式,一般实现如下,先做D3D检测,以大牛直播SDK播放端为例(Github),调用 实时快照 实时快照功能不表,是一个好的RTSP播放器和RTMP播放器必备的功能,实时快照是把解码后的yuv数据重新编码成png,所以有一定的CPU消耗,不建议过于频繁操作,具体实现如下: set_capture_image_call_back_(result, image_name); } } 后续,我们将针对RTSP 和RTMP播放器设计过程中的其他点,做更进一步的探讨,谢谢大家的关注。
一、为什么 RTSP 播放器如此重要?在一条实时视频链路里,RTSP 播放器往往决定了最终体验的上限。 RTSP → RTMP 转协议 GB28181 设备端 MP4/FLV 录像 AI 边缘计算模块 Unity3D 播放 形成 端 → 边 → 云 多节点视频链路的统一技术体系。 x86_64)✔ DirectX 渲染 + 专用解码链路Linux(x86_64 / ARM64)✔ 工控、边缘节点场景稳定运行国产 OS(UOS / 麒麟 / 龙芯 / 飞腾)✔ 已在国产化项目落地Unity3D 设备端 Unity3D 播放器 AI 适配模块 Edge Node / Video Node 模块 能从 设备侧 → 边缘 → 服务器 → 控制端 形成完整链路。 这正是它被视为 “工程级 RTSP 播放器” 的核心原因。
像Unity3D下的RTMP或RTSP播放器一样,好多开发者苦于在Unity环境下,如何高效率低延迟的把数据采集并编码实时推送到流媒体服务器,实现Unity场景下的低延迟推拉流方案。 Android平台Unity3D的RTSP或RTMP播放器,可以参考 https://cloud.tencent.com/developer/article/1800633 本文以Android平台为例 ,整体延迟在毫秒级: Unity3d采集.jpg 数据采集推送 unity数据采集相对简单,可以很轻松的拿到RGB24的数据: texture_ = new Texture2D(video_width_ : publisher_event = "RTSP服务URL: " + param3; break; case EVENTID.EVENT_DANIULIVE_ERC_PUSH_RTSP_SERVER_RESPONSE_STATUS_CODE : publisher_event = "服务器不支持RTSP推送, 推送的RTSP URL: " + param3; break;
很多开发者在开发RTSP或RTMP播放器的时候,不晓得哪些event回调事件是有意义的,针对此,我们以大牛直播SDK(github)的Android平台RTSP/RTMP直播播放端为例,简单介绍下常用的 视频宽高信息回调:用于上层显示回调的分辨率信息; 3. 快速切换url:如播放过程中,切换其他url时,分辨率发生变化,给到回调事件; 4. 录像状态:如开始录像、录像完成; 5. 流实时下载回调:显示播放rtsp或rtmp流时,实时流量,注意,这块最好是可设置回调时间间隔,防止不必要的资源消耗; 8. RTSP错误状态:如401鉴权不通过。 EVENT_DANIULIVE_ERC_PLAYER_SWITCH_URL快速切换 URLEVENT_DANIULIVE_ERC_PLAYER_RECORDER_START_NEW_FILE开始一个新的录像文件 (param3 返回包含录像 路径在内的录像文件 名)EVENT_DANIULIVE_ERC_PLAYER_ONE_RECORDER_FILE_FINISHED已生成一个录像文件 (param3 返回包含录像 路径在内的录像文件
技术背景好多开发者,希望我们能探讨下Unity平台RTMP或RTSP直播流数据播放和录制相关的模块,实际上,这块流程我们已经聊过多次,无非就是通过原生的RTMP或者RTSP模块,先从协议层拉取到数据 目前,Unity3D下,我们覆盖了以下常用的模块:Windows平台RTMP直播推送模块(采集Unity窗体、摄像头或屏幕);Windows平台轻量级RTSP服务模块(采集Unity窗体、摄像头或屏幕) ;Windows平台RTMP|RTSP直播播放模块;Linux平台RTMP直播推送模块(采集Unity窗体、Unity声音),也可扩展轻量级RTSP服务模块;Linux平台RTMP|RTSP直播播放模块 |RTSP直播播放模块;iOS平台RTMP|RTSP直播播放模块。 _, is_fast_startup); //设置快速启动模式 int rtsp_timeout = 10; NT_U3D_SetRTSPTimeout
RTSP 播放器为什么至今无法被淘汰? 然而,要构建一个稳定、低延迟、跨平台的 RTSP 播放器并非易事。本文将深入探讨 RTSP 播放器的核心技术要点、常见问题以及我们在构建大牛直播 SDK 中的实践经验。 播放器实践无需赘述,全自研内核,行业内一致认可的跨平台RTSP直播播放器SDK,功能齐全、高稳定、超低延迟,超低资源占用,凭此卓越实力,获行业高度认可,成为跨平台RTSP直播首选,深度赋能安防、教育、单兵指挥等关键行业 场景延展与定制能力 AI分析前置 提供 YUV/PCM 数据接口,适配 AI 模型前置分析(人脸、车牌、物体检测等) 嵌入Flutter/React Native/Unity3D等 通过平台通道/插件方式 总结与展望RTSP 播放器的开发是音视频系统中的重要一环,其复杂度往往被低估。