因此,构建在国产操作系统与 ARM64 芯片上的 RTMP/RTSP 低延迟播放器技术,不仅是技术适配,更是保障国家数字底座安全可信的关键一环。 现实情况却是:难题说明国内常见业务协议 RTSP/RTMP 在 ARM64 适配度不均衡各厂硬件能力差异巨大国产 OS 图形栈 X11/Wayland 并存,兼容性挑战大渲染路径稳定性为核心难点专网设备数量庞大 ,让国产设备能够在各种专网/弱网环境中,依然保证:✔低延迟 ✔不丢帧 ✔稳定播放 ✔多路并发 ✔系统级安全可控三、ARM64架构迁移:从“能运行”到“能支撑生产”的真实差距很多人以为播放器迁移到国产 ARM64 五、多路 RTSP/RTMP 播放器 Demo:架构与源码说明为了验证上述能力在国产 ARM64 平台上的稳定性,我们实现了一个 多实例低延迟播放器 Demo,支持: 多路流同时播放 自适应窗口布局 六、国产 ARM64 实测表现与工程部署建议我们在多款国产 ARM64 平台及主流国产 Linux 发行版环境中进行了功能与稳定性验证,整体结论如下——① 播放稳定性 多路播放可持续运行,无明显卡顿或黑屏情况
技术实现 顺势而为,在发布arm64架构的国产操作系统|Linux平台的RTMP|RTSP直播播放SDK之前,大牛直播SDK(官方)的直播播放SDK用一句比较流行的广告语叫遥遥领先,我们更是在前几年已经发布了 Linux X86_64架构的播放器,并得到了广泛的应用。 本次发布的可用于国产操作系统和Linux上的的RTMP|RTSP直播播放SDK, video输出基于X协议,audio输出采用PulseAudio和Alsa Lib实现。 大牛直播SDK发布的Linux平台播放器SDK支持多实例播放,相关代码如下: /* * multi_player_demo.cpp * * Author: daniusdk.com * * 架构的国产操作系统|Linux下的RTMP、RTSP直播播放,延迟依然毫秒级,随着国产操作系统在传统行业的推进,越来越多的场景需要高稳定性高延迟低的RTMP|RTSP播放器,本文抛砖引玉,感兴趣的开发者可以跟我单独探讨
本文基于大牛直播 SDK(SmartPlayerSDK)在 Linux ARM64 平台的 Demo 源码,结合实际的 C++ 封装与 X11 窗口管理代码,系统拆解如何在 Linux ARM64 环境下 ,实现一个支持多路并行、毫秒级延迟的 RTSP/RTMP 播放器。 一、整体架构:从 C 风格 SDK 到工程化播放器大牛直播 SDK 在 Linux 下的核心入口是一个纯 C 风格的结构体 SmartPlayerSDKAPI,里面是一组函数指针:Init/UnInit 工控板 多路渲染 资源紧张场景 七、ARM64 场景化调优建议7.1 无人机 / 云台 建议使用 RTSP over UDP 参数组合: SetBuffer(0) SetLowLatencyMode ARM64 多路播放器 Demo 展示了一条完整、可落地的行业级链路: SDK 层:跨 RTSP/RTMP 协议、解码、同步、OpenGL 渲染 句柄管理层:RAII + 事件分发 + 低延迟参数注入
RTSP协议探究RTSP播放器可广泛应用于对延迟要求比较高的场景下,比如协同操控相关的智能机器人或无人机、实时视频监控、远程视频会议、网络电视等。通过控制信令实现对流媒体数据的远程控制和传输管理。 如何实现RTSP播放器 本文以大牛直播SDK的Windows平台RTSP直播播放器为例,大概介绍下,如何集成RTSP直播播放能力。 IntPtr.Zero, video_frame_ts_callback_);NT_SP_SetAudioPCMFrameCallBack:设置音频PCM帧回调, 吐PCM数据出来,目前每帧大小是10ms,一般播放器无使用需求的话 (player_handle_, 0); }}else{ is_gdi_render_ = true; playWnd.Visible = false; // 不支持D3D就让播放器吐出数据来 Length + 1];buffer3[buffer2.Length] = 0;Array.Copy(buffer2, buffer3, buffer2.Length);IntPtr file_name_ptr
国产操作系统下的RTSP播放器选择随着国产化操作系统不断完善,针对国产化操作系统下的RTSP播放器需求也越来越大,如何选择一个适用于自己研发场景的RTSP播放器呢? 性能:确保播放器能够在x86_64架构和arm64架构的Linux系统上稳定运行,并提供流畅的播放体验。兼容性:检查播放器是否支持你需要播放的RTSP流格式和编码方式。 注意:在arm64架构的Linux系统上,需要确保安装的是支持该架构的VLC版本。 开发:虽然GStreamer本身不是一个播放器,但你可以使用它构建自己的RTSP播放器,或者找到基于GStreamer的播放器应用。 大牛直播SDK的SmartPlayer大牛直播SDK始于2015年,是一个专注于传统行业直播领域的SDK,旗下SmartMediaKit系列提供了对RTSP流的支持,并且支持x86_64架构和arm64
通过全自研技术框架,大牛直播SDK的RTSP播放器以功能齐全、性能优异、超低延迟、低代码低集成复杂度,在行业内享有较高的评价,服务了数百家B端用户。 技术特点超低延迟与稳定性超低延迟:大牛直播SDK的RTSP播放器在延迟控制方面表现出色,能够将播放延迟稳定地控制在较低水平,这对于直播场景尤为重要,能够显著提升用户体验。 跨平台支持多平台兼容:大牛直播SDK的RTSP播放器支持Windows、Linux(x86_64|aarch64)\Android、iOS多个平台,满足了不同场景下的使用需求。 客户评价与市场认可客户反馈:数百家业内公司一致认可,大牛直播SDK的RTSP播放器在性能、稳定性和功能方面均表现出色。 RTSP播放器在超低延迟、稳定性、跨平台支持、功能丰富性、易用性与集成性等方面均表现出色,是一款值得推荐的流媒体播放解决方案。
在发布国产操作系统|Linux平台的RTMP|RTSP直播播放SDK之前,大牛直播SDK在Windows、Android、iOS平台已经有了非常成熟的技术积累,功能齐全、稳定性高、超低延迟、超低资源占用 国产操作系统和Linux上的RTMP|RTSP直播播放模块,视频绘制使用XLib相关库实现, 音频输出使用PulseAudio和Alsa Lib,除了常规功能如实时静音、快照、buffer time设定 Linux原生的RTSP、RTMP播放模块这里我们不做赘述,本文主要讲的是如何在Linux平台构建Unity下的RTSP和RTMP低延迟直播播放。 技术实现国产操作系统和Linux平台下,Unity环境的播放器,和Windows、Android、iOS平台基础流程并无大的差异,简单来说,通过调用原生的播放模块,回调解码后的YUV或RGB数据,投递到 平台下Unity RTMP、RTSP直播播放器大概的实现参考,随着国产操作系统的推进,Linux下RTMP、RTSP高质量的播放器需求越来越大,Unity下,可以实现和Windows、Android等平台统一开发管理
好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTSP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTSP的播放都面向直播场景,如果延迟过大,严重影响体验,所以,低延迟是衡量一个好的RTSP播放器非常重要的指标,目前大牛直播SDK的RTSP直播播放延迟比开源播放器更优异(大牛直播SDK 延迟在1秒左右,开源播放器如VLC,延迟相对比较大),而且长时间运行下,大牛直播SDK播放端不会造成延迟累积,开源或第三方播放器,长时间运行,容易产生延迟累积; 2. 支持多实例:大牛直播SDK提供的RTSP直播播放SDK支持在设备性能允许的情况下,支持多实例播放RTSP流数据,大多开源播放器对多实例支持不太友好; 4. 长期运行稳定性:大牛直播SDK提供的RTSP直播播放SDK适用于长时间运行,开源播放器对长时间运行稳定性支持较差; 11.
一、为什么 RTSP 播放器如此重要?在一条实时视频链路里,RTSP 播放器往往决定了最终体验的上限。 二、SmartPlayer:为“工程场景”而生的 RTSP 播放器SmartPlayer 的本质不是“一个能播 RTSP 的播放器”,而是一套专为 实时交互与工程场景 打造的 跨平台流媒体内核。 /4K/5MP)优化 因此,在边缘网关、ARM64 工控机、国产化设备上也能保持低功耗与高稳定性。 工业视觉(流水线检测、高帧率摄像头)工业视觉最怕: 画面卡一帧 延迟堆积 解码端高负载造成丢帧 SmartPlayer 在 Linux/Windows 下可支持: 高分辨率(2K/4K)码流 高帧率场景 这正是它被视为 “工程级 RTSP 播放器” 的核心原因。
技术背景我们在对接RTSP直播播放器相关技术诉求的时候,好多开发者,除了选用成熟的RTSP播放器外,还想知其然知其所以然,对RTSP播放器的整体开发有个基础的了解,方便方案之作和技术延伸。 跨平台开发的挑战适应不同的操作系统和设备 RTSP 播放器需要在不同的操作系统和设备上运行,如 Windows、Linux、Android、iOS 等。 先说功能设计,如不单独说明,Windows、Linux(x86_64|aarch64架构)、Android、iOS全平台支持。 ,不会造成延迟累积;2. ;return false;}lib_player_.SetSmartPlayerEventCallbackV2(handle, new EventHandleV2());lib_player_.SmartPlayerSetBuffer
SkeyePlayer RTSP Windows端(下文简称:SkeyePlayer)播放器之前抓图代码主要通过OpenCV来实现,且数据格式转换的效率过于低下;故而在当时的代码中采用线程机制来解决抓图导致视频播放时卡顿的问题 \n"); goto done; } if (avcodec_open2(codec_ctxt, codec, NULL) < 0) { //av_log(NULL, AV_LOG_ERROR got) { if (avcodec_encode_video2(codec_ctxt, &packet, &picture, &got) < 0) { //av_log(NULL, AV_LOG_ERROR 当然强大的格式转换函数也支持图像的缩放,且效率很高; 图像编码,细心的同学不难发现,ffmpeg的编码和存文件/推送流的代码是通用的,这套代码可以用来抓图也可以用来编码H264、265等然后存文件(如MP4等)或者推送RTMP/RTSP 等; 已经完成了抓图代码调用起来就很简单了,只需替换掉旧的抓图函数即可,需要注意的是之前的抓图固定了格式为YUY2,所以缓冲区大小只有WidthHeight2的大小,而显然RGB24格式的数据会导致缓冲区溢出
我们在实现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播放器设计过程中的其他点,做更进一步的探讨,谢谢大家的关注。
2. :RTSP 视频源 → [RTSP 播放器 SDK] → 安卓 / Windows 播放界面推荐模块配置: 播放端使用 RTSP Player SDK(开启低延迟模式 + 硬解支持) 开启 YUV/RGB / RTMPRTSP / RTMP––支持实时录制支持公网/内网穿透低延迟 P2P 交互SEI 数据扩展 SDK全平台任意支持视频流RTSP/RTMP–SEI 发送 / 接收可随流录制保存–支持图像标注 推荐组合: RTSP 播放模块(解码 RTSP 视频流) RTSP → RTMP 转发模块(编码并转推) 本地录像模块(边转边录) 部署环境:Linux/Android 边缘设备,arm64 架构 推荐组合: RTSP / RTMP 播放器模块 YUV / RGB 视频帧回调接口(用于 AI 输入) (可选)音频 PCM 回调 用于语音识别/音频分析 部署环境:Android、Linux、
很多开发者在开发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 流 实时下载速度EVENT_DANIULIVE_ERC_PLAYER_RTSP_STATUS_CODERTSP 收到错误码,可能 是用户名、密码不对
RTSP播放器选型指南选择合适的RTSP播放器时,需要考虑多个方面以确保其能够满足您的具体需求。以下是一些关键的选择标准和建议:一、功能需求 低延迟:对于直播或实时监控场景,低延迟是至关重要的。 选择一个能够保持较低延迟(如几百毫秒)的RTSP播放器,以确保实时性。 音视频同步:确保播放器能够正确处理音视频同步,避免出现音画不同步的情况。 跨平台支持:根据您的应用场景,选择一个支持多种操作系统(如Windows、Linux、Android、iOS等)的播放器,以便在不同设备上使用。 测试程序:SmartPlayer.exe; Windows C++工程:WIN-PlayerSDK-CPP-Demo; Windows C#工程:WIN-PlayerSDK-CSharp-Demo; Linux 工程:single_playerdemo|multi_playerdemo; Android工程:SmartPlayerV2; iOS工程:SmartiOSPlayerV2。
从高效率的角度,磨刀不误砍柴工,在模块集成之前,还是希望开发者能了解播放器集成的一些前置条件,少走弯路,尽快完成RTSP、RTMP低延迟播放能力构建。 本文不关注接口集成调用细节,主要介绍下,播放器集成的一些前置条件和注意事项。 app-name,strings.xml修改即可:<string name="app_name">SmartPlayerSDKDemo</string>SmartPlayer目录文件名作用SmartPlayerV2RTSP |RTMP直播播放器Demo工程源码SmartPlayerV2\app\src\main\jniLibssmartavengine.jar和libSmartPlayer.soSmartPlayerV2\ app\src\main\java\com\daniulive\smartplayer\SmartPlayerJniV2.java播放器头文件SmartPlayerV2\app\src\main\java
可以在播放画面添加OSD台标,以实现字符叠加效果,大多开发者可很轻松的实现以上效果,针对此,本文以大牛直播SDK (Github)的Windows平台demo为例,简单介绍下具体实现: Windows平台RTMP播放器 、RTSP播放器C++ demo Windows平台C++的demo,以录像过程为例,动态在左上角显示个闪动的图标+当前时间,具体效果如下: CPP添加osd.png 核心代码 std::shared_ptr swap(buffer); } bitmap.UnlockBits(&locked_bitmapData); } return logo_image; } Windows平台RTMP播放器 、RTSP播放器C# demo Windows平台C#的demo,添加了“设置台标”选择框,在player窗口左上角显示“叠加字符展示”,具体内容、坐标可自定义,具体效果如下: 添加osd.png 核心代码 - text_size.Width / 2; float top = image_h / 2 - text_size.Height / 2; g.DrawString
推流支持可本地部署推流节点,支持自定义推流目标地址、私有协议封装医院内网/专网中实现实时图像回传,无公网依赖 低延迟播放器引擎原生支持 RTMP / RTSP 播放,端到端延迟可控在 100~250ms /RGB回调 + 图像预处理 + SDK播放 护理机器人智能巡检、远程操控视频图传 + 控制指令回传RTSP摄像头→SDK播放器→AI识别 + Unity/控制接口 医学培训教学案例回放、分组教学演练多屏同步播放 、时间轴回放RTMP推流 + 跨平台播放器 + 录制模块 跨院协作区域医疗中心与基层医院联动多端视频汇聚、统一调度RTSP/RTMP汇聚→大牛SDK多实例播放 + 协同管理 ✅ 大牛直播SDK的能力并非 医生终端、区域平台监控台 麒麟桌面系统✅ 已通过兼容性适配支持兆芯、鲲鹏等国产CPU架构,内置示例可快速集成会诊中心、阅片终端、手术教学平台 ARM 嵌入式平台✅ 支持低功耗设备部署内存占用小、可运行于ARM64 环境容器版 SDK,适配各类中台系统医疗调度服务器、区域中心视频调度系统技术亮点摘要: 提供多架构SDK(x86 / x86_64 / ARM / ARM64) 支持离线授权,便于符合国家对医疗数据合规要求
上一篇我们简单介绍了rtsp协议,本篇我们来看一下rtsp的消息结构! RTSP消息分为两大类,一类是请求消息(request),一类是回应消息(ressponse)! 说明: 请求消息由方法+URI+RTSP版本开头,之后跟一条或多条消息! URI:表示接收方的地址,如rtsp://192.168.1.201:554 CR:表示回车 LF:表示换行 RTSP使用消息类型和消息体来表示不同类型的消息。 最后一条消息要使用两个CR LF。 如图中所示,该RTSP请求消息的方法为OPTIONS,请求的目标地址为rtsp://192.17.1.63:554,RTSP的版本为1.0; 接下来包含两种类型的消息,第一种为CSeq表示序列号,本次请求的序列号为 我们接下来看一下回应消息的格式: 2 回应消息(response) ? 回应消息由RTSP版本+状态码+解释开头,之后跟一条或多条消息!
概述libSkeyePlayer实现对RTSP直播流进行实时采集和解码显示,稳定,高效,低延时;解码可采用intel硬件解码和软件解码两种方式,能实时进行录像和快照抓图,OSD叠加等功能。 API接口函数定义 int SkeyePlayer_Init();函数说明:播放器初始化,播放器使用之前调用;参数说明: void SkeyePlayer_Release();函数说明:播放器资源释放 ;返回值为当前播放的通道ID,该ID在停止推流时需要用到;参数说明:Url:IN 字符串类型,表示当前要播放的流地址,Eg: rtsp://127.0.0.1:554/stream.sdpHWnd: IN 音频声道数 */unsigned intbits_per_sample;/* 音频采样精度 */unsigned intreserved1;/* 保留参数1 */unsigned intreserved2; /* 保留参数2 */}MEDIA_INFO;