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:這個是最后一個調用的接口

以上是我們的設計模塊部分資料,感興趣的開發者,可以酌情參考。

污污直播app-污污直播破解版永久免费版