通过百度媒体云来实现网络收音机
-
进入SDK下载界面,下载iOS开发包
http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/video/sdk
注:我下载的包见下图,但是发现有些问题,具体啥问题在这不详细说了,如果你运行Demo也遇见这个问题的话,那就接着往下看
2.添加媒体云包、相关框架到项目中(创建个新项目,按照下面的步骤来少走些弯路)
1)开发者需要使用百度账号登录百度开发者中心注册成为百度开发者并创建工程,方可获取应用ID、对应的API key(即:ak)及 Secret Key(即:sk)等信息。因为需要播放直播流,所以需要开启视频服务才能使用(见下图)
2)媒体云包分为真机包和模拟器包,这个要看自己的情况进行添加,我的是真机运行(发现百度这个Demo,在真机上运行时木有问题的)。添加相关的框架:
OpenAL.framework
OpenGLES.framework
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文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#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文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#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
|
播放音频
1
2
3
4
|
RadioPlayer *radioPlayer = [RadioPlayer sharedInstance];
[radioPlayer setRadioUrlString:@
"mmsh://124.128.18.76/jiaotong"
];//注意 mms 改为 mmsh
[radioPlayer play];
//播放
//[radioPlayer stop];//停止
|