您所在的位置:主页 > iOS开发培训 >

iOS网络收音机

时间:2014-03-01 17:28来源:未知 作者:疯狂java 点击:

   
       在iOS平台下播放直播流,需要用到解码编码等,发现AppStore中有很多网络电台应用,经过学习,终于找到了一个很好的第三方解决方案,即百度媒体云。
   
        进入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文件
 
#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];//停止