前言:
最近公司的項目中加入中直播這部分的功能,現在的直播平台真的很多很多,以前在朋友圈看到過這張圖片,沒辦法一次性給大家看,就只能這樣截成幾張給大家看看。其實按照我自己的看法,現在的直播已經沒辦法做成一個主打的業務去做,能做成的只是你APP傳播信息一個手段而已,把它當做一個工具去使用,而不是把它當做一個主打的業務去掙錢反而會好一點,這東西現在只能燒錢吧!當然這只是我自己的看法而已!說說正題網易SDK!
網易視頻雲提供直播推流端和播放器SDK,包括iOS/Android/PC/Web平台,可幫助網易視頻雲用戶直接使用音視頻采集、編碼、推流,播放等功能,通過接口,快速和自身業務應用集合,實現音視頻采集和業務邏輯的對接、整合。網易可以使用自己的郵箱登錄開發者平台,這個就不 比多說了!順便再提一句,網易的SDK要使用雲直播,是有一個星期的試用期的。點播也是有一個星期的試用期的,額...一個星期也可以讓你做很多事的!
iOS 直播推流 SDK 開發指南 大家看仔細了,這里的是推流的開發指南!也就是發起直播用的!
iOS 播放器 SDK 開發指南 這個是播放端的開發指南!
網易直播SDK的文檔感覺寫的是比較好的,具體的怎么集成大家看繼承文檔就是了,我們說說一些要注意的地方。我們先說發起直播的時候的一些注意事項吧。
推流端注意點:
一:在Demo中的這個方法是用來申請權限的:
//應用程序需要事先申請音視頻使用權限 - (BOOL)requestMediaCapturerAccessWithCompletionHandler:(void (^)(BOOL, NSError*))handler { }
這個方法我的建議是你要進入開始直播界面之前去申請,不然你在這個界面申請的時候,你要是開啟了相機預覽功能,就是Demo中的下面這句代碼開啟的:
//打開攝像頭預覽 [_mediaCapture startVideoPreview:self.localPreview];
開啟預覽功能就會有一個黑屏界面,你需要再次推出進入才能正常使用相機和麥克風,所以最上面說的權限的申請你最好下載進入這個界面之前。
二:在推流端有這樣一個通知:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(onStartLiveStream:) name:LS_LiveStreaming_Started object:_mediaCapture];
當收到這個通知的時候才是真正開始直播的時候,不是說你進入之后,初始化直播就開始了,等真正收到這個通知才是開始直播了,還有就是只有等直播開始了你才能去關閉直播!這點主要是體現在后台的數據回調上。
三:記得要釋放通知
-(void)dealloc { [[NSNotificationCenter defaultCenter]removeObserver:self name:LS_LiveStreaming_Finished object:_mediaCapture]; [[NSNotificationCenter defaultCenter]removeObserver:self name:LS_LiveStreaming_Started object:_mediaCapture]; [[NSNotificationCenter defaultCenter]removeObserver:self name:LS_LiveStreaming_SDK_dealloc object:_mediaCapture]; [[NSNotificationCenter defaultCenter]removeObserver:self name:LS_LiveStreaming_Bad object:_mediaCapture]; }
四:最后一點,別把推流地址搞錯了:
推流地址也是rtmp開頭的,不過推流的是rtmp://p ,不是拉流當中的 rtmp://v ,一個是P一個是V,使用的時候注意!
拉流時候的注意事項:
大家要是看網易的拉流地址的話是分了三種了,可能有些同學就迷糊了,不知道自己到底該用哪一個!下面的這一張圖就可以幫大家解決這個煩惱:
然后大家再看看這個直播的延時情況,SDK播放的過程中是需要初始化的這個初始化也是需要時間的,大家心里有個底,一般也就這么長時間,時間太長會給用戶造成不好的體驗!
一:注意播放端和推流端SDK里面靜態文件的沖突:
這里一提你就清楚了,網易的播放端和推流端的SDK集成里面有些個靜態文件也就是.a文件是沖突的,在集成的時候一定要注意不要重復的拉入,而且這里還有一點,支付寶和網易的SDK靜態文件也是有沖突的,我是刪除了網易的和支付寶的沖突靜態文件,是沒有什么問題的!
二:一般的觀看直播的界面是有觀看的頭像你可以去查看的,有些處理是在當前的控制器查看,有些可能會做處理跳轉到其他的界面,要是跳轉到其他的界面要是不是返回上個界面,而你還想繼續播放或者觀看的話你可以這樣做,在網易的Demo中你可以看到這樣的方法:
- (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; NSLog(@"viewDidDisappear"); [self.liveplayer shutdown]; //退出播放並釋放相關資源 [self.liveplayer.view removeFromSuperview]; self.liveplayer = nil; [[NSNotificationCenter defaultCenter]removeObserver:self name:NELivePlayerDidPreparedToPlayNotification object:_liveplayer]; [[NSNotificationCenter defaultCenter]removeObserver:self name:NELivePlayerLoadStateChangedNotification object:_liveplayer]; [[NSNotificationCenter defaultCenter]removeObserver:self name:NELivePlayerPlaybackFinishedNotification object:_liveplayer]; [[NSNotificationCenter defaultCenter]removeObserver:self name:NELivePlayerFirstVideoDisplayedNotification object:_liveplayer]; [[NSNotificationCenter defaultCenter]removeObserver:self name:NELivePlayerFirstAudioDisplayedNotification object:_liveplayer]; [[NSNotificationCenter defaultCenter]removeObserver:self name:NELivePlayerVideoParseErrorNotification object:_liveplayer]; }
重點不是下面通知的釋放,是上面那幾句關於liveplayer的設置問題!你要是在 viewDidDisappear 設置的話就達不到我們的要求了,所以這個釋放你可以加載導航的返回事件當中去,當然也不能寫在viewWillDisappear。不然你下面的設置就不會起作用,按照Demo,你可以在ViewWillappear中寫這兩句代碼來達到想要的效果:
[self.liveplayer setShouldAutoplay:YES]; //設置prepareToPlay完成后是否自動播放 [self.liveplayer setPauseInBackground:NO]; //設置切入后台時的狀態,暫停還是繼續播放