直播加速
联系电话:(010) 6072 8829
技术QQ群:697918347
English
直播加速API
直播加速API

SDK接入工程

SDK包含TTTRtcEngineKit.frameworkTTTPlayerKit.framework,两个framework只支持真机,不支持模拟器

  1. 把SDK导入工程
  2. 设置Bitcode为NO
  3. 设置后台音频模式
  4. 导入系统库

    • libxml2.tbd
    • libc++.tbd
    • libz.tbd
    • ReplayKit.framework
    • CoreTelephony.framework
    • SystemConfiguration.framework

上行加速必须开启上行加速设置音频高音质选项

一. 接口说明

初始化SDK

1. + (instancetype)sharedEngineWithAppId:(NSString *)appId delegate:(id<TTTRtcEngineDelegate>)delegate

2. + (instancetype)sharedEngineWithAppId:(NSString *)appId 
                                delegate:(id<TTTRtcEngineDelegate>)delegate 
                              enableChat:(BOOL)enableChat 
                            enableSignal:(BOOL)enableSignal

初始化 TTTRtcEngineKit 为一个单例。使用 TTTRtcEngineKit,必须先调用该接口进行初始化。 通过指定的 delegate 通知应用程序引擎运行时的事件。delegate 中定义的所有方法都是可选实现的。

参数 描述
appId 连麦平台分配,用于区分不同的客户和应用,在同一个连麦平台内保证唯一
TTTRtcEngineDelegate SDK回调代理
enableChat 打开发送聊天功能
enableSignal 打开发送信令功能

设置频道模式

- (int)setChannelProfile:(TTTRtcChannelProfile)profile;

profile当前有三种模式,上行加速请使用直播模式

模式 Enum参数 描述
通信 TTTRtcChannelProfileCommunication 上行加速忽略
直播 TTTRtcChannelProfileLiveBroadcasting 用于直播
游戏 TTTRtcChannelProfileGame_FreeMode 上行加速忽略

开启视频模式

- (int)enableVideo;

Note:可以在加入频道前或者通话中调用,在加入频道前调用,则自动开启视频模式,在通话中调用则由音频模式切换为视频模式。

设置用户角色

- (int)setClientRole:(TTTRtcClientRole)role withKey:(NSString *)permissionKey;

role说明

角色 Enum参数 描述
主播 TTTRtcClientRoleAnchor 仅可用于直播模式下
副播 TTTRtcClientRoleBroadcaster 上行加速忽略
观众 TTTRtcClientRoleAudience 上行加速忽略

设置视频编码属性

- (int)setVideoProfile:(TTTRtcVideoProfile)profile swapWidthAndHeight:(BOOL)swapWidthAndHeight;

profile说明

Enum参数 分辨率 帧率 带宽kbps
TTTRtcVideoProfile120P 160x120 15 65
TTTRtcVideoProfile180P 320x180 15 140
TTTRtcVideoProfile240P 320x240 15 200
TTTRtcVideoProfile360P 640x360 15 400
TTTRtcVideoProfile480P 640x480 15 500
TTTRtcVideoProfile720P 1280x720 15 1130
TTTRtcVideoProfile1080P 1920x1080 15 2080
TTTRtcVideoProfileDefault 640x360 15 400

该方法设置视频编码属性(Profile)。每个属性对应一套视频参数,如分辨率、帧率、码率等。 当设备的摄像头不支持指定的分辨率时,SDK 会自动选择一个合适的摄像头分辨率,但是编码分辨率仍然用 setVideoProfile() 指定的。 该方法仅设置编码器编出的码流属性,可能跟最终显示的属性不一致,例如编码码流分辨率为 640x480,码流的旋转属性为 90 度,则显示出来的分辨率为竖屏模式。

参数 描述
profile Profile对应一套视频参数,如分辨率、帧率、码率
swapWidthAndHeight 是否交换宽和高,在竖屏采集时需交换宽高

配置旁路直播推流

- (int)configPublisher:(TTTPublisherConfiguration *)config;

该方法用于在加入频道前为引擎创建一份推流设置。在你调用本 API 之前: 请确保已联系3T开通旁路直播推流功能。

请确保用户已经调用 setClientRole() 且已将用户角色设为主播,主播必须在加入频道前调用本 API

config说明

@interface TTTPublisherConfiguration : NSObject

@property (assign, nonatomic) NSInteger bitrate;       // 旁路直播输出码流的码率。默认设置为 500 Kbps
@property (copy, nonatomic) NSString *publishUrl;      // 合图推流地址
@property (assign, nonatomic) BOOL isPureAudio;        // 推送纯音频流

@end

设置服务器地址

- (void)setServerIp:(NSString*)ip port:(int)port;
参数 描述
ip ip地址或域名
port 端口

Note:如不需要指定特定的服务器,请不要调用该接口

是否启用上行加速

上行加速必须调用该方法,并且在setHighQualityAudioParametersWithFullband之前调用 objc - (void)enableUplinkAccelerate:(BOOL)enable;

设置音频高音质选项

上行加速必须调用该方法

- (int)setHighQualityAudioParametersWithFullband:(BOOL)fullband stereo:(BOOL)stereo fullBitrate:(BOOL)fullBitrate;
参数 描述
fullband 全频带编解码器(48kHz采样率)
stereo 立体声编解码器
fullBitrate 高码率模式,建议仅在纯音频模式下使用

Note:开启高音质,需要全部的参数设置为YES。高音质会占用较大的带宽

加入通话频道

- (int)joinChannelByKey:(NSString *)channelKey
            channelName:(NSString *)channelName
                    uid:(int64_t)uid
            joinSuccess:(void(^)(NSString *channel, int64_t uid, NSInteger elapsed))joinSuccessBlock;

该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。 使用不同 App ID 的应用程序是不能互通的。如果已在通话中,用户必须调用 leaveChannel 退出当前通话,才能进入下一个频道。 SDK 在音频通话中使用 iOS 系统的 AVAudioSession 共享对象进行录音和播放,用户对该对象的操作可能会影响 SDK 的音频相关功能。

参数 描述
channelKey 此为程序生成的Channel Key,直接传nil
channelName 标识通话的频道名称,长度在64字节以内的字符串
uid 用户ID
joinSuccessBlock 用户加入成功回调

Note:同一个频道里不能出现两个相同的 uid,如果使用 joinSuccessBlock,就不会响应加入房间的代理回调

离开频道

- (int)leaveChannel:(void(^)(TTTRtcStats *stat))leaveChannelBlock;

当调用 joinChannelByKey API 方法后,必须调用 leaveChannel 结束通话,否则无法开始下一次通话。 调用 leaveChannel,没有副作用。该方法会把会话相关的所有资源释放掉。该方法是异步操作,调用返回时并没有真正退出频道。在真正退出频道后,SDK 会触发 didLeaveChannelWithStats 回调。

参数 描述
leaveChannelBlock 成功离开频道的回调

Note: 使用leaveChannelBlock,就不会响应退出房间的代理回调

启动本地视频预览

- (int)startPreview;

Note:需要上传本地视频建议开启本地预览。该方法可重复调用,需要对应调用stopPreview,否则无法关闭预览

停止本地视频预览

- (int)stopPreview;

设置本地视频显示属性

- (int)setupLocalVideo:(TTTRtcVideoCanvas*)local;

该方法设置本地视频显示信息。应用程序通过调用此接口绑定本地视频流的显示视窗(view),并设置视频显示模式。 在应用程序开发中,通常在初始化后调用该方法进行本地视频设置,然后再加入频道。如果需要解除绑定,把参数设置为nil

local说明:

@interface TTTRtcVideoCanvas : NSObject
// 视频显示窗口。SDK不维护view的生命周期,应用程序应保证view在通话中是有效的。
@property (strong, nonatomic) TImageView *view;            
@property (assign, nonatomic) TTTRtcRenderMode renderMode; // 视频显示模式
@property (assign, nonatomic) int64_t uid;                 // 用户ID

@end

切换摄像头

- (int)switchCamera;

Note: 第一次默认开启前摄像头,中间切换摄像头操作之后,SDK内部会保留当前设置的值,不会在下次加入房间重置为前摄像头

二. 回调说明

发生错误回调

- (void)rtcEngine:(TTTRtcEngineKit *)engine didOccurError:(TTTRtcErrorCode)errorCode;

errorCode说明:

Enum参数 描述
TTTRtcErrorNoError 没有错误
TTTRtcErrorInvalidChannelName 无效的房间名称
TTTRtcErrorEnter_TimeOut 超时,10秒未收到服务器返回结果
TTTRtcErrorEnter_Failed 无法连接服务器
TTTRtcErrorEnter_VerifyFailed 验证码错误
TTTRtcErrorEnter_BadVersion 版本错误
TTTRtcErrorEnter_Unknown 未知错误
TTTRtcErrorNoAudioData 长时间没有上行音频数据
TTTRtcErrorNoVideoData 长时间没有上行视频数据
TTTRtcErrorUnknown 未知错误

该回调有joinChannel不成功触发

参数 描述
engine TTTRtcEngineKit对象
errorCode 错误原因

加入频道成功回调

- (void)rtcEngine:(TTTRtcEngineKit *)engine didJoinChannel:(NSString*)channel withUid:(int64_t)uid elapsed:(NSInteger) elapsed;

该回调有joinChannel成功触发

参数 描述
engine TTTRtcEngineKit对象
channel 频道名
uid 用户ID
elapsed 从joinChannel开始到该事件产生的延迟(毫秒)

网络连接丢失回调

- (void)rtcEngineConnectionDidLost:(TTTRtcEngineKit *)engine;

Note:在房间内发生断网,上报该回调

网络异常断开后,重连服务器失败

- (void)rtcEngineReconnectServerTimeout:(TTTRtcEngineKit *)engine;

Note:收到此回调,需要手动调用离开房间

网络异常断开后,重连服务器成功

- (void)rtcEngineReconnectServerSucceed:(TTTRtcEngineKit *)engine;

成功离开频道

- (void)rtcEngine:(TTTRtcEngineKit *)engine didLeaveChannelWithStats:(TTTRtcStats*)stats;

stats说明

@interface TTTRtcStats : NSObject
@property (assign, nonatomic) NSUInteger duration;        // 通话时长,累计值
@property (assign, nonatomic) NSUInteger txBytes;         // 发送字节数,累计值
@property (assign, nonatomic) NSUInteger rxBytes;         // 接收字节数,累计值
@property (assign, nonatomic) NSUInteger txAudioKBitrate;
@property (assign, nonatomic) NSUInteger rxAudioKBitrate;
@property (assign, nonatomic) NSUInteger users;
@end

本地音频统计

- (void)rtcEngine:(TTTRtcEngineKit *)engine localAudioStats:(TTTRtcLocalAudioStats*)stats;

stats说明:

@interface TTTRtcLocalAudioStats : NSObject

@property (assign, nonatomic) NSUInteger encodedBitrate;  // 编码的码率(kbps)
@property (assign, nonatomic) NSUInteger sentBitrate;     // 发送的码率(kbps)
@property (assign, nonatomic) NSUInteger receivedBitrate; // 接收的码率(kbps)
@property (assign, nonatomic) NSUInteger captureDataSize; // push数据量

@end

本地视频统计

- (void)rtcEngine:(TTTRtcEngineKit *)engine localVideoStats:(TTTRtcLocalVideoStats*)stats;

stats说明:

@interface TTTRtcLocalVideoStats : NSObject

@property (assign, nonatomic) NSUInteger encodedBitrate;  // 编码的码率(kbps)
@property (assign, nonatomic) NSUInteger sentBitrate;     // 发送的码率(kbps)
@property (assign, nonatomic) NSUInteger sentFrameRate;   // 发送的帧率(fps)
@property (assign, nonatomic) NSUInteger receivedBitrate; // 接收的码率(kbps)
@property (assign, nonatomic) float sentLossRate;         // 发送的丢包率
@property (assign, nonatomic) int bufferDuration;         // 视频缓冲区大小

@end