入门: 实现语音直播

新版开发者中心已经发布!如需访问最新版本,请点击  这里

售前咨询QQ群 276282334
售前咨询电话 400 632 6626

入门: 实现语音直播

在本页你可以了解如何使用 Agora SDK 实现语音直播。

环境准备

  1. 具体的开发环境要求、如何获取 App ID 以及 SDK 集成方法,详见 设置开发环境
  2. 参考 Agora iOS Voice Live Tutorial Sample App 了解如何从头创建一个示例项目。

快速开始

初始化 AgoraRtcEngineKit

进入语音直播频道之前,调用 sharedEngineWithAppId:delegate: 方法创建一个 AgoraRtcEngine 实例。

在该方法中:

  • 填入获取到的 App ID 。只有 App ID 相同的应用程序才能进入同一个频道进行互通。
  • 指定一个 delegate 对象。SDK 通过指定的 delegate 通知应用程序 SDK 的运行事件,如:加入或离开频道、新用户加入频道等。
//Objective-C
#import <AgoraAudioKit/AgoraRtcEngineKit.h>

...

- (void)initializeAgoraEngine {
  self.agoraKit = [AgoraRtcEngineKit sharedEngineWithAppId:@"Your App ID" delegate:self];
}
//Swift
import AgoraAudioKit

...

func initializeAgoraEngine() {
   agoraKit = AgoraRtcEngineKit.sharedEngine(withAppId: "Your App ID", delegate: self)
}

设置频道模式

创建实例后,调用 setChannelProfile: 方法设置频道模式。SDK 会根据所设置的频道模式使用不同的优化手段。

在该方法中,将频道模式设置为直播模式。直播模式适用于互动直播场景。频道内有主播和观众两种角色,主播收发语音消息,观众只收不发。

Note

  • 该方法必须加入频道前调用才生效。
  • 一个 Engine 只能设置一种频道模式。如果需要改变频道模式,请先调用 destroy 销毁后重新创建一个 Engine 实例,再调用该方法将频道设置为其他模式。
  • 不同的频道模式必须使用不同的 App ID。
//Objective-C
- (void)setChannelProfile() {
  [self.agoraKit setChannelProfile:AgoraChannelProfileLiveBroadcasting]
}
//Swift
func setChannelProfile() {
  agoraKit.setChannelProfile(.channelProfile_LiveBroadcasting)
}

设置用户角色

直播频道分主播和观众两种用户角色。在将频道模式为直播后,调用 setClientRole: 方法,并根据需要将用户设置为主播或观众。两者的区别在于:

  • 主播:可以收听和发布语音消息。根据应用程序的实现,还可以使用语音与观众互动、指定观众连麦。同一直播频道内,主播只能听到自己以及连麦主播的声音。
  • 观众:只能收听语音消息。根据应用程序的实现,还可以发布实时文字消息,与主播互动。同一直播频道内,所有观众都能听到主播以及连麦主播的声音。

Note

在加入直播频道前,务必调用该方法设置用户角色。直播过程中,用户也可以再次调用该方法,改变设置的用户角色。

//Objective-C
- (void)setClientRole() {
  [self.agoraKit setClientRole:AgoraClientRoleBroadcaster]
}
//Swift
func setClientRole() {
  agoraKit.setClientRole(.clientRole_Broadcaster)
}

加入频道

现在你可以加入语音直播频道了。 调用 joinChannelByToken:channelId:info:uid:joinSuccess: 方法加入频道。

在该方法中:

  • 传入能标识用户角色和权限的 Token。如果安全要求不高,也可以将值设为 null。Token 需要在应用程序的服务器端生成,具体生成办法,详见 密钥说明
  • 传入能标识频道的频道 ID。输入相同频道 ID 的用户会进入同一个频道。
  • 传入能标识用户身份的用户 UID。请确保频道内每个用户的 UID 必须是独一无二的。如果想要从不同的设备同时接入同一个频道,请确保每个设备上使用的 UID 是不同的。

Note

如果已在直播中,则必须调用 leaveChannel: 方法退出当前频道,才能进入下一个直播。

//Objective-C
- (void)joinChannel {
  [self.agoraKit joinChannelByToken:nil channelId:@"demoChannel1" info:nil uid:0 joinSuccess:^(NSString *channel, NSUInteger uid, NSInteger elapsed) {
    // Join channel "demoChannel1"
  }];
}
//Swift
func joinChannel() {
  agoraKit.joinChannel(by Token: nil, channelId: "demoChannel1", info:nil, uid:0){[weak self] (sid, uid, elapsed) -> Void in
      // Join channel "demoChannel1"
  }
}

结束语音直播

语音直播结束时,调用 leaveChannel: 方法离开频道。

不论当前是否还在直播频道中,调用该方法会把直播相关的所有资源释放掉。真正退出频道后,SDK 会触发 didLeaveChannelWithStats: 回调。

Note

如果在调用 leaveChannel: 方法后立即使用 destroy,则退出频道会被打断,SDK 也不会触发 didLeaveChannelWithStats: 回调。

//Objective-C
-(void)leaveChannel {
  [self.agoraKit leaveChannel:nil];
//Swift
func leaveChannel() {
    agoraKit.leaveChannel(nil)
}

结论

现在你可以开始互动直播了。

参考

在上述语音直播过程中,我们使用了 Agora SDK 提供的部分 API 功能:

在实现语音直播的过程中,你还可能需要使用以下功能:

更多功能实现,请参考 互动直播 API 中各 API 的功能及描述。

以上内容是否对您有帮助?