如何實現簡單粗暴靠譜的直播抓娃娃方案

市面上的娃娃機方案五花八門,daniulive認為最簡單靠譜粗暴性價比的方案如下:

RTMP攝像機–>CDN–>daniulive player(專門針對直播娃娃機開通了“超低延遲”模式,公網實際延遲在200~400毫秒).

娃娃機抓取過程錄制方案:

行業內首屈一指的錄制方案,利用大牛直播播放端SDK,支持兩個攝像頭切換過程中(SmartPlayerSwitchUrl)錄制到同一個MP4文件,便于用戶分享抓取過程或進行申訴。

娃娃機視頻管理方案:

利用大牛直播的Windows播放器,同時多窗口播放rtmp攝像機數據,采用輪詢播放的方式,有設備發生重連或斷線之類,實時統計或者告警,保證前端rtmp攝像機的正常運轉。

相關播放器下載:

Windows平臺下載

Android平臺下載

iOS平臺下載

比快更快,效果輕松PK市面上“全球第一、國際領先”的各類技術方案。

大牛直播精英群:?294891451?大牛直播技術交流群:?499687479

最近接到最大的質疑是:為什么只有大牛直播推薦這種rtmp攝像頭方案?

回答:我們不是做云服務的,通俗點說,我們不是靠帶寬盈利的,我們期望客戶采用更穩定靠譜的技術方案,服務于更好的商業模式。

可能的其他方案:

PC機一臺或工業主板(android或linux),每個連接兩個攝像頭。

a) 操作娃娃機的用戶,走私有協議,來實現所謂低延遲抓取;

b) 其他觀看者,數據傳到特定服務器,走標準協議,延遲1-3秒。

為什么我們不采用這個方案:

  1. 碼率:以720*1280分辨率,20幀碼流為例,如果以android板件或windows系統編碼,再優化的算法也要占用1.2M碼流;如果走rtmp攝像頭,因為攝像頭本身數據壓縮率比較高,碼流大概占用在0.3至0.4M,也就是說,同一臺攝像機,同等分辨率,碼流只有windows或android采集攝像頭編碼的1/4~1/3。
  2. 成本決策:以1M碼流一天的流量費用1塊錢為例,1000個并發,走PC或工業主板,帶寬成本1000元,rtmp攝像機成本250~300元。
  3. 實際上下行帶寬:問題來了,上行1.2M的碼流好傳,還是0.3M更容易抗網絡抖動?下行呢?答案不言而喻。
  4. 平臺穩定性:娃娃機屬于24小時不間斷推送的,一般rtmp攝像機,可靠運行60天,出問題的概率遠小于PC或工業板件;
  5. 隔離效應:

a) 攝像機單獨部署,網線直接接交換機,每個模塊獨立,相互干擾的可能性為0;

b) PC或工控機連攝像頭,普通攝像頭(非工業級攝像頭)連續運行60天面臨功耗和穩定性問題;

c) PC或工控機,托兩路,上行帶寬2.4M,是不是能一直得到保障?如廠商考慮成本,順帶娃娃機控制模塊也跑在這個板件,相互影響的概率是不是增大了?

質疑1:別扯了,我可以用480*640分辨率啊,反正也能滿足娃娃機抓取要求,0.6M就夠了

回答:是的,兩路1.2M,如果rtmp,每一路大概0.13至0.2M,兩路0.3至0.4M,如果沒有用戶抓娃娃,場景不發生變化時候,你關注下哪怕是720*1280分辨率下,rtmp攝像頭實際占用碼流,小到嚇人。

質疑2:說了這么多,你們只能用rtmp攝像頭嗎?

回答:我們有提供android工業主板推兩路rtmp數據的方案,問題在于,這個帶寬成本和其他風險,你們愿意買單嗎?

附錄:如何簡單粗暴的測試Windows推送端和Windows播放器

附錄2:大牛直播Android工業板推兩路效果

啥也不說,直接看視頻演示

參考資料:https://github.com/daniulive/SmarterStreaming

如何基于ReplayKit實現低延遲rtmp推屏

目錄

1背景說明

2 iOS錄制屏幕三要素

3集成說明

4 SDK對接

5 SDK運行

6如何在移動端測試

7 Demo下載

1背景說明

在ReplayKit live未出來之前,iOS推流屏幕信息,必須使用實際或虛擬的AirPlay模式,使用起來非常不便,自iOS 10開始,蘋果在 iOS 9 的 ReplayKit 保存錄屏視頻的基礎上,增加了視頻流實時直播功能,iOS 11新增的ReplayKit2,進一步提升了Replaykit的易用性,可以對整個手機實現屏幕錄制,不再局限于特定App。ReplayKit的出現,讓直播更穩定、對設備性能要求低、并可直接嵌入主 app。

2?iOS錄制屏幕三要素

宿主App:被錄屏的應用(對應SmartiOSScreenPublisherV2)

容器App:本身與錄屏直播沒有直接關系, 僅僅提供錄屏App擴展的發布渠道(對應DaniuliveExtSetupUI)

錄屏App擴展:實現錄屏和直播的主要功能(對應DaniuliveExt)

3集成說明

添加擴展:File->New Target:

填寫Product Name:

配置好Product Name(記得勾選”Include UI Extension”)。點”Finish”后可以看到,工程多了兩個目錄,target也多了兩個,對應直播擴展和UI擴展:

APP內需要處理的兩個擴展:

Broadcast UI Extension:?提供類似用戶登錄、URL設置等配置選項的界面,本實例,由于我們在DaniuliveExtSetupUI中新創建了MainInterface.storyboard,將info.plist中的:

NSExtensionPrincipalClass

BroadcastSetupViewController

換成

NSExtensionMainStoryboard

MainInterface

Broadcast Upload Extension:接收圖像和音頻數據, 進行直播,集成daniulive推送SDK的工作主要在Upload擴展的代碼中進行,info.plist中添加音頻權限:

NSMicrophoneUsageDescription

請允許使用麥克風

如需生成后臺可直接啟用的錄制程序,info.plist中NSExtensionPointIdentifier改為:

NSExtensionPointIdentifier

com.apple.broadcast-services-upload

如需APP內部debug,查看SampleHandler里面的log,請設置為

NSExtensionPointIdentifier

com.apple.broadcast-services

4 SDK對接

導入DaniuliveSDK,對應“DaniuliveExt\daniuliveSDK”下的include和libs。

添加依賴庫:

編寫UI擴展(對應DaniuliveExtSetupUI):

//Called when the user has finished interacting with the view controller and a broadcast stream can start

– (void)userDidFinishSetup?{

// Broadcast url that will be returned to the application

NSURL *broadcastURL = [NSURL URLWithString: _rtmpUrl.text];

// Service specific broadcast data example which will be supplied to the process extension during broadcast

NSString *endpointURL = _rtmpUrl.text;

NSDictionary *setupInfo = @{@”endpointURL”?: endpointURL};

// Set broadcast settings

RPBroadcastConfiguration *broadcastConfig = [[RPBroadcastConfiguration alloc] init];

// Tell ReplayKit that the extension is finished setting up and can begin broadcasting

[self.extensionContext completeRequestWithBroadcastURL:broadcastURL broadcastConfiguration:broadcastConfig setupInfo:setupInfo];

}

– (void)userDidCancelSetup?{

// Tell ReplayKit that the extension was

// cancelled by the user

NSError * err = [NSError errorWithDomain:@”com.daniulive.ios”

code:-1

userInfo:nil];

[self.extensionContext cancelRequestWithError:err];

}

SampleHandler.m調用SDK即可:

[if !supportLists]1.?[endif]初始化并推送:

[self InitPublisher];

[self StartPublisher];

[if !supportLists]2.?[endif]實時數據回調處理:

– (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer

withType:(RPSampleBufferType)sampleBufferType {

switch (sampleBufferType) {

case RPSampleBufferTypeVideo:

{

NSLog(@”RPSampleBufferTypeVideo”);

if(_smart_publisher_sdk)

{

[_smart_publisher_sdk SmartPublisherPostVideoSampleBuffer:sampleBuffer];

}

}

break;

case RPSampleBufferTypeAudioApp:

NSLog(@”RPSampleBufferTypeAudioApp”);

if (s_headPhoneIn || s_isMicEnable == Mic_Disable)

{

if (CMSampleBufferDataIsReady(sampleBuffer) != NO)

{

if(_smart_publisher_sdk)

{

NSInteger type = 2;

[_smart_publisher_sdk SmartPublisherPostAudioSampleBuffer:sampleBuffer inputType:type];

}

}

}

break;

case RPSampleBufferTypeAudioMic:

NSLog(@”RPSampleBufferTypeAudioMic”);

if(_smart_publisher_sdk)

{

NSInteger type = 1;

[_smart_publisher_sdk SmartPublisherPostAudioSampleBuffer:sampleBuffer inputType:type];

}

break;

default:

break;

}

}

[if !supportLists]3.?[endif]退出:

[self StopPublisher];

[self UnInitPublisher];

NOTE:集成時DaniuliveExt請使用daniulive demo里面的app-name測試,如需授權,請聯系大牛直播SDK工作人員。

5 SDK運行

1. 先運行SmartiOSScreenPublisherV2,在移動端生成宿主app;

2. 再運行DaniuliveExtSetupUI,加載到宿主app;

3. 最后運行DaniuliveExt,加載到宿主app。

6如何在移動端測試

前臺啟動,設置推送的url,點擊“開始推屏”:

后臺啟動(推屏rtmp url可在前臺推送url頁面設置):

 

7 Demo下載

測試Demo可以到Github或者QQ群共享下載

Github:https://github.com/daniulive/SmarterStreaming/

CSDN Demo下載鏈接:?https://download.csdn.net/download/renhui1112/10313775

QQ群:

大牛直播精英群: 294891451

大牛直播技術交流群: 499687479

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