好多开发者使用场景,除了实现基础的低延迟RTSP、RTMP播放外,还需要实现RTSP、RTMP流数据的本地录像功能。 本文以大牛直播SDK的Windows平台播放模块为例,介绍下如何实现RTSP、RTMP流录像。 功能设计 [拉流]支持拉取RTSP流录像; [拉流]支持拉取RTMP流录像; [逻辑分离]和播放、转发功能完全分离,支持随时录像; [参数设置]支持设置单个录像文件大小、录像路径等,并支持纯音频、纯视频 、音视频录制模式; [音频转码]支持音频(PCMU/PCMA,Speex等)转AAC后再录像; [265支持]支持RTSP/RTMP H.265录制到MP4文件; [事件回调]从开始录像,到录像结束均有 | 0x5, /*断开连接*/ NT_SP_E_EVENT_ID_NO_MEDIADATA_RECEIVED = NT_SP_E_EVENT_ID_BASE | 0x8, /*收不到RTMP
技术背景我们在做RTSP、RTMP直播播放器的时候,有个比较重要的功能,就是拉流端实时录像,包括设置单个录像文件大小、文件前缀、audio转AAC、只录制视频或只录制音频、开始录像、停止录像事件状态回调等 我们录像模块,覆盖了RTMP、轻量级RTSP服务、RTSP|RTMP播放端录像,平台覆盖了Windows、Linux、Android、iOS,主要功能设计如下: [拉流]支持拉取RTSP流录像; [拉流 ]支持拉取RTMP流录像; [推流端录像]支持RTMP|RTSP推送端同步录像; [轻量级RTSP服务录像]支持轻量级RTSP服务SDK同步录像; [推流端录像实时暂停/恢复]支持推送端录像过程中实时暂停录像 /PCMA,Speex等)转AAC后再录像; [265支持]支持RTSP/RTMP H.265录制到MP4文件; [推送端265录像]推送端SDK支持H265录像; [推送端外部编码数据对接录像]支持推送端外部编码后数据 总结RTSP、RTMP播放端录像,我们的设计,是播放和录像分离,可以只录像或只播放,如果同时录像和播放,只需要一个拉流实例来完成。
技术背景我们在对接Windows平台RTSP|RTMP直播播放模块的时候,有开发者提出来这样的技术需求,他们做驾考、全景摄像头、多路会议录制等场景的时候,希望把多路视频流数据,合并到一路保存或者对外推送到 RTMP服务。 技术实现多路RTSP|RTMP流合流,实际上我们2016年就有这块demo,当时合流的数据是本地采集的摄像头或屏幕数据,和外部RTSP、RTMP流,合成后输出(类似于传统意义的连麦操作)。 这里大概说下思路,外部的RTSP|RTMP流数据,解码后,把YUV或RGB数据回调上来,然后,按照图层的形式,分别贴摄像头、屏幕数据或解码后的流数据。 );if (add_layer_config(text_layer, type))text_layer_index_ = index++;return index > 0;}合成后数据,可以对外推送到RTMP
好多开发者问我们,Unity环境下,除了RTSP或RTMP的播放,如果有录像诉求,怎么实现?实际上录像相对播放来说,更简单一些,因为不涉及到绘制,只要拉流下来数据,直接写mp4文件就好了。 (考虑到磁盘读写IO,Windows平台一般不建议多录录制),录像的话,需要考虑的是,设置好文件录制规则,比如,是否录制纯音频或纯视频、单个录制文件大小、文件录制目录等,并设置录像回调事件:/* * SmartPlayerWinMono.cs file_name); } else if (status == 2) //status 2:表示已经写好一个录像文件 { Debug.Log("RecordCallBack, 已生成一个录像文件 NTSmartPlayerSDK.NT_SP_Close(videoctrl[sel].player_handle_); videoctrl[sel].player_handle_ = IntPtr.Zero; }}以上是Unity平台RTMP 或RTSP播放端录像相关接口设计和调用实例,感兴趣的开发者可以参考。
背景 好多开发者在做Android平台RTMP推送对接的同时,除了编码前的数据外,还有些外部编码数据推送诉求,他们希望外部的编码音视频数据不止可以实现RTMP推送,还可以同时在推送端实时录制下来,本文以我们 (官方)Android平台RTMP直播推送模块为例,介绍下外部数据对接流程和数据录制流程。 对接流程 开始推送 private boolean StartPush() { if (isPushing) return false; //relayStreamUrl = "rtmp * *@param channels 通道数, 如果需要录像的话必须传正确的值, 一般是1或者2 * * @return {0} if successful playerHandle); playerHandle = 0; } return false; } isRecording = true; return true; } 停止录像
部分情况下,EasyDSS视频流的存在与否就取决于kernel中配置文件参数的正确与否,本文分享的案例就是EasyDSS直播无回放录像的问题。 在EasyDSS-kernel中配置文件参数push rtmp中端口未根据easydss.ini的参数rtmp推流端口而修改,所以在修改该端口时,导致nginx没有推流到录像文件,直播无回放录像。 配置文件如下: 此处我们添加push rtmp参数的正则表达式,在获取到dss_rtmp_port端口发生变化时,根据正则表达式从kernel的配置文件中找到push rtmp该参数的值,并修改该端口 正则表达式:PatternConfPushRTMPPort = push+\s+rtmp.+:(\d+)/record/; 参考代码如下:
StreamIsRecorded消息(实际场景中比较少见);服务端向客户端发送StreamBegin消息,向客户端指示流传输的开始;StreamIsRecoreded消息和StreamBegin消息组织结构比较简单,RTMP 类型表示; command Object:如果有,用object类型表示,如果没有,则使用null类型指明; stream Name:请求的流的名称,一般在url中application后面的字段,如rtmp ://192.17.1.202:1935/rtmp_live/test,rtmp_live为application,test为流的名称; start:可选字段,使用number类型表示,指示开始时间,默认值为 setChunkSize消息结构也比较简单,RTMP Header中的typeID,用来表示消息类型,setChunkSize的类型为0x01。 RTMP Body部分直接用4个字节表示chunk size,此例中chunkSize设为4000。
技术背景上篇文章,我们介绍了Unity平台RTMP、RTSP播放器录像功能,这里,我们详细的介绍下,做个RTSP或RTMP拉流端录像模块有哪些需要考虑的技术点? 在我们常规的考量,RTMP或RTSP流录制,无非就是拉取数据写文件而已,接口设计StartRecorder()/StopRecorder()足矣。 后再录像;支持录像事件回调,从开始录像,到录像结束均有event callback上来。 除了上述的设计,还需要确保和RTSP、RTMP播放在一个实例下,确保播放的过程中可以随时录像,录像的过程中,可以随时播放。 录像模块设计无图无真相,先看录像设置:图片开始录像、停止录像:图片Windows平台,我们提供了C++和C#的接口,本文以C++接口设计为例:先说录像设置:设置录制纯音频或纯视频: /**
技术背景 我们在做Windows平台RTMP推送、轻量级RTSP服务录像模块的时候,部分开发者抱怨路径无法设置中文,只能设置为英文。 、暂停录像、停止录像为例,调用逻辑如下,可以看到除了中文路径诉求,录像模块还可以添加前缀、添加文字、水印: public bool StartRecorder() { NTSmartPublisherSDK.NT_PB_StopRecorder(handle_); try_close_handle(); } 开始录像和录像完成后 break; } EventGetPublisherEventMsg(event_log); } 总结 Windows平台RTMP 推送、轻量级RTSP服务配套的录像模块,除了设置录像保存路径外、还可以设置录像文件前缀、是不是添加日期、时间等,还有就是单个录像文件大小,超过这个大小后,会自动切换到下个文件。
转载自 http://advdbg.com/blogs/advdbg_system/articles/21.aspx 今年一月份起,Channel9陆续访谈了一些微软内部的高级设计师和架构师,每次探讨 尽管录像和采访水准比. NetShow差很多,但是正因为采访的场合就在办公室,气氛也很随意,又很有针对性,因此谈的内容还是很值得一看的。建议大家茶余饭后边听边消遣一下。 Surendra Verma: Vista Transactional File System 42:35 12/2/2005 8 9,379 Singularity Revisited 59:00 Wang – Windows Memory Manager 36:00 6/28/2005 38 18,867 Windows, NT Object Manager 40:41 6/3/2005 5 9,474 Part I 17:14 4/22/2005 2 10,074 Windows, NT Cache Manager – Molly Brown – Part II 31:26 4/20/2005 9
支持h265视频流+rtmp等常见视频流。 可暂停播放和继续播放。 支持存储单个视频文件和定时存储视频文件。 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。 可设置画面拉伸填充或者等比例填充。 录像文件存储支持裸流和MP4文件。 支持qsv、dxva2、d3d11va等硬解码。 支持opengl绘制视频数据,极低CPU占用。 支持嵌入式linux,交叉编译即可。
技术设计本文以大牛直播SDK的Windows平台RTSP|RTMP直播播放录制功能设计为例,谈谈我们的接口的细粒度设计。 目前,我们录像模块,涵盖了Windows/Linux/android/iOS 推送端(涵盖轻量级RTSP服务模块、RTMP推流模块和GB28181设备接入模块)和RTSP|RTMP播放端,主要实现了如下功能 : [拉流]支持拉取RTSP流录像; [拉流]支持拉取RTMP流录像; [推流端录像]支持RTMP|RTSP推送端同步录像; [轻量级RTSP服务录像]支持轻量级RTSP服务SDK同步录像; [推流端录像实时暂停 ; [音频转码]支持音频(PCMU/PCMA,Speex等)转AAC后再录像; [265支持]支持RTSP/RTMP H.265录制到MP4文件; [推送端265录像]推送端SDK支持H265录像; [ 专注做好一件事,极致做精一件事,口碑做成一件事,比快更快,让RTSP|RTMP直播播放器更适用于延迟要求苛刻的使用场景(如平衡控制、无人机、智能机器人等),是我们一直的追求。
EasyCVR平台支持海量视频汇聚与管理、处理与分发、智能分析等视频能力,在接入协议上,不仅支持国标GB28181协议、RTSP/Onvif、RTMP等标准协议,还支持HIKSDK、大华SDK、海康Ehome 等厂家私有协议与SDK,可分发RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。 平台可灵活拓展,能实现的视频功能包括视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联等。 图片有用户反馈,EasyCVR平台的历史视频查看接口出现了异常,返回获取录像失败,请求我们排查协助。图片收到反馈后,立即让其将调用的接口提交技术人员,经查验调用接口并无问题。 再次远程排查,发现其他的协议接入的云端录像都能正常返回,但是rtmp_push推上来的则返回上述错误。我们初步猜测,按时间段调用的接口,可能不适用于RTMP推流这种接入协议。
技术背景我们在对接Unity平台camera场景采集的时候,除了常规的RTMP推送、录像外,还有一些开发者,需要能实现轻量级RTSP服务,对外提供个拉流的RTSP URL。 Windows平台Unity下数据源可采集到以下部分:采集Unity camera场景;采集摄像头;采集屏幕;采集Unity声音;采集麦克风;采集扬声器;Unity PCM混音;对外提供的技术能力有:RTMP 直播推送;轻量级RTSP服务;实时录像、暂停|恢复录像;实时预览。 { StopPushRTMP(); btn_rtmp_pusher_.GetComponentInChildren<Text>().text = "推送RTMP 推送、录像、轻量级RTSP服务,在虚拟仿真、医疗、教育等场景下,应用非常广泛。
EasyGBS国标视频云服务可支持通过国标GB28181协议将设备接入,实现视频的实时监控直播、录像、语音对讲、云存储、告警、级联等功能,也支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP 、RTMP、FLV、HLS、WebRTC等格式,实现Web浏览器、手机浏览器、微信端、PC客户端等各终端无插件播放。 有用户反馈,在EasyGBS平台开启录像后,出现了不能播放的情况。对此情况,我们进行了排查和解决。 1)查看内核日志,发现存在重复推流的现象:2)在调用RTMP推流库推流的地方打断点调试,发现每过几秒就会重复调用推流。进一步排查发现,代码中存在定时任务检测录像是否开启。 如果开启了录像,但是不在推流就会重新推流,但是实际场景中设备一直都在推流。
/PCMA,Speex等)转AAC后再录像,业内为数不多的支持RTSP/RTMP H.265录制到MP4文件的录像SDK; RTMP/RTSP一对一互动SDK 基于标准协议(RTMP或RTSP) 支持Unity3D的超低延迟RTMP/RTSP直播播放器SDK,支持快照、录像、实时静音、view旋转、快速切换URL等特性; 录像SDK 支持拉取rtmp/rtsp流实时录像模块/实时快照功能 ,支持音频(PCMU/PCMA,Speex等)转AAC后再录像,业内为数不多的支持RTSP/RTMP H.265录制到MP4文件的录像SDK; RTMP/RTSP多路流媒体转RTMP推送SDK 大牛直播SDK Windows平台已发布基于转发SDK的官方定制版系统: 点击查看多路RTSP/RTMP流转RTMP流官方定制版 9. Windows/Android/iOS录像SDK [拉流]支持拉取RTSP流录像; [拉流]支持拉取RTMP流录像; [推流端录像]支持RTMP|RTSP推送端同步录像; [轻量级RTSP服务录像
采集窗口:可设定需要采集的窗口,窗口放大或缩小,推送端会自适应码率和分辨率; 9. 采集帧率(帧/秒):默认屏幕采集8帧,可根据实际场景需求设定到期望帧率; 10. 9 实时预览 问题:我还想看看视频特别是合成后的效果,怎么办? 回答:点击页面的“预览”按钮,就可以看到。 10 音视频加密 问题:我想我的数据走标准协议,但是加密流,怎么办? 接口调用时序(以C#为例) 如需下载demo源码工程,可以到 Github 下载 “Windows平台RTMP|RTSP推送SDK、内置RTSP服务SDK、录像SDK”,C++或者C#的都有。 NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME = 5, // 外部视频数据层 NT_PB_E_LAYER_TYPE_WINDOW = 6, // 窗口层 } 9 22 RTMP/RTSP推送端录像 NT_PB_SetRecorderDirectory:设置本地录像目录, 必须是英文目录,否则会失败 NT_PB_SetRecorderFileMaxSize:设置单个录像文件最大大小
LiveGBS支持集成分享的直播页面,也可以集成云端录像或是设备录像回看页面2.1、视频流地址播放器集成通过接口或其它方式获取视频流的地址,设置到web播放器|APP播放器|PC播放器中,进行播放。 no, 默认值为 yestalk 是否显示对讲麦克风, 可选, yes/no, 默认值为 noaspect 配置只显示视频播放区域, 同时指定宽高比, 可选, wxh, 例如 640x360, 即16:9, token, 可选, 没有开启分享的通道需要携带登录接口返回的 URLToken3.1.4、分享页面播放手机端可以直接扫码观看,或是 手机浏览器访问分享的直播页面3.2、时间轴回放分享页集成同样设备录像和云端录像 通过传递的type 区分是设备录像 还是 云端录像<iframe src="http://ip:10000/playback.html? 直播流地址取上面接口返回的 <em>RTMP</em> 字段,对应的 <em>RTMP</em> 端口需要在服务端开放 TCP,如"RTMP": "rtmp://192.168.2.135:11935/hls/34020000001110000234
2、RTMP视频推流技术具有跨平台支持的优势RTMP协议在各大平台都得到广泛支持,可以运行在不同的操作系统上,适用于不同的设备。 3、RTMP视频推流技术具有稳定性强的特点通过建立持久的连接,RTMP可以保证数据传输的稳定性和可靠性。在推流过程中,RTMP协议能够有效地处理网络波动和丢包等问题,确保音视频数据的完整性和连续性。 这使得RTMP视频推流技术在实际应用中具有较高的可用性和可靠性。除了上述特点外,RTMP视频推流技术还具有良好的交互能力。RTMP协议支持丰富的音视频交互功能,如实时互动、视频聊天、弹幕评论等。 Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK、GA/T 1400协议等;24小时监控:支持7*24小时实时高清视频监控,能同时播放多路监控视频流,视频画面1、4、9、 ;录像回放与存储:支持视频录像、存储、回放功能,可通过调阅视频录像查看现场事发经过,将视频录像作为追溯责任的证据;GIS地图:可根据设备的地理位置信息,在地图上实现可视化、空间化点位布局展示、调阅视频;
好多开发者一直苦恼于如何在IE浏览器环境下,构建低延迟的RTSP或RTMP播放,对于RTSP流来说,好多公司通常的做法是把RTSP转RTMP,然后分发到RTMP服务器,然后服务器转http-flv出来, 大牛直播SDK(Github)在现有SDK的基础上,扩展了ocx控件,用于IE浏览器下的低延迟RTMP或RTSP播放,不谦虚的说,也可能是行业内功能支持和延迟最好的RTMP和RTSP播放器(支持RTMP 功能齐全的单画面RTMP流或RTSP流播放: 2. 同时播放4路RTMP流或RTSP流画面: 本地播放 DEMO说明 1_player_ocx.html:单个窗口功能展示。 ULONG NT_SetRTSPTcpMode(LONG isUsingTCP); 设置RTSP TCP/UDP播放模式; 9. 1 : 0; obj.NT_SetFastStartup(fast_startup_mode); //设置需要播放或录像的RTSP/RTMP url var url = document.getElementById