很多开发者提到,拉取的摄像机(一般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拉流录像功能需要考虑的几点设计,遗憾的是,好多开发者之关注第六条,前五条或多或少的忽略了,除了常规的接口设计之外,录像功能需要考虑的其他因素还很多,后续有机会再做进一步分享。

RTSP/RTMP播放端录像不可忽视的几个设计要点相关推荐

  1. Windows平台RTSP|RTMP播放端SDK集成说明

    2.1 demo说明 大牛直播SDK提供C++/C#两套接口,对外提供32/64位debug/release库,C++和C#接口一一对应,C#接口比C++接口增加前缀NT_PB_: WIN-Playe ...

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

    好多开发者认为,无论是RTSP/RTMP推送端还是RTSP/RTMP播放端,涉及到录像,只要2个接口足矣:开始录像.停止录像. 实际场景下,一个好的录像模块,2个接口远远不够, 本文以大牛直播SDK( ...

  3. Flutter下实现低延迟的跨平台RTSP/RTMP播放

    为什么要用Flutter? Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来 ...

  4. Windows平台RTMP、RTSP播放器录像模块精细化控制

    技术背景 上篇文章,我们介绍了Unity平台RTMP.RTSP播放器录像功能,这里,我们详细的介绍下,做个RTSP或RTMP拉流端录像模块有哪些需要考虑的技术点? 在我们常规的考量,RTMP或RTSP ...

  5. 如何实现Android端获取RTSP|RTMP流转推RTMP

    技术背景 最近不少开发者找到我们,他们在做智能家居等传统行业时,希望实现在Android板件拉取本地的RTSP或RTMP流,然后对外推送RTMP出去,亦或内部启个轻量级RTSP服务,提供个对外对接的媒 ...

  6. RTSP播放器或RTMP播放器常用的事件回调设计

    很多开发者在开发RTSP或RTMP播放器的时候,不晓得哪些event回调事件是有意义的,针对此,我们以大牛直播SDK(github)的Android平台RTSP/RTMP直播播放端为例,简单介绍下常用 ...

  7. 跨平台低延迟的RTMP/RTSP直播播放器设计实现

    开发背景 2015年,当我们试图在市面上找一款专供直播播放使用的低延迟播放器,来配合测试我们的RTMP推送模块使用时,居然发现没有一款好用的,市面上的,如VLC或Vitamio,说白了都是基于FFMP ...

  8. Unity下如何实现RTMP或RTSP流播放和录制

    技术背景 在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前,我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程: 通过Native RTSP或RTSP直播播放SDK回 ...

  9. 拉取数据_如何拉取公网RTSP/RTMP流在内网多客户端播放

    好多情况下,一路RTSP或RTMP网络流过来后,想共享给更多局域网内的客户端播放,一般来说,有两种设计方案: 1. 拉取的RTSP或RTMP流,回调后的数据,转推RTMP服务器,内网部署一台RTMP服 ...

最新文章

  1. WebService 用户名密码验证
  2. r语言 plot_R和Python的特点对比,这样你就知道该怎么选择了
  3. [USACO4.2]Drainage Ditches
  4. 第十一期:数据挖掘其实就是为了干这四种事?
  5. 中关村windows11 32位专业版镜像v2021.07
  6. appbarlayout 折叠后 不允许滑动_还在纠结要不要建阳光房?看看可折叠阳光房,或许你就能做选择了...
  7. [ZT]javascript window resize 窗口改变事件
  8. Luogu2617 Dynamic Rankings
  9. linux 下的绘图软件Visio
  10. php 判断微信浏览器支付宝,PHP判断是手机端-PC端-微信浏览器
  11. python教程111-Python多条件计数与求和
  12. android excel在线,Excel在线编辑
  13. 关于nba的html设计,关于NBA篮球网页的设计毕业设计论文.pdf
  14. Android App Widget中如何调用RemoteView中的函数
  15. 【Electron-vue】构建桌面应用(25)- Ubuntu安装deb文件任务栏不显示应用图标
  16. 【SSD测试专题四】Performance
  17. python数组定义_python定义数组
  18. CentOS7 yum安装tomcat
  19. 异常System.Threading.Thread.AbortInternal
  20. pyinstaller打包py文件生成的exe报错Failed to execute script

热门文章

  1. 存储过程循环遍历一个月的每一天的函数_JavaScript 循环:如何处理 async/await
  2. python创建数组与列表_python基础(三):数组和列表
  3. footer.php置底,CSS五种方式实现Footer置底
  4. Java GregorianCalendar getActualMinimum()方法与示例
  5. mysql 创建分区表_Mysql分区表及自动创建分区Partition
  6. c++ abort 函数_C ++中带有示例的abort()函数
  7. Ubuntu apt-get和pip源更换
  8. Matlab制作朱利表
  9. android字符串复制到剪贴板
  10. Linux(CentOS 7)安装docker