深圳外贸网站制作价格,个人可以注册企业邮箱吗,辽宁城市建设职业技术学院教务网站,网站后台改版面好多开发者认为#xff0c;无论是RTSP/RTMP推送端还是RTSP/RTMP播放端#xff0c;涉及到录像#xff0c;只要2个接口足矣#xff1a;开始录像、停止录像。
实际场景下#xff0c;一个好的录像模块#xff0c;2个接口远远不够#xff0c; 本文以大牛直播SDK#xff08;…好多开发者认为无论是RTSP/RTMP推送端还是RTSP/RTMP播放端涉及到录像只要2个接口足矣开始录像、停止录像。
实际场景下一个好的录像模块2个接口远远不够 本文以大牛直播SDKGithubRTSP/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个接口确实远远不够。