如何实现简单粗暴靠谱的直播抓娃娃方案

市面上的娃娃机方案五花八门,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