在iOS平臺下播放直播流,須要用到解碼編碼等聽起來很牛X的技術,本身也發現AppStore中有不少網絡電臺應用,但不知道人家是怎麼實現的。通過在網上搜索、詢問好友後,終於找到了一個很好的第三方解決方案,即百度媒體雲。php
好了閒話少說,進入正題:
網絡
進入SDK下載界面,下載iOS開發包session
http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/video/sdk架構
注:我下載的包見下圖,可是發現有些問題,具體啥問題在這不詳細說了,若是你運行Demo也碰見這個問題的話,那就接着往下看app
2.添加媒體雲包、相關框架到項目中(建立個新項目,按照下面的步驟來少走些彎路)框架
1)開發者須要使用百度帳號登陸百度開發者中心註冊成爲百度開發者並建立工程,方可獲取應用ID、對應的API key(即:ak)及 Secret Key(即:sk)等信息。由於須要播放直播流,因此須要開啓視頻服務才能使用(見下圖)ide
2)媒體雲包分爲真機包和模擬器包,這個要看本身的狀況進行添加,個人是真機運行(發現百度這個Demo,在真機上運行時木有問題的)。添加相關的框架:ui
OpenAL.framework編碼
OpenGLES.frameworkatom
libbz2.1.0.dylib
libz.dylib
AudioToolbox.framework
Security.framework
MobileCoreServices.framework
CFNetwork.framework
SystemConfiguration.framework
AVFoundation.framework
MediaPlayer.framework
3)獲取上面申請應用的API key(即:ak)及 Secret Key(即:sk)以備用 SDK 認證時必須傳入ak及sk(只需前 16 位)參數。 即右上方API key SecretKey 詳見下圖:
4)配置工程
注:因爲當前的 CyberPlayerController 只支持 armv7 架構,因此在導入相關靜態庫前,您須要在 Xcode 中配置您的 targets。選擇 Build Settings->Architectures->Valid Architectures, 將該選項的 Debug/Release 鍵都置爲 armv7(即去掉 armv7s 的支持)。 Build Active Architecture Only 設置爲 NO。Xcode 中的 project不須要進行任何操做。詳見下圖:
完成以上步驟,Build下,添加上上面已經準備好的API key(即:ak)及 Secret Key(即:sk),到了這裏大部分任務已經完成了。下面開始敲代碼了,下面的代碼是我實現的一個RadioPlayer單例:
RadioPlayer.h文件
#import <Foundation/Foundation.h> @interface RadioPlayer : NSObject { } @property (nonatomic,assign) BOOL isPlayed;//是否已經播放狀態值 + (RadioPlayer *) sharedInstance;//單例 - (void) setRadioUrlString:(NSString *) urlString;//設置播放地址 - (void) play;//開始播放 - (void) stop;//中止播放 @end
RadioPlayer.m文件
#import "RadioPlayer.h" #import <AVFoundation/AVFoundation.h> #import "CyberPlayerController.h" CyberPlayerController *cbPlayerController;//播放器控制器 @implementation RadioPlayer static RadioPlayer *sharedInstance = nil ; + (RadioPlayer *) sharedInstance { static dispatch_once_t onceToken;// 鎖 dispatch_once (& onceToken, ^ {// 最多調用一次 sharedInstance = [[self alloc] init]; }); return sharedInstance; } // 當第一次使用這個單例時,會調用這個init方法。 - (id) init { self = [super init]; if (self) { //後臺播放設置 AVAudioSession *session = [AVAudioSession sharedInstance]; [session setActive:YES error:nil]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; //初始化播放器 NSString *msAK = @"本身的msAK; NSString *msSK = @"本身的msSk; [[CyberPlayerController class] setBAEAPIKey:msAK SecretKey:msSK]; cbPlayerController = [[CyberPlayerController alloc] init]; } return self; } //設置播放地址 - (void) setRadioUrlString:(NSString *) urlString{ NSURL *url = [NSURL URLWithString:urlString]; if (!url) { url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; } [cbPlayerController setContentURL:url]; } //開始播放 - (void) play { switch (cbPlayerController.playbackState) { case CBPMoviePlaybackStateStopped: case CBPMoviePlaybackStateInterrupted: //初始化完成後直接播放視頻,不須要調用play方法 cbPlayerController.shouldAutoplay = YES; //初始化視頻文件 [cbPlayerController prepareToPlay]; sharedInstance.isPlayed = YES; break; default: [cbPlayerController prepareToPlay]; sharedInstance.isPlayed = YES; break; } } //中止播放 - (void) stop { [cbPlayerController stop]; sharedInstance.isPlayed = NO; } @end
播放音頻
RadioPlayer *radioPlayer = [RadioPlayer sharedInstance]; [radioPlayer setRadioUrlString:@"mmsh://124.128.18.76/jiaotong"];//注意 mms 改成 mmsh [radioPlayer play];//播放 //[radioPlayer stop];//中止