全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
视频直播

使用说明(含答题)

更新时间:2018-01-31 12:03:13

一、概念说明

码率控制

码率控制实际上是一种编码的优化算法,它用于实现针对网络情况对视频流码流大小的实时控制。那么它控制的目的是什么呢?我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之亦然;

视频丢帧

在发送视频帧的时候,如果网络非常差,导致视频帧堆积非常严重的时候,这个时候SDK通过丢弃视频帧,来缩短推流的延时;

动态库

动态库即动态链接库。与常用的静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。

注意:Xcode加载动态库需要加载在 Embedded Binaries 中,而不是 Linked Frameworks and Libraries

耳返

耳返是指主播可以通过耳机实时听到自己的声音,例如当主播带上耳机唱歌时,需要把握音调,这时就需要开启耳返功能。原因是声音通过骨骼传入耳朵和空气传入耳朵是有很大差异的,主播有需求直接听到观众端的效果。

混音

是把多种来源的声音,整合至一个立体音轨或单音音轨中,SDK支持音乐和人声的混音。

更多概念见文档

二、使用流程

2.1 基本使用流程

流程 : 用户APP向APPServer发起请求,获取推流URL -> AppServer根据规则拼接推流URL返回给APP -> APP赋值推流URL到推流SDK,使用推流SDK发起推流 -> 推流SDK将直播流推送到CDN

使用说明

2.2 直播答题使用流程

直播答题通过推流SDK、定制版OBS或者阿里云OpenAPI在直播流中插入SEI信息(题目信息),当播放器解析到SEI信息后,会回调给用户的App,此时用户就可以将题目的具体题目内容展示出来。具体流程如下:答题流程

备注:详细接入请查看 直播答题方案,按照说明提交工单申请接入。播放器接入见 答题播放器。OBS推流详见 OBS使用说明

三、SDK集成

SDK信息

您可以在阿里云官网更新直播SDK

下载后的SDK目录结构如下:

  • 依赖播放器版本

包含 AlivcLibRtmp.framework ALivcLivePusher.framework两个推流动态库和 AlivcLibFaceResource.bundle人脸资源库,同时包含 AliyunPlayerSDK.framework播放器动态库和 AliyunLanguageSource.bundle播放器资源库

SDK带播放器目录

  • 不依赖播放器版本包含 AlivcLibRtmp.framework ALivcLivePusher.framework两个推流动态库和 AlivcLibFaceResource.bundle人脸资源库

SDK不带播放器目录

注1:推流SDK中包含背景音乐相关功能。如果需要使用该功能,需要使用依赖播放器SDK的版本;如果不需要背景音乐功能,则使用不依赖播放器SDK的版本即可

注2:AlivcLibFaceResource.bundle是人脸识别资源文件,如果需要使用美颜的人脸识别高级功能,则必须导入开发工程;反之则不需要

注3:每个版本均包含 arm 和 arm&simulator 两套SDK,arm仅支持真机调试。arm&simulator支持真机+模拟器调试。项目在release上线的时候必须使用arm版本。

系统要求

  • SDK支持iOS 8.0及以上版本系统
  • 硬件CPU支持ARMv7、ARMv7s、ARM64

开发环境

  • SDK编译环境Xcode 8.0及以上版本
  • Xcode运行环境OS X 10.10 及以上版本

SDK集成

手动导入

示例开发环境为Xcode9.0

  1. 新建SDK测试工程 Single View App – DemoPush。

  2. AlivcLibRtmp.frameworkAlivcLivePusher.framework两个动态库、 AlivcLibFaceResource.bundle一个人脸识别资源库以及AliyunPlayerSDK.frameworkAliyunLanguageSource.bundle两个播放器库拖入您的Xcode工程中。

    SDK带播放器拖入

    若不需要依赖播放器SDK的版本,则只需要将AlivcLibRtmp.frameworkAlivcLivePusher.framework两个动态库以及AlivcLibFaceResource.bundle人脸识别资源库拖入您的工程即可。SDK不带播放器拖入

    后续将以依赖播放器版本的SDK进行演示。

  3. 按图示勾选 Copy item if neededSDK导入配置

  4. 导入SDK成功之后,在Xcode – General – Embedded Binaries添加SDK依赖SDK依赖

    添加依赖成功后如图所示SDK依赖成功

  5. 在Build Phases - Copy Bundle Resources 中添加资源文件依赖。(资源文件添加成功后,才能使用人脸识别相关功能。否则调用人脸识别相关接口无效)bundle依赖

  6. 在Building Setting – Enable Bitcode 修改为 NO配置依赖bitcode

  7. 在Info.plist文件中添加麦克风和摄像头权限 Privacy - Microphone Usage Description Privacy - Camera Usage Description配置InfoPlist

  8. 配置iOS 开发证书,选择测试真机,点击Run,提示Buidling Success,SDK添加成功。

Cocoapods

1.修改Podfile

  • 依赖播放器版本

添加如下语句加入你的Podfile文件中。

  1. pod 'AlivcLivePusherWithPlayer'
  2. pod 'AliyunPlayer_iOS/AliyunPlayerSDK'

pod带播放器

  • 不依赖播放器版本

添加如下语句加入你的Podfile文件中。

  1. pod 'AlivcLivePusher'

pod不带播放器

2.执行pod install

  1. pod install :每次你编辑你的Podfile(添加、移除、更新)的时候使用

3.关闭bitcode

podBitcode

4.配置Info.plist

podInfo

四、SDK使用

以上述刚刚创建的DemoPush为例,集成一套最简单的推流功能。

引用头文件

ViewController.mm 中引用头文件 #import <AlivcLivePusher/AlivcLivePusherHeader.h>

推流参数配置 - AlivcLivePushConfig

推流初始参数配置类,需要在推流开始前预设好。

初始化

  1. AlivcLivePushConfig *config = [[AlivcLivePushConfig alloc] init];

  1. AlivcLivePushConfig *config = [[AlivcLivePushConfig alloc] initWithResolution:AlivcLivePushResolution540P];

设置参数值

AlivcLivePushConfig初始化完成后,每个属性参数会有一个对应的默认值,默认值和参数范围参考API文档或注释。如果需要修改特定的推流配置参数值,只需要修改对应的属性值即可,如:

1. 修改分辨率:
  1. config.resolution = AlivcLivePushResolution540P;//默认为540P,最大支持720P,兼容V1.3.0版1080P

综合手机性能和网络带宽要求,建议用户采用540P(主流移动直播App基本都采用540P)

2. 修改帧率:
  1. config.fps = AlivcLivePushFPS20; //建议用户使用20fps
3. 码控参数设置:

SDK提供三种推流模式供开发者选择。修改qualityMode参数,具体值如下:

  • AlivcLivePushQualityModeResolutionFirst 清晰度优先模式。SDK内部会对码率参数进行配置,优先保障推流视频的清晰度。

  • AlivcLivePushQualityModeFluencyFirst 流畅度优先模式。SDK内部会对码率参数进行配置,优先保障推流视频的流畅度。

  • AlivcLivePushQualityModeCustom 自定义模式。SDK会根据开发者设置的码率进行配置。

  1. config.qualityMode = AlivcLivePushQualityModeResolutionFirst// 清晰度优先模式

选择 清晰度优先 与 流畅度优先 模式时,以下三个参数的码率设置无效。自定义模式下才会生效。以下三个参数用来控制在不同网速下的实时码率调整,提高直播的流畅度。目标码率为当用户网络情况非常好的时候,码率会调整到目标码率,用来提高直播清晰度;最小码率为当用户网络情况非常差时,码率会逐步向最低码率调整,以提高直播流畅度;初始码率为开始直播时的码率。

  1. config.targetVideoBitrate = 1200; // 目标码率1200Kbps
  2. config.minVideoBitrate = 400; // 最小码率400Kbps
  3. config.initialVideoBitrate = 900; // 初始码率900Kbps

自定义模式建议参数:

分辨率 targetVideoBitrate minVideoBitrate initialVideoBitrate
360p 800 200 600
480p 1000 300 700
540p 1200 400 900
720p 1500 600 1200

综合手机性能和网络带宽要求,建议用户采用540P(主流移动直播App基本都采用540P)

4. 修改关键帧间隔
  1. config.videoEncodeGop = AlivcLivePushVideoEncodeGOP_2;//默认值为2

关键帧间隔越大,延时越高。建议设置为1-2。

5. 修改重连重连时长:
  1. config.connectRetryInterval = 2000; // 单位为毫秒,重连时长2s

重连间隔设置不小于1秒,建议使用默认值即可。

6. 修改预览镜像:
  1. config.previewMirror = false; // 关闭预览镜像
7. 修改美颜开关、美颜模式:

设置美颜模式为 AlivcLivePushBeautyModeProfessional 人脸识别高级模式时。调整人脸识别相关参数接口才会生效。否则无效。此模式下需要添加 AlivcLibFaceResource.bundle 人脸资源库到开发工程中。

  1. config.beautyOn = false; // 关闭美颜
  1. config.beautyMode = AlivcLivePushBeautyModeProfessional;专业版(支持人脸识别美白、瘦脸、大眼、收下巴、腮红)
8. 修改美颜参数:

建议用户找UED同事配合调整出最符合自己应用风格的美颜参数。

  1. // 美白范围0-100
  2. config.beautyWhite = 70;
  3. // 磨皮范围0-100
  4. config.beautyBuffing = 40;
  5. // 红润设置范围0-100
  6. config.beautyRuddy = 40;
  7. /* 下面接口是人脸识别下的高级美颜参数 */
  8. // 大眼设置范围0-100
  9. config.beautyBigEye = 30;
  10. // 瘦脸设置范围0-100
  11. config.beautyThinFace = 40;
  12. // 收下巴设置范围0-100
  13. config.beautyShortenFace = 50;
  14. // 腮红设置范围0-100
  15. config.beautyCheekPink = 15;

根据我们经验,以下几组美颜效果比较理想,可参考使用:

档位 磨皮 美白 红润 大眼 瘦脸 收下巴 腮红
一档 40 35 10 0 0 0 0
二档 60 80 20 0 0 0 0
三档 50 100 20 0 0 0 0
四档 40 70 40 30 40 50 15
五档 70 100 10 30 40 50 0
9. 修改推流方向:

设置推流方向,可设置竖屏、左横屏和右横屏。

  1. config.orientation = AlivcLivePushOrientationLandscapeLeft; // Left横屏推流

添加水印

注:水印图片必须为png格式图片,最多支持三张水印。输入的水印的coordX,coordY,width值为相对于值。

例如:coordX=0.1;coordY=0.1;width=0.3。在不同推流分辨率的情况下,水印图片的左顶点均在推流图像中心点,水印图片的宽度与推流图像的宽度的比恒等于1:2,水印图片的高度按照水印图片的真实宽高与输入的width值等比缩放。

  1. NSString *watermarkBundlePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"watermark"] ofType:@"png"];
  2. [config addWatermarkWithPath: watermarkBundlePath
  3. watermarkCoordX:0.1
  4. watermarkCoordY:0.1
  5. watermarkWidth:0.3];

推流类 - AlivcLivePusher

初始化

  1. 声明属性

    1. @property (nonatomic, strong) AlivcLivePusher *livePusher;
  2. 初始化

    推流类AlivcLivePusher的init需要传入一个AlivcLivePushConfig推流配置对象。

    注意:AlivcLivePusher目前不支持多实例,所以一个init必须对应有一个destory!

    1. self.livePusher = [[AlivcLivePusher alloc] initWithConfig:config];
  3. 注册回调

    推流回调,分为三种:Info、Error、Network。Info主要做提示和状态检测使用;Error为错误回调;Network主要为网络相关,注册delegate可接受对应的回调。

    1. [self.livePusher setInfoDelegate:self];
    2. [self.livePusher setErrorDelegate:self];
    3. [self.livePusher setNetworkDelegate:self];

开始预览

livePusher对象初始化完成之后,可以进行开始预览操作。预览时需要传入摄像头预览的显示view(继承自UIView)。

  1. [self.livePusher startPreview:self.view];

开始推流

监听回调,收到预览成功回调之后才可以推流。

监听 AlivcLivePusherInfoDelegateonPreviewStarted 回调,预览成功后可以开始推流。

  1. [self.livePusher startPushWithURL:@"推流测试地址(rtmp://......)"];

  1. [self.livePusher startPushWithURLAsync:@"推流测试地址(rtmp://......)"];

赋值正确的测试推流地址,开始推流后,用播放器(阿里云播放器、ffplay、VLC等)播放拉流地址,播放成功,则推流成功。

停止推流

推流状态下可调用停止推流,完成后推流停止。

  1. [self.livePusher stopPush];

停止预览

在预览状态下才可以调用停止预览,注:正在推流状态下,调用停止预览无效。

  1. [self.livePusher stopPreview];

预览停止后,预览画面定格在最后一帧。

销毁推流

  1. [self.livePusher destory];
  2. self.livePusher = nil;

销毁推流后,推流停止,预览停止,预览画面移除。AlivcLivePusher相关的一切资源销毁。

重新推流

推流状态下或者接收到所有Error相关回调状态下可调用重新推流, 且Error状态下只可以调用此接口(或者reconnectPushAsync重连)或者调用destory销毁推流。

  1. [self.livePusher restartPush];

完成后重新开始推流,重启ALivcLivePusher内部的一切资源,包括预览、推流等等restart。

推流重连

推流状态下或者接收到AlivcLivePusherNetworkDelegate相关的Error回调状态下可调用此接口, 且Error状态下只可以调用此接口(或者restartPush重新推流)或者调用destory销毁推流。

  1. [self.livePusher reconnectPushAsync];

完成后推流重连,重新链接推流RTMP。

其他推流相关设置

1. 暂停推流

正在推流状态下可调用暂停推流。

  1. [self.livePusher pause];

暂停推流后,视频预览和视频推流保留在最后一帧,音频推流继续。

2. 恢复推流

暂停状态下可调用恢复推流。

  1. [self.livePusher resume];

恢复推流后,音视频预览与推流恢复正常。

3. 设置静音

开始预览之后均可调用静音。

  1. [self.livePusher setMute:isMute?true:false];

静音后音乐声音和人声输入都会静音,完成后,播放端播放有画面无声音。要单独设置音乐或人声静音可以通过混音音量设置接口来调整。

修改码率范围

  1. [self.livePusher setTargetVideoBitrate:800];
  2. [self.livePusher setMinVideoBitrate:200]

其他摄像头设置

摄像头相关设置,在开始预览之后可调用,包括推流状态、暂停状态、重连状态等等。未开始预览状态下调用如下接口无效。

1. 旋转摄像头

切换前后摄像头

  1. [self.livePusher switchCamera];
2. 闪光灯开关
  1. [self.livePusher setFlash:false]; // 关闭闪光灯

注:前置摄像头无法开启闪关灯。

3. 变焦

变焦(摄像头缩放),传入参数为正数,则方法焦距,传入参数为负数则缩小焦距。

  1. CGFloat max = [_livePusher getMaxZoom];
  2. [self.livePusher setZoom:MIN(1.0, max)]; // 变焦焦距 1.0
4. 手动聚焦

手动聚焦需要传入两个参数:1.point 对焦的点(需要对焦的点的坐标);2.autoFocus 是否需要自动对焦,该参数仅对调用接口的该次对焦操作生效。后续是否自动对焦沿用上述自动聚焦接口设置值。

  1. [self.livePusher focusCameraAtAdjustedPoint:CGPointMake(50, 50) autoFocus:true];
5. 自动聚焦
  1. [self.livePusher setAutoFocus:false]; // 关闭自动聚焦
6. 美颜开关
  1. [self.livePusher setBeautyOn:true]; // 开启美颜
7. 美颜参数调整
  1. // 美白范围0-100
  2. self.livePusher.beautyWhite = 70;
  3. // 磨皮范围0-100
  4. self.livePusher.beautyBuffing = 40;
  5. // 红润设置范围0-100
  6. self.livePusher.beautyRuddy = 40;
  7. /* 下面接口是人脸识别下的高级美颜参数 */
  8. // 大眼设置范围0-100
  9. self.livePusher.beautyBigEye = 30;
  10. // 瘦脸设置范围0-100
  11. self.livePusher.beautyThinFace = 40;
  12. // 收下巴设置范围0-100
  13. self.livePusher.beautyShortenFace = 50;
  14. // 腮红设置范围0-100
  15. self.livePusher.beautyCheekPink = 15;
8. 镜像设置

镜像相关接口有两个,PushMirror推流镜像和PreviewMirror预览镜像。PushMirror设置仅对播放画面生效,PreviewMirror仅对预览画面生效,两者互不影响。

  1. [self.livePusher setPushMirror:false];// 关闭推流镜像
  2. [self.livePusher setPreviewMirror:false];// 关闭预览镜像

BGM(背景音乐)

以下背景音乐相关接口在开始预览之后才可调用

1. 开始播放背景音乐
  1. [self.livePusher startBGMWithMusicPathAsync:musicPath];
停止播放背景音乐
  1. [self.livePusher stopBGMAsync];

若当前正在播放BGM,并且需要切换歌曲,只需要调用开始播放背景音乐接口即可,无需停止当前正在播放的背景音乐。

2. 暂停播放背景音乐

背景音乐开始播放后才可调用此接口

  1. [self.livePusher pauseBGM];
3. 恢复播放背景音乐

背景音乐暂停状态下才可调用此接口

  1. [self.livePusher resumeBGM];
4. 设置循环播放模式
  1. [self.livePusher setBGMLoop:true];// 开启循环播放
5. 设置降噪开关
  1. [self.livePusher setAudioDenoise:true];// 降噪打开

打开降噪后,将对采集到的声音中非人声的部分进行过滤处理。

6. 设置耳返开关
  1. [self.livePusher setBGMEarsBack:true];// 打开耳返

打开耳返后,插入耳机将在耳机中听到主播说话声音。关闭后,插入耳机无法听到人声。未插入耳机的情况下,耳返不起作用。

7. 调整背景音乐音量
  1. [self.livePusher setBGMVolume:50];// 设置背景音乐音量为50
8. 调整人声采集音量
  1. [self.livePusher setCaptureVolume:50];;// 设置人声采集音量为50

在线问答,推送问题或者答案消息

1.插入SEI消息

通过在直播流里面插入SEI信息,播放器解析SEI实现直播答题功能。

推流状态下,才能调用此接口。

  1. [self.livePusher sendMessage:@"题目信息" repeatCount:100 delayTime:0 KeyFrameOnly:false];

接口参数注释:

msg : 需要插入流的SEI消息体,建议是json格式。阿里云播放器SDK可收到此SEI消息。

repeatCount : 发送的帧数。设置100,则在接下去的100帧均插入此SEI消息。

delayTime : 延时多少毫秒发送

KeyFrameOnly : 是否只发关键帧

其他状态信息获取、版本号获取、Log设置

AlivcLivePusher初始化完成后,均可调用如下接口

1. 获取是否正在推流
  1. BOOL isPushing = [self.livePusher isPushing]; // YES:正在推流 NO:未推流
2. 获取推流地址
  1. NSString *pushURLString = [self.livePusher getPushURL];
3. 获取推流性能调试信息

推流性能参数具体参数和描述参考API文档或者接口注释。

  1. AlivcLivePushStatsInfo *info = [self.livePusher getLivePushStatusInfo];
4. 获取版本号
  1. NSString *sdkVersion = [self.livePusher getSDKVersion];
5. Log设置
  1. [self.livePusher setLogLevel:(AlivcLivePushLogLevelDebug)]; // 设置SDK输出Log级别为Debug级别

辅助功能

添加DebugView

SDK提供UI调试工具DebugView。用户可以打开方便在APP界面进行调试。DebugView为可移动的全局悬浮窗。添加后始终悬浮在视图的最上层。内含推流日志查看、推流性能参数实时检测、推流主要性能折线图表等debug功能。

注意:在您的release版本下, 不要调用添加DebugView的接口!

  1. [AlivcLivePusher showDebugView];

五、异常及特殊场景处理

收到AlivcLivePusherErrorDelegate

  • onSystemError:

    系统级错误,需要退出直播

  • onSDKError:

    当出现SDK错误时,有两种处理方式,选择其一即可:1.销毁当前直播,重新创建 2.调用 restartPush/restartPushAsync 重启AlivcLivePusher

  • 需要特别处理APP没有麦克风权限和没有摄像头权限的回调

错误描述 errorCode
APP没有麦克风权限 268455940
APP没有摄像头权限 268455939

收到AlivcLivePusherNetworkDelegate

  • onNetworkPoor & onNetworkRecovery

    onNetworkPoor : 收到SDK网速慢回调时,说明当前网络对于推流的支撑度不足,此时推流仍在继续。没有中断。

    onNetworkRecovery : 网络恢复。

  • onConnectFail & onReconnectError & onSendDataTimeout

    当出现网络相关错误时,有两种处理方式,选择其一即可:1.销毁当前推流重新创建 2.调用 reconnectAsync 进行重连,建议重连之前先做网络检测和推流地址检测

  • onReconnectStart & onReconnectSuccess

    SDK内部每次自动重连或者开发者主动调用 reconnectAsync 重连接口的情况下,会回调 onReconnectStart 重连开始。每次重连都会对 RTMP 进行重连链接。注意:RTMP链接建立成功之后会回调 onReconnectSuccess 此时只是链接建立成功,并不意味着可以推流数据成功,如果链接成功之后,由于网络等原因导致推流数据发送失败,SDK会在继续重连

收到AlivcLivePusherBGMDelegate背景音乐的错误回调

  • onOpenFailed

    背景音乐开启失败,检查背景音乐开始播放接口所传入的音乐路径与该音乐文件是否正确,重新播放 startBGMWithMusicPathAsync

  • onDownloadTimeout

    背景音乐播放超时,多出现于播放网络URL的背景音乐,提示主播检查当前网络状态,然后重新播放 startBGMWithMusicPathAsync

网络中断

  • 短时间断网和网络切换

    短时间的网络波动或者网络切换,一般情况下,中途断网时长在AlivcLivePushConfig设置的重连超时时长和次数范围之内,SDK会进行自动重连,重连成功之后将继续推流。若使用阿里云播放器,建议播放器收到超时通知 AliVcMediaPlayerPlaybackDidFinishNotification 之后短暂延时5s后再做重连操作。

  • 长时间断网

    断网时长在AlivcLivePushConfig设置的重连超时时长和次数范围之外的情况下,SDK自动重连失败,此时会回调 onReconnectError:error: 在等到网络恢复之后调用 reconnectAsync接口进行重连。同时播放器也要配合做重连操作。

    1. 建议在SDK外部做网络监测
    2. 主播端和播放端在客户端无法进行直接通信,需要配合服务端使用。比如主播端断网,服务端会收到CDN的推流中断回调,此时可以推动给播放端,主播推流中断,播放端在作出相应处理。恢复推流同理。
    3. 阿里云播放器重连需要先停止播放在开始播放。调用接口顺序 stop -> prepare -> play 。示例如下:

      1. [self.mediaPlayer stop];
      2. AliVcMovieErrorCode err = [self.mediaPlayer prepareToPlay:[NSURL URLWithString:@"播放地址"]];
      3. if(err != ALIVC_SUCCESS) {
      4. NSLog(@"play failed,error code is %d",(int)err);
      5. return;
      6. }
      7. [self.mediaPlayer play];

      注:关于播放器详见:阿里云播放器使用说明

退后台 & 接听电话

SDK内部已经做好退后台相关处理,用户无需做操作。退入后台SDK默认继续推流音频,视频保留在最后一帧。用户需要在APP的Capablities中打开Background Mode选项,选中Audio,AirPlay and Picture in Picture。保证APP退后台可以正常采集音频;如图:退后台配置

如果退后台时不需要保持音频推流,即退入后台停止推流,返回前台继续推流。则可以根据下面两种方式实现。

  1. 退后台设置为静音模式。调用 setMute 接口 (建议方式)

    或者

  2. 退后台停止推流,调用 stopPush 接口,回到前台继续推流,调用 startPushWithURL 或者 startPushWithURLAsync 接口。注意:在此方式下,退后台必须监听 UIApplicationWillResignActiveNotification 和 UIApplicationDidBecomeActiveNotification 两者。其他方式存在风险,例如:

  1. - (void)addNotifications {
  2. [[NSNotificationCenter defaultCenter] addObserver:self
  3. selector:@selector(applicationWillResignActive:)
  4. name:UIApplicationWillResignActiveNotification
  5. object:nil];
  6. [[NSNotificationCenter defaultCenter] addObserver:self
  7. selector:@selector(applicationDidBecomeActive:)
  8. name:UIApplicationDidBecomeActiveNotification
  9. object:nil];
  10. }
  11. - (void)applicationWillResignActive:(NSNotification *)notification {
  12. [self.livePusher stopPush];
  13. }
  14. - (void)applicationDidBecomeActive:(NSNotification *)notification {
  15. [self.livePusher startPushWithURLAsync:pushURL];
  16. }

播放外部音效

如果您需要在推流页播放音效音乐等, 由于SDK暂时与 AudioServicesPlaySystemSound 有冲突,建议使用 AVAudioPlayer,并且在播放后需要更新设置 AVAudioSession,AVAudioPlayer播放音效示例代码:

  1. - (void)setupAudioPlayer {
  2. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"];
  3. NSURL *fileUrl = [NSURL URLWithString:filePath];
  4. self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:nil];
  5. self.player.volume = 1.0;
  6. [self.player prepareToPlay];
  7. }
  8. - (void)playAudio {
  9. self.player.volume = 1.0;
  10. [self.player play];
  11. // 配置AVAudioSession
  12. AVAudioSession *session = [AVAudioSession sharedInstance];
  13. [session setMode:AVAudioSessionModeVideoChat error:nil];
  14. [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
  15. [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionMixWithOthers error:nil];
  16. [session setActive:YES error:nil];
  17. }

推流过程中改变view的大小

请遍历您在调用 startPreview 或者 startPreviewAsync 接口时赋值的UIView。更改改预览view的所有subView的frame。例如:

  1. [self.livePusher startPreviewAsync:self.previewView];
  2. for (UIView *subView in [self.previewView subviews]) {
  3. // ...
  4. }

iPhoneX适配

一般场景下,预览view的frame设置为全屏可以正常预览,由于iPhoneX屏幕比例的特殊性,所以iPhoneX下预览view设置为全屏大小会有画面拉伸的现象。建议iPhoneX不要使用全屏大小的view来预览。

码率设置

SDK内部有动态变化码率策略,码率预设值在AlivcLivePushConfig中修改。根据产品需求对于视频分辨率、视频流畅度、视频清晰度的要求不同,对应设置的码率范围也不同,具体参考如下:

  1. 视频清晰度:推流码率越高,则视频清晰度越高。所以推流分辨率越大,所需要设置的码率也就越大,这样可以保证视频清晰度。
  2. 视频流畅度:推流码率越高,所需要的网络带宽越大。所以在较差的网络环境下,设置较高的码率有可能影响视频流畅度。

六、注意事项

  1. SDK大小 : 10.7MB
  2. 集成SDK后,ipa包增加大小 :约 2.8MB 左右
  3. 适配机型 :iPhone5s及以上版本,iOS8.0及以上版本
  4. 推流SDK V1.3升级至V3.0、连麦SDK升级至推流V3.0,请下载升级说明文档
本文导读目录