无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以iOS平台为例,介绍下如何集成RTSP、RTMP播放模块。 端,RTMP|RTSP直播播放,我们设计实现的功能如下:音频:AAC/PCMA/PCMU/SPEEX(RTMP);视频:H.264;播放协议:RTMP或RTSP;支持纯音频、纯视频、音视频播放;支持多实例播放 扩展H.265播放(Enhanced RTMP);支持扩展录像功能;支持Unity3D接口;支持H.264扩展SEI接收模块;支持iOS 9.0及以上版本。 平台RTSP、RTMP直播播放模块,延迟低、资源占有少,性能优异。 由于设备和系统比较单一,优先考虑硬解码,除了基础播放外,我们还实现了实时快照、实时录像、实时回调YUV数据、实时音量调节等,实际体验下来,iOS平台RTMP和RTSP,可以轻松毫秒级。
技术背景在我的blog里面,最近很少有提到iOS平台RTMP推送|轻量级RTSP服务和RTMP|RTSP直播播放模块,实际上,我们在2016年就发布了iOS平台直播推拉流、转发模块,只是因为传统行业, 对iOS的需求比较少,所以一直没单独说明,本文主要介绍下,如何在iOS平台播放RTMP或RTSP流。 技术实现先说播放实现,iOS端,RTMP|RTSP直播播放,我们实现的功能如下: [支持播放协议]高稳定、超低延迟(毫秒级) [多实例播放]支持多实例播放; [事件回调]支持网络状态、buffer状态等回调 Windows/Android/iOS支持特定机型H.264硬解; [H.265硬解]Windows/Android/iOS支持特定机型H.265硬解; [H.264/H.265硬解码]Android支持设置 平台播放,由于设备和系统比较单一,所以优先考虑硬解码,除了基础播放外,我们还实现了实时快照、实时录像、实时回调YUV数据、实时音量调节等,实际体验下来,iOS平台RTMP和RTSP,可以轻松毫秒级,感兴趣的开发者
我们在实现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 播放器设计过程中的其他点,做更进一步的探讨,谢谢大家的关注。
技术背景好多开发者拿到大牛直播SDK的Android平台RTSP、RTMP播放模块,基本上不看说明,测试后,就直接集成到自己系统了。 从高效率的角度,磨刀不误砍柴工,在模块集成之前,还是希望开发者能了解播放器集成的一些前置条件,少走弯路,尽快完成RTSP、RTMP低延迟播放能力构建。 本文不关注接口集成调用细节,主要介绍下,播放器集成的一些前置条件和注意事项。 直播播放器Demo工程源码SmartPlayerV2\app\src\main\jniLibssmartavengine.jar和libSmartPlayer.soSmartPlayerV2\app\src \main\java\com\daniulive\smartplayer\SmartPlayerJniV2.java播放器头文件SmartPlayerV2\app\src\main\java\com\daniulive
我们在Windows平台实现RTSP或者RTMP播放的时候,有个功能是绕不开的,那就是播放窗口全屏。 本文就以大牛直播SDK(官方)的Windows播放器为例,大概讲下大概实现: 全屏播放需要考虑的点不多: 第一:视频播放后,全屏的意义; 第二:全屏后,是否等比例显示,我们的设计原则是,之前等比例显示的
摘要本文详细介绍了在 Android 平台上集成 RTSP 和 RTMP 直播播放模块的技术背景、系统要求、准备工作、接口设计、功能支持以及接口调用流程。 初始化接口 SmartPlayerOpen:初始化播放器,设置上下文信息,返回播放实例句柄。 SetSmartPlayerEventCallbackV2:设置事件回调接口,用于接收播放器的状态信息。 2. RTMP 增强:支持 Enhanced RTMP。 录像功能:支持扩展录像功能。 系统兼容:支持 Android 5.1 及以上版本。 六、接口调用详解1. playerHandle = 0; } super.onDestroy(); finish(); System.exit(0);}七、总结本文详细介绍了在 Android 平台上集成
好多开发者在做Windows平台特别是单屏多画面显示时,希望像监控摄像机一样,可以在播放画面添加OSD台标,以实现字符叠加效果,大多开发者可很轻松的实现以上效果,针对此,本文以大牛直播SDK (Github )的Windows平台demo为例,简单介绍下具体实现: Windows平台RTMP播放器、RTSP播放器C++ demo Windows平台C++的demo,以录像过程为例,动态在左上角显示个闪动的图标 data_.swap(buffer); } bitmap.UnlockBits(&locked_bitmapData); } return logo_image; } Windows平台 RTMP播放器、RTSP播放器C# demo Windows平台C#的demo,添加了“设置台标”选择框,在player窗口左上角显示“叠加字符展示”,具体内容、坐标可自定义,具体效果如下: 添加osd.png
无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以Android平台为例,介绍下如何集成RTSP、RTMP播放模块。 DisableEnhancedRTMP disable enhanced RTMP, SDK默认是开启enhanced RTMP的 实时截图 CaptureImage 支持JPEG和PNG两种格式 /RTSP url 开始播放 SmartPlayerStartPlay 开始播放RTSP/RTMP流 停止播放 SmartPlayerStopPlay 停止播放RTSP/RTMP流 关闭播放实例 接口调用详解 本文以大牛直播SDK Android平台SmartPlayerV2为例,播放之前,设置初始化参数配置(软解还是硬解、buffer time等)和需要播放的RTSP或RTMP URL,点开始播放即可 boolean is_null_or_empty(String val) { return null == val || val.isEmpty(); } } 总结 以上是Android平台
技术背景我们在做RTSP、RTMP直播播放器的时候,有个比较重要的功能,就是拉流端实时录像,包括设置单个录像文件大小、文件前缀、audio转AAC、只录制视频或只录制音频、开始录像、停止录像事件状态回调等 我们录像模块,覆盖了RTMP、轻量级RTSP服务、RTSP|RTMP播放端录像,平台覆盖了Windows、Linux、Android、iOS,主要功能设计如下: [拉流]支持拉取RTSP流录像; [拉流 ]支持拉取RTMP流录像; [推流端录像]支持RTMP|RTSP推送端同步录像; [轻量级RTSP服务录像]支持轻量级RTSP服务SDK同步录像; [推流端录像实时暂停/恢复]支持推送端录像过程中实时暂停录像 技术实现本文以大牛直播SDK的iOS平台拉流端录像为例,大概介绍下相关接口的设计,废话不多说,先上代码:- (void)RecorderBtn:(UIButton *)button { NSLog * * Stop recorder(停止录像) * * @return {0} if successful */- (NSInteger)SmartPlayerStopRecorder;总结RTSP、RTMP
我们需要怎样的直播播放器?很多开发者在跟我聊天的时候,经常问我,为什么一个RTMP或RTSP播放器,你们需要设计那么多的接口,真的有必要吗? 带着这样的疑惑,我们今天聊聊Android平台RTMP、RTSP播放器常规功能,如软硬解码设置、实时音量调节、实时快照、实时录像、视频view翻转和旋转、画面填充模式设定、解码后YUV、RGB数据回调等 :图片延迟延迟延迟RTMP或RTSP直播播放器,特别是在一些交互场景下,对延迟要求近乎苛刻,所以,毫秒级的延迟,是一个直播播放器聊下去的基础,200-400ms的整体时延,是大家比较期望的,是的,你没看错 ,RTMP的也可以做到极低延迟。 或RTSP播放器,还需要支持的客制化功能有支持回调H.264/H.265/AAC数据,或回到解码后的YUV或RGB数据,设置播放缓冲、设置快速播放、设置音频输出类型等,一个通用的RTSP、RTMP播放器
RTSP|RTMP播放器模块是大牛直播SDK的SmartMediaKit下非常优异的子产品,功能丰富、性能优异,毫秒级超低延迟,支持Windows、Linux(x86_64|aarch64架构)、Android 、iOS平台。 SmartPlayer主要设计的功能如下:音频:AAC/Speex(RTMP)/PCMA/PCMU;视频:H.264、H.265;播放协议:RTSP|RTMP;支持纯音频、纯视频、音视频播放;支持多实例播放 一个好的RTMP或RTSP播放器,不仅是需要功能完善,还需要有非常优异的性能,特别是多实例播放,资源占有也是考量的一个重要因素,其次,直播特别是和操控相关的场景,都需要极致的低延迟才行,真是应了那句话, 做播放器容易,做个好的播放器,真的太难了!
技术背景上篇文章,我们介绍了Unity平台RTMP、RTSP播放器录像功能,这里,我们详细的介绍下,做个RTSP或RTMP拉流端录像模块有哪些需要考虑的技术点? 在我们常规的考量,RTMP或RTSP流录制,无非就是拉取数据写文件而已,接口设计StartRecorder()/StopRecorder()足矣。 除了上述的设计,还需要确保和RTSP、RTMP播放在一个实例下,确保播放的过程中可以随时录像,录像的过程中,可以随时播放。 录像模块设计无图无真相,先看录像设置:图片开始录像、停止录像:图片Windows平台,我们提供了C++和C#的接口,本文以C++接口设计为例:先说录像设置:设置录制纯音频或纯视频: /**
在发布国产操作系统|Linux平台的RTMP|RTSP直播播放SDK之前,大牛直播SDK在Windows、Android、iOS平台已经有了非常成熟的技术积累,功能齐全、稳定性高、超低延迟、超低资源占用 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 Unity RTMP、RTSP直播播放器大概的实现参考,随着国产操作系统的推进,Linux下RTMP、RTSP高质量的播放器需求越来越大,Unity下,可以实现和Windows、Android等平台统一开发管理
为什么要支持GDI 先说结论,Windows平台播放渲染这块,一般来说99%以上的机器都是支持D3D的,实现GDI模式绘制,除了为了好的兼容性外,在远程连接的场景下,D3D创建不成功,需要使用GDI模式 简单来说,Windows平台的RTMP播放器或RTSP播放器,设计如果系统支持D3D,优先D3D,如果检测到不支持D3D,数据回调上来,GDI模式绘制。 上图以1920*1080分辨率、30帧、固定码率(采集屏幕左侧区域)为例,通过大牛直播SDK ( 官方 ) 的Windows平台SmartPublisherDemo.exe工具推送到内网nginx服务器 1 : 0); } else { is_gdi_render_ = true; // 不支持D3D就让播放器吐出数据来,用GDI绘制 wrapper_render_wnd
背景 我们在做Android平台RTSP或者RTMP播放器开发的时候,需要注意的点非常多,以下,以大牛直播SDK(官方)的接口为例,大概介绍下相关接口设计: 接口设计 1. 音频输出类型 音频输出,android平台支持audiotrack模式和opensl es模式,一般来说,考虑到设备通用性,建议采用audiotrack模式。 拉流回调编码后的数据(配合转发模块使用) 拉流回调编码后的数据,主要是为了配合转发模块使用,比如拉取rtsp流数据,直接转RTMP推送到RTMP服务。 RTSP、RTMP播放器接口设计需要参考的点,对于大多数开发者来说,不一定需要实现上述所有部分,只要按照产品诉求,实现其中的40%就足够满足特定场景使用了。 一个好的播放器,特别是要满足低延迟稳定的播放(毫秒级延迟),需要注意的点远不止如此,感兴趣的开发者,可以参考blog其他文章。
背景我们看过了太多介绍RTSP、RTMP播放相关的技术资料,大多接口设计简约,延迟和扩展能力也受到一定的局限,好多开发者希望我们能从接口设计的角度,大概介绍下大牛直播SDK关于RTMP、RTSP播放器开发设计 ,本文以Windows平台RTMP、RTSP播放模块为例,大概介绍下常用的接口。 拉流回调编码后的数据(配合转发模块使用)拉流回调编码后的数据,主要是为了配合转发模块使用,比如拉取rtsp流数据,直接转RTMP推送到RTMP服务。 1 : 0);总结以上就是大牛直播SDK(官网)关于Windows平台RTSP、RTMP播放器接口设计需要参考的点,其他还有些,比如如果不支持D3D,GDI模式绘制,播放界面叠加实时文字,播放画面全屏等 ,这里就不再赘述,除Windows平台外,我们还同步开发了Linux、Android、iOS平台的RTSP、RTMP播放器,大多常规接口四个平台基本统一,延迟也都做到了毫秒级。
技术选型我们知道,Android平台一般RTMP|RTSP播放器通常不直接提供回调YUV或RGB数据的功能。 使用第三方RTMP|RTSP播放器直接回调数据以大牛直播SDK的RTMP|RTSP播放模块为例,我们是可以直接设置YUV或RGB数据回调,并提供相关调用示例:btnStartStopPlayback.setOnClickListener
技术设计本文以大牛直播SDK的Windows平台RTSP|RTMP直播播放录制功能设计为例,谈谈我们的接口的细粒度设计。 目前,我们录像模块,涵盖了Windows/Linux/android/iOS 推送端(涵盖轻量级RTSP服务模块、RTMP推流模块和GB28181设备接入模块)和RTSP|RTMP播放端,主要实现了如下功能 : [拉流]支持拉取RTSP流录像; [拉流]支持拉取RTMP流录像; [推流端录像]支持RTMP|RTSP推送端同步录像; [轻量级RTSP服务录像]支持轻量级RTSP服务SDK同步录像; [推流端录像实时暂停 sb.Append(recorder_file_name); MessageBox.Show(sb.ToString()); }总结上述是Window平台 专注做好一件事,极致做精一件事,口碑做成一件事,比快更快,让RTSP|RTMP直播播放器更适用于延迟要求苛刻的使用场景(如平衡控制、无人机、智能机器人等),是我们一直的追求。
技术架构概览大牛直播SDK RTMP 播放器采用跨平台全自研多媒体内核,从网络接入到渲染输出的每一个环节,都针对低延迟与高稳定性进行了深度优化。 跨平台一致性 —— 同一套 API 接口覆盖 Windows / Linux / Android / iOS,无需重复开发。 对比开源RTMP播放器:性能差距一目了然在实际项目中,RTMP 播放器的优劣不仅取决于“能否播放”,更取决于延迟、稳定性、跨平台一致性以及功能可扩展性。 —— 同一套 API 覆盖 Windows / Linux / Android / iOS,减少多平台适配成本。 大牛直播SDK RTMP 播放器以跨平台全自研内核为基石,从网络协议解析到解码渲染链路全程优化,稳定实现公网 100~250ms 毫秒级延迟、全功能矩阵覆盖以及多平台统一接入。
好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTMP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTMP的播放都面向直播场景,如果延迟过大,严重影响体验,所以,低延迟是衡量一个好的RTMP播放器非常重要的指标,目前大牛直播SDK的RTMP直播播放延迟比开源播放器更优异(大牛直播SDK 支持多实例:大牛直播SDK提供的RTMP直播播放SDK支持在设备性能允许的情况下,支持多实例播放RTMP流数据,大多开源播放器对多实例支持不太友好; 除了常规的多实例外,比如大屏监控场景下,尽管我们CPU 视频view旋转:好多摄像头由于安装限制,导致图像倒置,所以一个好的RTMP播放器应该支持如视频view实时旋转(0° 90° 180° 270°)、水平反转、垂直反转,开源或第三方播放器不具备此功能; 长期运行稳定性:大牛直播SDK提供的RTMP直播播放SDK适用于长时间运行,开源播放器对长时间运行稳定性支持较差; 11.