Windows平台RTMP/RTSP直播推送模块设计和使用说明

开发背景

好多开发者一直反馈,Windows平台,做个推屏或者推摄像头,推RTMP或者RTSP出去,不知道哪些功能是必须的,哪些设计是可有可无的,还有就是,不知道如何选技术方案,以下是基于我们设计的Windows平台RTSP、RTMP直播推送模块,设计和使用说明,供大家参考。

整体方案架构

Windows平台RTMP或RTSP推送,系采集端模块,主要完成,屏幕或者摄像头数据、麦克风或扬声器数据的采集,编码,然后按照特定格式打包,通过RTMP或者RTSP传输出去,实现直播目的。

对应设计架构图的“发布端”,编码后的音视频数据,按照协议打包后,推送到流媒体服务器(如RTMP服务器,自建服务,可以考虑SRS或者nginx服务器,如果是RTSP服务器,可以考虑苹果官方的darwin streaming server)。

这种方案的设计,一般是一对多设计模型,接收端接收RTMP或RTSP流,然后解析音视频数据,解码、同步音视频数据,并绘制,实现整体的直播解决方案。

以下是设计架构图:

?

模块设计

  • 自有框架,易于扩展,自适应算法让延迟更低、采集编码传输效率更高;
  • 所有功能以接口形式提供,所有状态,均有event回调,支持断网自动重连;
  • 模块化设计,可和大牛直播RTSP或RTMP直播播放模块组合实现流媒体数据转发、连麦、一对一互动等场景;
  • 推送叠加以层级模式提供,开发者可以自行组合数据源(如多摄像头/屏幕/水印叠加);
  • 支持外部YUV/RGB/H.264/AAC/SPEEX/PCMA/PCMU数据源接入;
  • 所有参数均可通过SDK接口单独设置,亦可通过默认参数,傻瓜式设置;
  • 推送、录像、内置轻量级RTSP服务模块完全分离,可单独使用亦可组合使用。

功能设计

  • [本地预览]支持摄像头/屏幕/合成数据实时预览功能;
  • [摄像头反转/旋转]支持摄像头水平反转、垂直反转、0°/90°/180°/270°旋转;
  • [摄像头采集]除常规YUV格式外,还支持MJPEG格式的摄像头采集;
  • [RTMP推流]超低延时的RTMP协议直播推流SDK(Windows 64位库支持RTMP扩展H.265推送);
  • [音视频加密]RTMP支持AES128/AES192/AES256/SM4(国密)逐帧数据加密;
  • [音视频加密]支持RTMP H.264/H.265加密;
  • [音视频加密]支持RTMP AAC/Speex/G711加密;
  • [视频格式]Windows支持H.264/H.265编码;
  • [音频格式]支持AAC编码和Speex编码;
  • [音频编码]支持Speex推送、Speex编码质量设置;
  • [软硬编码参数配置]支持gop间隔、帧率、bit-rate设置;
  • [软编码参数配置]支持软编码profile、软编码速度、可变码率设置;
  • [多实例推送]支持多实例推送(如同时推送屏幕/摄像头和外部数据);
  • [RTMP扩展H.265]Windows/Android推送SDK支持RTMP扩展H.265推送,Windows针对摄像头采集软编码,使用H.265可变码率,带宽大幅节省,效果直逼传统H.265编码摄像头;
  • [多分辨率支持]支持摄像头或屏幕多种分辨率设置;
  • [Windows推屏]支持屏幕裁剪、窗口采集、屏幕/摄像头数据合成等多种模式推送;
  • [事件回调]支持各种状态实时回调;
  • [水印]Windows平台支持文字水印、png水印、实时遮挡;
  • [复杂网络处理]支持断网重连等各种网络环境自动适配;
  • [动态码率]支持根据网络情况自动调整推流码率;
  • [实时静音]支持推送过程中,实时静音/取消静音;
  • [实时快照]支持推流过程中,实时快照;
  • [纯音频推流]支持仅采集音频流并发起推流功能;
  • [纯视频推流]支持特殊场景下的纯视频推流功能;
  • [降噪]支持环境音、手机干扰等引起的噪音降噪处理、自动增益、VAD检测;
  • [外部编码前视频数据对接]支持YUV数据对接;
  • [外部编码前音频数据对接]支持PCM对接;
  • [外部编码后视频数据对接]支持外部H.264数据对接;
  • [外部编码后音频数据对接]外部AAC/PCMA/PCMU/SPEEX数据对接;
  • [扩展录像功能]完美支持和录像SDK组合使用;
  • [服务器兼容]支持支持自建服务器(如Nginx、SRS)或CDN。

集成和使用说明

demo说明

  • Windows平台RTMP/RTSP直播推送模块对外提供C++/C#两套接口,对外提供32/64位库,C++和C#接口一一对应,C#接口比C++接口增加前缀NT_PB_。
  • WIN-PublisherSDK-CPP-Demo:推送端SDK对应的C++接口的demo;
  • WIN-PublisherSDK-CSharp-Demo:推送端SDK对应的C#接口的demo;
  • 推送端模块支持Win7及以上系统。
  • 本demo基于VS2013开发。

C++头文件:

  • [类型定义]nt_type_define.h
  • [Log定义]smart_log.h
  • [Log定义]smart_log_define.h
  • [音视频类型定义]nt_common_media_define.h
  • [base code定义]nt_base_code_define.h
  • [publisher接口]nt_smart_publisher_define.h
  • [publisher接口]nt_smart_publisher_sdk.h

C#头文件:

  • [Log定义]smart_log.cs
  • [Log定义]smart_log_define.cs
  • [base code定义]nt_base_code_define.cs
  • [publisher接口]nt_smart_publisher_define.cs
  • [publisher参数定义]nt_smart_publisher_sdk.cs

相关Lib:

  • SmartLog.dll
  • SmartLog.lib
  • SmartPublisherSDK.dll
  • SmartPublisherSDK.lib
  • avcodec-56.dll
  • avdevice-56.dll
  • avfilter-5.dll
  • avformat-56.dll
  • avutil-54.dll
  • postproc-53.dll
  • swresample-1.dll
  • swscale-3.dll

集成步骤

  1. 把lib目录下debug/release库拷贝到需要集成的工程对应的debug或release目录下(确保32位/64位库debug/release目录一一对应);

lib目录如下:

    1. 32位debug库:debug
    2. 32位release库:release
    3. 64位debug库:x64\debug
    4. 64位release库:x64\release

2. 相关cs头文件,加入需要集成的工程;

3. 在需要集成的工程,右键->Properties->Application->Assembly name,写入“SmartPulisherDemo”。

功能详解

考虑到Windows平台推送端SDK功能相对复杂,以问答式:

1视频采集设置

1. 屏幕和摄像头相互切换:用于在线教育或者无纸化等场景,推送或录像过程中,随时切换屏幕或摄像头数据(切换数据源),如需实时切换,点击页面“切换到摄像头”按钮即可;

2. 设置遮盖层,用于设定一个长方形或正方形区域(可自指定区域大小),遮盖不想给用户展示的部分;

3. 水印:添加PNG水印,支持推送或录像过程中,随时添加、取消水印;

4. 摄像头叠加到屏幕:意在用于同屏过程中,主讲人摄像头悬浮于屏幕之上(可指定叠加坐标),实现双画面展示,推送或录像过程中,可以随时取消摄像头叠加;

5. 屏幕叠加到摄像头:同4,效果展示,实际根据需求实现;

6. 采集桌面:可以通过点击“选择屏幕区域”获取采集区域,并可在采集过程中,随时切换区域位置,如不设定,默认全屏采集;

7. 使用DXGI采集屏幕,采集时停用Aero;

8. 采集窗口:可设定需要采集的窗口,窗口放大或缩小,推送端会自适应码率和分辨率;

9. 采集帧率(帧/秒):默认屏幕采集8帧,可根据实际场景需求设定到期望帧率;

10. 缩放屏幕大小缩放比:用于高清或超高清屏,通过设定一定的比例因子,缩放屏幕采集分辨率;

11. 采集摄像头:可选择需要采集的摄像头、采集分辨率、帧率、是否需要水平或者垂直反转、是否需要旋转;

追加提问:

问题[确认数据源]:采集桌面还是摄像头?如果桌面,全屏还是部分区域?

回答:

如果是摄像头:可以选择摄像头列表,然后分辨率、帧率。

如果是屏幕:默认帧率是5帧,可以根据实际场景调整,选取屏幕区域,可以实时拉取选择需要采集或录像区域;

如果是叠加模式:可选择摄像头叠加到屏幕,还是屏幕叠加到摄像头;

更高需求的用户,可以设置水印或应用层遮盖。

问题:如果是摄像头,采集到的摄像头角度不对怎么办?

回答:我们支持摄像头镜像和翻转设置,摄像头可通过SDK接口轻松实现水平/垂直翻转、镜像效果。

2 视频码率控制

我选可变码率还是平均码率?

回答:可变码率的优势在于,如果屏幕或摄像头变化不大,码率超低,特别是H.265编码,平均码率,码率比较均匀,需设置平均码率+最大码率,一般摄像头采集建议选择可变码率,屏幕采集选择平均码率,如需采用可变码率,请取消“使用平均码率”选项。

265编码还是H.264编码?

回答:Windows 64位库支持H.265编码,如果推RTMP流,需要服务器支持RTMP H.265扩展,播放器SDK,也需要同步支持RTMP H.265扩展播放。

如果是轻量级RTSP服务SDK对接的话,只需要播放器支持RTSP H.265即可。

如果推摄像头数据,建议采用可变码率+H.265编码。

如何设置码率参数更合理?

回答:

关键帧间隔:一般来说,设置到帧率的2-4倍,比如帧率20,关键帧间隔可以设置到40-80;

平均码率:可以点击“获取视频码率默认值”,最大码率是平均码率的2倍;

视频质量:如果使用可变码率,建议采用大牛直播SDK默认推荐视频质量值;

编码速度:如高分辨率,建议1-3,值越小,编码速度越快;

H.264 Profile:默认baseline profile,可根据需要,酌情设置High profile;

NOTE:点击“推送”或“录像”或启动内置RTSP服务SDK之前,请务必设置视频码率,如不想手动设置,请点击“获取视频码率默认值”!!!

3 音频采集设置

问答式:采集音频吗?如果采集,采集麦克风还是扬声器的,亦或混音?

回答:

如果想采集电脑输出的音频(比如音乐之类),可以选择“采集扬声器”;

如果想采集麦克风音频,可以选择“采集麦克风”,并选择相关设备;

如果两个都想采集,可以两个都选择,混音输出。

4 音频编码

问题:是AAC还是SPEEX?

回答:我们默认是AAC编码模式,如果需要码率更低,可以选择SPEEX编码模式,当然我们的AAC编码码率也不高。

5 音频处理

问题:我想过滤背景噪音怎么办?

回答:选中“噪音抑制”,“噪音抑制“请和“自动增益控制”组合使用,“端点检测(VAD)”可选设置。

问题:我想做一对一互动怎么办?

回答:选中“回音消除”,可以和“噪音抑制”、“自动增益控制”组合使用。

问题:我推送或者录像过程中,随时静音怎么办?

回答:推送过程中,随时选择或取消选择“静音”功能。

6多路推送

问题:我想同时推送到多个url怎么办(比如一个内网服务器,一个外网服务器)?

回答:同时填写多个url,然后点推送即可。

7 截图(快照)

问题:我想推送或者录像过程中,截取当前图像怎么办?

回答:那就设置好截图路径,推送或录像过程中,随时点击“截图”。

8 录像

问题:我还想录像,怎么办?

回答:设置录像文件存放目录,文件前缀、单个文件大小,是否加日期、时间,随时录制即可,此外,我们的SDK还支持录像过程中,暂停录像,恢复录像。

9 实时预览

问题:我还想看看视频特别是合成后的效果,怎么办?

回答:点击页面的“预览”按钮,就可以看到。

10 音视频加密

问题:我想我的数据走标准协议,但是加密流,怎么办?

回答:大牛直播SDK的RTMP推流模块,支持AES(AES128/AES192/AES256)和SM4加密。

接口调用时序(以C#为例)

如需下载demo源码工程,可以到 Github 下载 “Windows平台RTMP|RTSP推送SDK、内置RTSP服务SDK、录像SDK”,C++或者C#的都有。

1 初始化

NT_PB_Init

如需配置log路径,请在NT_PB_Init之前,做如下设置(目录可自行指定):

// 设置日志路径(请确保目录存在)

//String log_path = "D:\\pulisherlog";

//NTSmartLog.NT_SL_SetPath(log_path);

2 Open

NT_PB_Open

3 设置回调事件

  • NT_PB_SetEventCallBack:设置事件回调,如果想监听事件的话,建议调用Open成功后,就调用这个接口
  • NT_PB_SetVideoPacketTimestampCallBack:设置视频包时间戳回调
  • NT_PB_SetPublisherStatusCallBack:设置推送状态回调

4 设置屏幕裁剪

  • NT_PB_SetScreenClip:设置屏幕裁剪
  • NT_PB_MoveScreenClipRegion:移动屏幕剪切区域,这个接口只能推送或者录像中调用

5 屏幕选取工具

  • NT_PB_OpenScreenRegionChooseTool:打开一个屏幕选取工具的toolHandle
  • NT_PB_MoveScreenClipRegion:移动屏幕剪切区域,这个接口只能推送或者录像中调用
  • NT_PB_AllocateImage:分配Image, 分配后,SDK内部会初始化这个结构体, 失败的话返回NULL
  • NT_PB_FreeImage:释放Image, 注意一定要调用这个接口释放内存,如果在你自己的模块中释放,Windows会出问题的
  • NT_PB_CloneImage:克隆一个Image, 失败返回NULL
  • NT_PB_CopyImage:拷贝Image, 会先释放dst的资源,然后再拷贝
  • NT_PB_SetImagePlane: 给图像一个面设置数据,如果这个面已经有数据,将会释放掉再设置
  • NT_PB_LoadImage:加载PNG图片

6 设置屏幕采集参数

  • NT_PB_EnableDXGIScreenCapturer:允许使用DXGI屏幕采集方式, 这种方式需要win8及以上系统才支持
  • NT_PB_DisableAeroScreenCapturer:采集屏幕时停用Aero, 这个只对win7有影响,win8及以上系统, 微软已经抛弃了Aero Glass效果
  • NT_PB_CheckCapturerWindow:判断顶层窗口能否能被捕获, 如果不能被捕获的话返回NT_ERC_FAILED(采集窗口)
  • NT_PB_SetCaptureWindow:设置要捕获的窗口的句柄(采集窗口)

7 设置摄像头采集参数

  • NT_PB_StartGetVideoCaptureDeviceImage:获取句柄,且保存句柄
  • NT_PB_FlipVerticalVideoCaptureDeviceImage:上下反转设备图像
  • NT_PB_FlipHorizontalVideoCaptureDeviceImage:水平反转设备图像
  • NT_PB_RotateVideoCaptureDeviceImage:旋转设备图像, 顺时针旋转
  • NT_PB_GetVideoCaptureDeviceNumber:获取摄像头数量
  • NT_PB_GetVideoCaptureDeviceInfo:返回摄像头设备信息
  • NT_PB_GetVideoCaptureDeviceCapabilityNumber:返回摄像头能力数
  • NT_PB_GetVideoCaptureDeviceCapability:返回摄像头能力
  • NT_PB_DisableVideoCaptureResolutionSetting:

在多个实例推送多路时,对于一个摄像头来说,所有实例只能共享摄像头,那么只有一个实例可以改变摄像头分辨率,其他实例使用这个缩放后的图像;

在使用多实例时,调用这个接口禁止掉实例的分辨率设置能力.只留一个实例能改变分辨,如果不设置,行为未定义;

这个接口必须在 SetLayersConfig, AddLayerConfig 之前调用。

  • NT_PB_StartVideoCaptureDevicePreview: 启动摄像头预览
  • NT_PB_FlipVerticalCameraPreview:上下反转摄像头预览图像
  • NT_PB_FlipHorizontalCameraPreview:水平反转摄像头预览图像
  • NT_PB_RotateCameraPreview:旋转摄像头预览图像, 顺时针旋转
  • NT_PB_VideoCaptureDevicePreviewWindowSizeChanged:告诉SDK预览窗口大小改变
  • NT_PB_StopVideoCaptureDevicePreview:停止摄像头预览
  • NT_PB_GetVideoCaptureDeviceImage:调用这个接口可以获取摄像头图像
  • NT_PB_StopGetVideoCaptureDeviceImage:停止获取摄像头图像
  • NT_PB_SetVideoCaptureDeviceBaseParameter:设置摄像头信息
  • NT_PB_FlipVerticalCamera上下反转摄像头图像
  • NT_PB_FlipHorizontalCamera:水平反转摄像头图像
  1. NT_PB_RotateCamera:旋转摄像头图像, 顺时针旋转

8 视频合成图层类型

public enum NT_PB_E_LAYER_TYPE : int

{

NT_PB_E_LAYER_TYPE_SCREEN = 1,                  // 屏幕层

NT_PB_E_LAYER_TYPE_CAMERA = 2,                  // 摄像头层

NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE = 3,          // RGBA矩形

NT_PB_E_LAYER_TYPE_IMAGE = 4,                   // 图片层

NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME = 5,    // 外部视频数据层

NT_PB_E_LAYER_TYPE_WINDOW = 6, // 窗口层

}

9 音视频源类型

/*定义Video源选项*/

public enum NT_PB_E_VIDEO_OPTION : uint

{

NT_PB_E_VIDEO_OPTION_NO_VIDEO = 0x0,

NT_PB_E_VIDEO_OPTION_SCREEN = 0x1, // 采集屏幕

NT_PB_E_VIDEO_OPTION_CAMERA = 0x2, // 摄像头采集

NT_PB_E_VIDEO_OPTION_LAYER = 0x3,  // 视频合并,比如桌面叠加摄像头等

NT_PB_E_VIDEO_OPTION_ENCODED_DATA = 0x4, // 已经编码的视频数据,目前支持H264

NT_PB_E_VIDEO_OPTION_WINDOW = 0x5, // 采集窗口

}

/*定义Auido源选项*/

public enum NT_PB_E_AUDIO_OPTION : uint

{

NT_PB_E_AUDIO_OPTION_NO_AUDIO = 0x0,

NT_PB_E_AUDIO_OPTION_CAPTURE_MIC = 0x1,           // 采集麦克风音频

NT_PB_E_AUDIO_OPTION_CAPTURE_SPEAKER = 0x2,           // 采集扬声器

NT_PB_E_AUDIO_OPTION_CAPTURE_MIC_SPEAKER_MIXER = 0x3,    // 麦克风扬声器混音

NT_PB_E_AUDIO_OPTION_ENCODED_DATA = 0x4, // 编码后的音频数据,目前支持AAC, speex宽带(wideband mode)

}

10 视频编码接口

  • NT_PB_SetVideoEncoderType:设置编码类型, 当前支持h264和h265(注意:h265只有64位sdk库支持, 在32位库上设置会失败);
  • NT_PB_SetVideoQuality:设置视频质量, 范围[0-20], 默认是10, 值越小质量越好,但码率会越大
  • NT_PB_SetVideoQualityV2:设置视频质量, 范围[1-50], 值越小视频质量越好,但码率会越大. 请优先考虑默认值;
  • NT_PB_SetFrameRate:设置帧率
  • NT_PB_SetVideoMaxBitRate:设置最大视频码率, 单位kbps
  • NT_PB_AddVideoEncoderBitrateGroupItem:

* 在一些特殊场景下, 视频分辨率会改变, 如果设置一个固定码率的的话,当视频分辨率变大的时候会变的模糊,变小的话又会浪费码率

* 所以提供可以设置一组码率的接口,满足不同分辨率切换的需求

* 规则: 比如设置两组分辨率 640*360, 640*480, 那么当分辨率小于等于640*360时都使用640*360的码率,

* 当分辨率大于640*360且小于等于640*480时,就使用640*480的码率,如果分辨率大于640*480 那就使用640*480的分辨率

* 为了设置的更准确, 建议多划分几组, 让区间变小

* 调用这个接口每次设置一组,设置多组就调用多次

* item对应 NT_PB_VideoEncoderBitrateGroupItem

  • NT_PB_ClearVideoEncoderBitrateGroup:清除视频码率组
  • NT_PB_SetVideoKeyFrameInterval:设置关键帧间隔, 比如1表示所有帧都是关键帧,10表示每10帧里面一个关键帧,25表示每25帧一个关键帧
  • NT_PB_SetVideoEncoderProfile:设置H264 profile,1: H264 baseline(默认值). 2: H264 main. 3. H264 high
  • NT_PB_SetVideoEncoderSpeed:设置H264编码速度,speed: 范围是 1 到 6,  值越小,速度越快,质量也越差
  • NT_PB_SetVideoCompareSameImage:设置是否对图像进行相同比较,相同图像比较一般在采集桌面时有一定好处,可能能降低码率
  • NT_PB_SetVideoMaxKeyFrameInterval:设置视频最大关键帧间隔, 这个接口一般不使用,这里是用来配合SetVideoCompareSameImage接口的,比如开启图像比较后,SDK发现连续20s图像都是相同的,但播放端需要收到关键帧才能解码播放,所以需要一个限制

11 音频编码接口

  • NT_PB_GetAuidoInputDeviceNumber:获取系统音频输入设备数
  • NT_PB_GetAuidoInputDeviceName:获取音频输入设备名称
  • NT_PB_SetPublisherAudioCodecType:设置推送音频编码类型,type: 1:使用AAC编码, 2:使用speex编码, 其他值返回错误
  • NT_PB_SetPublisherSpeexEncoderQuality:设置推送Speex编码质量
  • NT_PB_SetAuidoInputDeviceId:设置音频输入设备ID
  • NT_PB_IsCanCaptureSpeaker:检查是否能捕获扬声器音频

12 音频处理接口

  • NT_PB_SetEchoCancellation:设置回音消除
  • NT_PB_SetNoiseSuppression:设置音频噪音抑制
  • NT_PB_SetAGC:设置音频自动增益控制
  • NT_PB_SetVAD:设置端点检测(Voice Activity Detection (VAD))

13 图层合成等接口

  • NT_PB_SetLayersConfig:设置视频合成层, 传入的是一个数组, 请正确填充每一层
  • NT_PB_ClearLayersConfig:清除所有层配置,注意这个接口只能在推送或者录像之前调用,否则结果未定义
  • NT_PB_AddLayerConfig: 增加层配置,注意这个接口只能在推送或者录像之前调用,否则结果未定义
  • NT_PB_EnableLayer:动态禁止或者启用层
  • NT_PB_UpdateLayerConfigV2:更新层相关配置, 注意不是层的所有字段都可以更新,只是部分可以更新,并且有些层没有字段可以更新,传入的参数,SDK只选择能更新的字段更新,不能更新的字段会被忽略
  • NT_PB_UpdateLayerRegion:修改图层
  • NT_PB_PostLayerImage:给index层投递Image数据,目前主要是用来把rgb和yuv视频数据传给相关层
  • NT_PB_SetParam:万能接口, 设置参数, 大多数问题, 这些接口都能解决
  • NT_PB_GetParam:万能接口, 得到参数, 大多数问题,这些接口都能解决

14 RTMP推送-设置AES/SM4加密

  • NT_PB_SetRtmpEncryptionOption:设置rtmp推送加密选项,可单独加密音频或视频
  • NT_PB_SetRtmpEncryptionAlgorithm:设置rtmp加密算法,encryption_algorithm: 加密算法, 当前支持aes和国标sm4. 1为aes, 2为sm4, 默认为aes
  • NT_PB_SetRtmpEncryptionKey:设置rtmp推送加密密钥,key:加密密钥,key_size: 如果加密算法是aes, key_size必须是16, 24, 32 这三个值, 其他返回错误; 如果加密算法是sm4, key_size必须是16, 其他值返回错误.
  • NT_PB_SetRtmpEncryptionIV:设置rtmp推送加密IV(初始化向量), 这个接口不调用的话, 将使用默认IV,iv: 初始化向量,iv_size: 当前必须是16, 其他值返回错误

15 RTMP推送-设置推送RTMP Url

NT_PB_SetURL:rtmp推送url设置

16 RTMP推送-启动推送RTMP流

NT_PB_StartPublisher

17 RTMP推送-停止推送RTMP流

NT_PB_StopPublisher:注意,此接口和NT_PB_StartPublisher配套使用

18 RTSP推送-设置传输方式(TCP/UDP)

NT_PB_SetPushRtspTransportProtocol:设置推送rtsp传输方式,一般服务器可同时支持RTSP TCP或UDP传输模式,部分服务器只支持TCP或UDP模式。其中,transport_protocol: 1表示UDP传输rtp包; 2表示TCP传输rtp包. 默认是1, UDP传输。

19 RTSP推送-设置推送RTSP Url

NT_PB_SetPushRtspURL:注意,RTSP推送时,确保服务器推送URL可用。

20 RTSP推送-启动推送RTSP流

NT_PB_StartPushRtsp

21 RTSP推送-启动推送RTSP流

NT_PB_StopPushRtsp:注意,此接口和NT_PB_StartPushRtsp配套使用。

22 RTMP/RTSP推送端录像

  • NT_PB_SetRecorderDirectory:设置本地录像目录, 必须是英文目录,否则会失败
  • NT_PB_SetRecorderFileMaxSize:设置单个录像文件最大大小, 当超过这个值的时候,将切割成第二个文件
  • NT_PB_SetRecorderFileNameRuler:设置录像文件名生成规则
  • NT_PB_StartRecorder:启动录像
  • NT_PB_PauseRecorder:暂停录像,is_pause: 1表示暂停, 0表示恢复录像, 输入其他值将调用失败
  • NT_PB_StopRecorder:停止录像

23 实时静音(实时调用)

NT_PB_SetMute:设置推送实时静音

24 快照(实时调用)

NT_PB_CaptureImage:推送或者录像过程中,实时快照

25 Close

NT_PB_Close:调用这个接口之后handle失效

26 Uninit

NT_PB_UnInit:这个是最后一个调用的接口

以上是我们的设计模块部分资料,感兴趣的开发者,可以酌情参考。

原文地址:https://www.cnblogs.com/daniulivesdk/p/12275976.html

时间: 2024-10-12 23:50:30

Windows平台RTMP/RTSP直播推送模块设计和使用说明的相关文章

如何设计一款跨平台低延迟的RTMP/RTSP直播播放器

开发背景 2015年,当我们试图在市面上找一款专供直播播放使用的低延迟播放器,来配合测试我们的RTMP推送模块使用时,居然发现没有一款好用的,市面上的,如VLC或Vitamio,说白了都是基于FFMPEG,在点播这块支持格式很多,也非常优异,但是直播这块,特别是RTMP,延迟要几秒钟,对如纯音频.纯视频播放,快速启播.网络异常状态处理.集成复杂度等各方面,支持非常差,而且因为功能强大,bug很多,除了行业内资深的开发者能驾驭,好多开发者甚至连编译整体环境,都要耗费很大的精力. 我们的直播播放器,

手机Android音视频采集与直播推送,实现单兵、移动监控类应用

恰逢2014 Google I/O大会,不难看出安卓在Google的推进以及本身的开放性作用下,已经快延生到生活的各个方面了,从安卓智能手机.平板,到可穿戴的Android Ware.眼镜.手表.再到Android汽车.智能家居.电视,甚至最近看新闻,日本出的几款机器人都是Android系统的,再把目光放回监控行业,传统监控中的移动终端设备,例如:单兵设备.手持设备.车载终端设备,包括家庭监控中用到的智能设备,都可以用Android系统替代了,不仅开发容易,而且易扩展,设备也更加智能了. 图 -

如何在App中实现IM功能之三快速实现离线消息推送模块——箭扣科技Arrownock

如何在App中实现IM功能 之三 快速实现离线消息推送模块 推送是社交功能里最常见的功能之一,许多使用IM++平台的开发者都会用到,本节我们将为大家带来如何使用IM++平台快速实现离线推送. 使用过Arrownock产品的开发者应该知道,如果要实现离线消息推送在Android设备上有4个步骤,iOS设备上有3个步骤. Android的步骤是: l anIM.connect,anPush.register,anPush.enable,anIM.bindAnPushService iOS的步骤是:

IOS平台的几个推送服务的对比

IOS平台的几个推送服务的对比 http://blog.163.com/[email protected]/blog/static/171370086201399113833299/ 最近研究了一下极光推送(JPush),百度云推送和个推在IOS平台的推送机制,做了一下对比.       首先, 介绍苹果推送通知服务的推送机制(APNS: Apple Push Notification Service):                                              

用nginx的Push_stream_module推送模块管理WebSocket长连接会不会限制WebSocket的双向通信的能力

最近项目在用nginx的Push_stream_module推送模块去实现服务器端向客户端信息的推送,本来只想实现这个单向通信的需求的,可是给客户端推送完消息之后,如果想让客户端给一个反馈,就没办法监听获取到客户端的反馈事件,并及时作出反应.后来知道push_stream_module管理长连接是基于pub/sub模式的,而且好像模块中也没有给出类似websocket中onmessage的API,是不是就是限制了webSocket全双工的通信能力,这点好像nodejs的socket.io做的就更

【netty】Netty系列之Netty百万级推送服务设计要点

1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类: Netty是否可以做推送服务器? 如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端? 使用Netty开发推送服务遇到的各种技术问题. 由于咨询者众多,关注点也比较集中,我希望通过本文的案例分析和对推送服务设计要点的总结,帮助大家在实际工作中少走弯路. 1.2. 推送服务

Netty系列之Netty百万级推送服务设计要点

原文:http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points 1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类: Netty是否可以做推送服务器? 如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端? 使用Netty开发

Netty系列之Netty百万级推送服务设计要点(转)

1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类: Netty是否可以做推送服务器? 如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端? 使用Netty开发推送服务遇到的各种技术问题. 由于咨询者众多,关注点也比较集中,我希望通过本文的案例分析和对推送服务设计要点的总结,帮助大家在实际工作中少走弯路. 1.2. 推送服务

实现手机直播推送、屏幕推送及录像功能RTMP推流组件之EasyRTMP-Android设置授权Key介绍

Real Time Messaging Protocol(RTMP)即实时消息传输协议,是 Adobe 公司开发的一个基于 TCP 的应用层协议,目前国内的视频云服务都是以 RTMP 为主要推流协议. 关于RTMP推流组件 目前市面上比较通用的RTMP推流组件EasyRTM就是一套调用简单.功能完善.运行高效稳定的RTMP推流功能组件,经过多年客户实战和线上运行打造,支持RTMP推送断线重连.环形缓冲.智能丢帧.网络事件回调,支持Windows.Linux.ARM.Android.iOS平台,支