iOS語音直播SDK及功能實現流程
語音直播場景的典型使用案例是同一房間內的成員,進行語音直播,有需要時也可進行實時語音通話。Zego 提供了對語音直播場景的支援,此文講述如何在iOS環境下利用即構SDK快速實現語音直播功能。
實現播放本地音訊、視訊檔案的功能(可用於播放背景音樂,播放MV,播放直播音效等場景),請下載 ZegoAudioRoom_MediaPlayer iOS,接入請參考:SDK整合指引。
功能實現流程
語音直播場景的使用場景主要有 2 種,在同一語音直播間內:
1、單主播語音直播,1 個主播發布語音,觀眾播放語音。
2、多主播語音直播,主播與觀眾連麥,進行實時語音互動。
以 2 人間的語音直播為例,流程如下:
單主播直播時,一個房間內僅有一個主播,不支援主播與觀眾的連麥互動。
請注意,下列操作前,請確保各成員均登入至同一房間。
1.1 主播推流
房間內成員均可推流,釋出直播。語音直播場景下,釋出直播應該使用手動釋出:
請注意:
如果使用者選擇自動釋出直播,登入成功後,SDK 會自動開始推流,使用者無需手動觸發。
AudioLive 中手動釋出直播相關原始碼片段演示如下,僅供參考:
ZegoAudioLiveViewController.m // 使用者主動點擊發布直播按鈕 - (IBAction)onPublishButton:(id)sender { if (self.isPublished) { // 停止直播 [[ZegoAudioLive api] stopPublish]; [self.publishButton setTitle:NSLocalizedString(@"開始直播", nil) forState:UIControlStateNormal]; self.isPublished = NO; // 刪除流 for (ZegoAudioStream *audioStream in self.streamList) { if ([audioStream.userID isEqualToString:[ZegoSettings sharedInstance].userID]) { [self.streamList removeObject:audioStream]; break; } } [self.tableView reloadData]; } else { // 手動釋出直播 BOOL result = [[ZegoAudioLive api] startPublish]; if (result == NO) { self.tipsLabel.text = NSLocalizedString(@"開播失敗,直播流超過上限", nil); } else { [self.publishButton setTitle:NSLocalizedString(@"停止直播", nil) forState:UIControlStateNormal]; self.publishButton.enabled = NO; } } }
1.2 觀眾拉流
房間內成員均可播放直播,登入房間成功後,SDK 會自動拉流播放直播。使用者無需手動觸發拉流。
1.3 結束音訊直播
音訊通話結束後的操作主要是登出房間、清理檢視或資料等。開發者可按需呼叫。
AudioLive 中結束音訊直播相關原始碼片段演示如下,僅供參考:
ZegoAudioLiveViewController.m // 關閉語音直播通話 ViewController - (IBAction)closeView:(id)sender { // 退出房間 [[ZegoAudioLive api] logoutRoom]; [self.streamList removeAllObjects]; [self dismissViewControllerAnimated:YES completion:nil]; }
2、多主播語音直播
多主播直播是主播與觀眾連麥,使觀眾也成為主播的互動功能,類似實時語音功能。
多主播直播的推流、拉流流程,同單主播一致,不再贅述。
但多主播比單主播多了一個信令互動的過程。開發者可以通過該過程,設計邏輯,決定是否允許房間內拉流的成員推流,成為主播。該信令互動由開發自行實現,SDK 僅提供推拉流的能力。
請注意,AudioLive 中沒有使用信令互動決定其他使用者是否可以推流。使用者進入房間即可自動或手動推流。