免费的网站申请,泰州网站整站优化,北京想象力网站建设,wordpress菜单分类目录很多开发者提到#xff0c;拉取的摄像机#xff08;一般RTSP流#xff09;或RTMP流#xff0c;如果需要录制#xff0c;需要考虑哪些因素#xff0c;本文以大牛直播SDK的Windows平台拉流端录像为例#xff08;github#xff09;#xff0c;做个简单的介绍#xff1a;…很多开发者提到拉取的摄像机一般RTSP流或RTMP流如果需要录制需要考虑哪些因素本文以大牛直播SDK的Windows平台拉流端录像为例github做个简单的介绍
1. 基础文件名设定
一般来说本地录像的话不可能每个文件单独命名这个时候需要考虑如文件名前缀、文件名是否添加日期、是否添加时间几个因素以C#为例具体接口定义如下 /*如果三项都是0的话将不能启动录像*/[StructLayoutAttribute(LayoutKind.Sequential)]public struct NT_SP_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}/** 设置录像文件名生成规则*/[DllImport(SmartPlayerSDK.dll, EntryPoint NT_SP_SetRecorderFileNameRuler, CallingConvention CallingConvention.StdCall)]public static extern UInt32 NT_SP_SetRecorderFileNameRuler(IntPtr handle, ref NT_SP_RecorderFileNameRuler ruler);
2. 设置录像目录、单个录像文件大小
这个不再赘述设置录像目录是录像的基础操作单个文件大小设定可以更精细的控制单个文件size一般建议单个文件不要过大单次录制超过设定的size将自动切分保存到另外一个新的文件。 /** 设置本地录像目录, 必须是英文目录否则会失败*/[DllImport(SmartPlayerSDK.dll)]public static extern UInt32 NT_SP_SetRecorderDirectory(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] String dir);/** 设置单个录像文件最大大小, 当超过这个值的时候将切割成第二个文件* size: 单位是KB(1024Byte), 当前范围是 [5MB-800MB], 超出将被设置到范围内*/[DllImport(SmartPlayerSDK.dll)]public static extern UInt32 NT_SP_SetRecorderFileMaxSize(IntPtr handle, UInt32 size);
3. 音频转码后录像
一般来说AAC格式更通用设置录像时音频转AAC编码的开关, 可以把比如speex, pcmu, pcma转aac的后再录像确保录制文件的audio格式更通用转码会有一定的资源消耗。 /** 设置录像时音频转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);
4. 更精细的音视频录像控制纯音频、纯视频录制
这两组接口设置的意义在于, 有些场景下可能不想录制视频只想录音频或是只录制视频、不录制音频通过开放此类接口设定让开发者操作更灵活。 /** 设置是否录视频默认的话如果视频源有视频就录没有就没得录, 但有些场景下可能不想录制视频只想录音频所以增加个开关* * 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);
5. 容易被忽略的callback事件
第五条录像状态反馈是好多开发者容易遗忘的录像回调状态可以很方便的告知上层开发者什么时候开启了录像什么时候结束了录像什么时候写入了新的录像文件这样便于上层逻辑开发人员对录制好的文件进行二次编辑或处理。 /** 设置录像回调接口*/[DllImport(SmartPlayerSDK.dll)]public static extern UInt32 NT_SP_SetRecorderCallBack(IntPtr handle,IntPtr call_back_data, SP_SDKRecorderCallBack call_back);
6. 开始录像/停止录像
不再赘述有了以上5条的设计第六条只要上层开发者按部就班的调用就好了。 /** 启动录像*/[DllImport(SmartPlayerSDK.dll)]public static extern UInt32 NT_SP_StartRecorder(IntPtr handle);/** 停止录像*/[DllImport(SmartPlayerSDK.dll)]public static extern UInt32 NT_SP_StopRecorder(IntPtr handle);
总结
以上是一个友好的RTSP、RTMP拉流录像功能需要考虑的几点设计遗憾的是好多开发者之关注第六条前五条或多或少的忽略了除了常规的接口设计之外录像功能需要考虑的其他因素还很多后续有机会再做进一步分享。