RTMP/RTSP推送端和RTMP/RTSP播放端录像设计探讨

好多开发者认为,无论是RTSP/RTMP推送端还是RTSP/RTMP播放端,涉及到录像,只要2个接口足矣:开始录像、停止录像。

实际场景下,一个好的录像模块,2个接口远远不够, 本文以大牛直播SDK(Github)RTSP/RTMP推送和RTSP/RTMP播放端扩展录像模块为例,介绍下一个好的录像模块,需要具备哪些基本功能属性。

Android、iOS平台不再赘述,本文以Windows平台C#接口为例,先说推送端:

1. 设置录像目录

录像目录不必多解释,为了便于录像文件管理,设置指定的录像目录是基础操作。

 /** 设置本地录像目录, 必须是英文目录,否则会失*/[DllImport(@"SmartPublisherSDK.dll")]public static extern UInt32 NT_PB_SetRecorderDirectory(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String dir, IntPtr pReserve);

2. 设置单个录像文件最大大小

之所以设置单个录像文件大小,有两个出发点:第一,控制单个文件大小范围,不至于因单个文件过大,中途异常退出或文件过大导致写入失败;第二,达到设定文件大小size后,自动切割生成下个录像文件,便于文件管理。

        /** 设置单个录像文件最大大小, 当超过这个值的时候,将切割成第二个文件* * size: 单位是KB(1024Byte), 当前范围是 [5MB-1G], 超出将被设置到范围内*/[DllImport(@"SmartPublisherSDK.dll")]public static extern UInt32 NT_PB_SetRecorderFileMaxSize(IntPtr handle, UInt32 size);

3. 设置录像文件名生成规则

设置文件名生成规则,主要是为了不至于每个文件都需要开发者单独指定名称,开发者只要制定录制规则,比如文件名前缀、是否加日期、是否加时间等属性,自动生成文件名。

        /** 设置录像文件名生成规则*/[DllImport(@"SmartPublisherSDK.dll", EntryPoint = "NT_PB_SetRecorderFileNameRuler", CallingConvention = CallingConvention.StdCall)]public static extern UInt32 NT_PB_SetRecorderFileNameRuler(IntPtr handle, ref NT_PB_RecorderFileNameRuler ruler);
    /*如果三项都是0的话,将不能启动录像*/[StructLayoutAttribute(LayoutKind.Sequential)]public struct NT_PB_RecorderFileNameRuler{public UInt32 type_;                                          // 这个值目前默认是0,将来扩展用[MarshalAs(UnmanagedType.LPStr)]public String file_name_prefix_;                              // 设置一个录像文件名前缀, 例如:daniulivepublic Int32 append_date_;                                    // 如果是1的话,将在文件名上加日期, 例如:daniulive-2017-01-17public Int32 append_time_;                                    // 如果是1的话,将增加时间,例如:daniulive-2017-01-17-17-10-36}

4. 启动录像

不多解释,这个只要涉及录像功能,都需要的。

        /** 启动录像*/[DllImport(@"SmartPublisherSDK.dll")]public static extern UInt32 NT_PB_StartRecorder(IntPtr handle, IntPtr pReserve);

5. 暂停/恢复录像

暂停录像,好多开发者不可理解,这里举个简单的李总,比如老师每次上课2小时,中间有2次下课休息时间,下课期间,老师可暂停录像,等开始上课后,恢复录像,这样确保了上课内容录制的连续性和完整性。

		/** 暂停录像* * is_pause: 1表示暂停, 0表示恢复录像, 输入其他值将调用失败* * 成功返回NT_ERC_OK* 返回NT_ERC_PB_NEED_RETRY, 请隔一段时间再尝试调用*/[DllImport(@"SmartPublisherSDK.dll")]public static extern UInt32 NT_PB_PauseRecorder(IntPtr hanlde, Int32 is_pause);

6. 停止录像

不多解释,这个只要涉及录像功能,都需要的。

        /** 停止录像*/[DllImport(@"SmartPublisherSDK.dll")]public static extern UInt32 NT_PB_StopRecorder(IntPtr handle);

7. 录像事件回调

录像事件回调,是好多开发者在设计录像功能模块时容易忽略的,回调的目的是给上层一个反馈,比如开始录像、停止录像状态反馈,亦或单个录像完成后的事件回调。

	        NT_PB_E_EVENT_ID_RECORDER_START_NEW_FILE    = NT_PB_E_EVENT_ID_BASE | 0x7,	/*录像写入新文件, param5表示录像文件名*/NT_PB_E_EVENT_ID_ONE_RECORDER_FILE_FINISHED = NT_PB_E_EVENT_ID_BASE | 0x8,	/*一个录像文件完成, param5表示录像文件名*/
                case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_RECORDER_START_NEW_FILE:event_log = " start new recorder file";if (!String.IsNullOrEmpty(param5)){label_event_status.Text = event_log + " file name:" + param5;}break;case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_ONE_RECORDER_FILE_FINISHED:event_log = " finish recorder file";if (!String.IsNullOrEmpty(param5)){label_event_status.Text = event_log + " file name:" + param5;}break;

播放端除了上述设置录像目录、指定录像文件名规则,开始录像/停止录像和event回调外,还加入了以下接口:

8. 只录制音频或视频

这个很好理解,比如音视频都有的场景,好多开发者可能实际只需要用到音频或视频,这个时候,就凸显出接口意义了。

        /** 设置是否录视频,默认的话,如果视频源有视频就录,没有就没得录, 但有些场景下可能不想录制视频,只想录音频,所以增加个开关* * is_record_video: 1 表示录制视频, 0 表示不录制视频, 默认是1*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_SetRecorderVideo(IntPtr handle, Int32 is_record_video);/** 设置是否录音频,默认的话,如果视频源有音频就录,没有就没得录, 但有些场景下可能不想录制音频,只想录视频,所以增加个开关** is_record_audio: 1 表示录制音频, 0 表示不录制音频, 默认是1*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_SetRecorderAudio(IntPtr handle, Int32 is_record_audio);

9. 设置录像时音频转AAC编码的开关

设置录像时音频转AAC编码的开关的意义在于,比如有些rtsp流,audio是PCMA或PCMU的,有些rtmp流,audio是SPEEX的,实际使用场景下,aac比较通用,sdk增加其他音频编码(比如speex, pcmu, pcma等)转aac的功能,确保存储下来的MP4文件通用性更好。

        /** 设置录像时音频转AAC编码的开关, aac比较通用,sdk增加其他音频编码(比如speex, pcmu, pcma等)转aac的功能.* is_transcode: 设置为1的话,如果音频编码不是aac,则转成aac, 如果是aac,则不做转换. 设置为0的话,则不做任何转换. 默认是0.* 注意: 转码会增加性能消耗*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_SetRecorderAudioTranscodeAAC(IntPtr handle, Int32 is_transcode);

总结

一个好多录像模块设计,应该是可作为单独功能模块使用(如同时多路录像存档),亦可和其他模块组合调用,此外,需要和RTMP/RTSP推送、RTMP/RTSP播放、RTSP转发、内置轻量级RTSP服务功能完全分离,支持随时录像,支持设置单个录像文件大小、录像路径等,并支持纯音频、纯视频、音视频录制模式,支持音频(PCMU/PCMA,Speex等)转AAC后再录像,支持RTSP/RTMP H.265(hevc),支持采集端(推送端)录像过程中,暂停录像、恢复录像,从开始录像,到录像结束均有event callback上来等。

这么看下来,录像模块2个接口确实远远不够。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win7提示文件太大无法放入回收站怎么办

我们经常会将没有的文件拖到回收站去,但是有时候会遇到文件拖进回收站时,系统提示该文件太大无法放进回收站,那么Win7提示文件太大无法放入回收站怎么办呢?今天小编就跟大家分享Win7系统提示文件太大无法放入回收站的解决方法。 Win7提示文…

内网无纸化会议/智慧教室实时同屏RTSP组播技术方案思考

内网环境下,为了满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,好多开发者希望有RTSP的技术方案,用于小并发场景,特别是在组网环境好的有线环境下,使用RTSP服务配合组播&#xff…

Windows平台真实时毫秒级4K H264/H265直播技术方案探讨

背景 在刚提出4K视频的时候,大多数人都觉得没有必要,4K的出现,意味着更高的硬件规格和传输要求,1080P看的很爽、很清晰,完全满足了日常的需求。随着电视的尺寸越来越大,原本1080P成像已经无法满足人们对于…

Win11怎么设置电脑开机密码和锁屏密码

相信很多用户都已经用上了微软公司为大家提供的全新Win11系统了,Win11与Win10系统有很大区别,不仅仅体现在界面设计和UI上面,狠多以前Win10用户固定的功能有些取消了,有些挪位置了,这让用惯了Win10系统的用户非常不习惯…

如何在Android实现录屏直播

许多开发者在做智慧教室同屏亦或会议同屏时,基于Andriod平台采集屏幕并编码推送,往往遇到各种各样的问题,以下就我们开发过程中的一些技术考量做个分享,权当抛砖引玉: 协议选择、数据来源和处理 1. 内网环境下&#…

Win11关机后自动开机怎么办 Win11关机后自动开机的解决方法

相信有不少小伙伴已经下载了Win11操作系统进行体验了,但有一些小伙伴碰到了关机之后电脑突然又自动开机的情况,那么碰到这个问题应该怎么办呢?下面就和小编一起来看看有什么解决方法吧。 Win11关机后自动开机的解决方法 1、我们可以先在搜索框中搜索并…

Windows平台RTMP/RTSP播放器如何实现实时音量调节

为什么要做实时音量调节 RTMP或RTSP直播播放音量调节,主要用于多实例(多窗口)播放场景下,比如同时播放4路RTMP或RTSP流,如果音频全部打开,几路audio同时打开,可能会影响用户体验,我…

TIM待办事项怎么删除 TIM删除待办事项的教程

TIM新建的待办事项没用的话或者搞错了,可以直接删掉。该怎么删除tim中的待办事项呢?下面我们就来看看详细的教程。 1、打开电脑上的个人头像。 TIM待办事项怎么删除? TIM删除待办事项的教程 2、点击待办,查看新建的待办事项。 TIM待办事项怎么删除…

Android同屏或摄像头RTMP推送常用的数据接口设计探讨

前言 好多开发者在调用Android平台RTMP推送或轻量级RTSP服务接口时,采集到的video数据类型多样化,如420sp、I420、yv12、nv21、rgb的,还有的拿到的图像是倒置的,如果开发者在上层转换后,传到底层编码处理,…

跨平台屏幕/摄像头RTMP推流模块设计要点

经常有企业或开发者有这样的疑惑,明明看到网上的demo,一个RTMP推送,五六个接口就搞定了,你们咋就搞得这么复杂? 以大牛直播SDK的(Github)Windows RTMP推流为例,我们的接口要100多个…

企业微信怎么下载资料 企业微信下载资料教程

打开电脑,点击桌面企业微信; 企业微信怎么下载资料?企业微信下载资料教程 进入企业微信, 点击微盘; 企业微信怎么下载资料?企业微信下载资料教程 之后,点击公司资料; 企业微信怎么下载资料?企业微信下…

Android平台Camera2数据如何对接RTMP推流到服务器

1. Camera2架构 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用的API1(android.hardware.camera)就被标为 Deprecated 了。 Camera API2相较于API1有很大不同, 并且API2是为了配合HAL3进行使用的, API2有很多API…

钉钉一个人怎么多部门 钉钉一个人加入多个部门的技巧

公司的组织机构总是会出现少几个人员,一个人身兼多职的情况,这对于我们设计审核流程的人来说是很多痛的一件事,会写好几种的条件判断,一有人离职了就得重新调整流程。如果一个人可以同时加入多个部门,这样这个问题就很…

IE浏览器下如何低延迟播放RTSP或RTMP流

首先,虽然本文是介绍IE浏览器下OCX控件播放RTSP或RTMP,但这种方式并不推荐,毕竟它只能用于IE浏览器环境下,局限太大,而且随着微软IE浏览器的更新,不确定后续支持情况。当然,话说回来&#xff0c…

Android、iOS平台RTMP/RTSP播放器实现实时音量调节

介绍移动端RTMP、RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对实时静音来说,播放…

千牛如何装修店铺 千牛装修店铺的教程

1、首先登录千牛卖家版,输入淘宝账号和密码。 2、在界面的横向工作栏中选择店铺管理,找到【店铺装修】选项。 千牛如何装修店铺?千牛装修店铺的教程 3、在左侧工具栏中选择需要修改的部分,目前可选择模块、配色、页头、页面、CSS等部分。…

Windows平台RTMP播放器/RTSP播放器如何在播放窗口添加OSD文字叠加

好多开发者在做Windows平台特别是单屏多画面显示时,希望像监控摄像机一样,可以在播放画面添加OSD台标,以实现字符叠加效果,大多开发者可很轻松的实现以上效果,针对此,本文以大牛直播SDK (Github…

6款真正好用的播放器推荐

GOM player GOM player 是一款本身装有视频播放所需的解码,及占用系统资源少,并且能以最优秀的画质来观看多种格式影片的播放程序。 可以支持播放大多数当前流行的视频格式,如:MP4、AVI、WMV、MKV、MOV、FLV 等),并且…

win7系统电脑运行速度的提升方法

win7系统是一款被大多数用户们认可的好用系统,在不断的对win7系统的使用中很多用户们都在寻找win7提高电脑运行速度的方法,今天小编就为大家带来了win7系统电脑运行速度的提升方法,让我们一起来看一下吧。 win7系统电脑运行速度的提升方法 …

Windows平台Unity3d下如何同时播放多路RTSP或RTMP流

好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品,我们认为当前最好的方式就是集…