文档章节

iOS网络收音机

iProgrammer
 iProgrammer
发布于 2014/02/26 17:18
字数 927
阅读 2498
收藏 30

    在iOS平台下播放直播流,需要用到解码编码等听起来很牛X的技术,自己也发现AppStore中有很多网络电台应用,但不知道人家是怎么实现的。经过在网上搜索、询问好友后,终于找到了一个很好的第三方解决方案,即百度媒体云

    好了闲话少说,进入正题:

  1. 进入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];//停止


© 著作权归作者所有

下一篇: PHP变量
iProgrammer
粉丝 2
博文 3
码字总数 2694
作品 0
银川
私信 提问
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
苹果iOS的八年:如何一步步爬到了这么高

电脑需要操作系统,手机也需要,2007 年,苹果带着旗下第一款智能手机 iPhone 和第一款操作系统亮相,从而奠定了改变世界的基础。8 年时间以来,iPhone 一直在不停的进化、演变,iOS 操作系统...

oschina
2015/09/08
4.1K
22
如果只有一个月的时间学 iOS 开发,我们该做些什么?

一年前,我还是一个 Android 开发者。那时候我没有任何 iOS 编程相关的知识,我甚至没用过任何苹果的产品。然而,这已成为过去,现在我已经能同时开发 iOS 和 Android 应用了。 现在,我想给...

oschina
2017/03/09
3.8K
13
苹果发布第一个 Android 应用,支持切换到 iOS 9

苹果发布了第一个 Android 应用。这并不是一个 Android 版本的 Safari 或者是其他的,而是一个用来简化切换到 iOS 过程的工具。Move to iOS 应用会吸引很多想使用 iPhone 6s/iPhone 6s Plus...

oschina
2015/09/17
10.6K
49
使用 Xamarin 开发 iOS 键盘扩展(含网络访问)

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/...

walter lv
02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

官方来源的 Duo Mobile App 解决了我的 Network Difficulties 问题

https://help.duo.com/s/article/2094?language=en_US 我利用百度搜索下载了一个 Duo Mobile App (由于 Google Play)在大陆不可用。 在扫描旧手机上的 Duo Mobile App 的二维码时, 显示出错...

圣洁之子
11分钟前
2
0
Zabbix监控Mysql容器(Docker容器)主从是否存活

1、在Zabbix Web端创建模板 2、为该模板创建监控项 3、创建触发器 4、在zabbix-agent端操作 在/etc/zabbix/zabbix_agentd.d新建customize.confw文件 内容如下 UserParameter=mysql.replicat...

abowu
12分钟前
1
0
基于 RocketMQ 的同城双活架构在美菜网的挑战与实践

本文整理自李样兵在北京站 RocketMQ meetup分享美菜网使用 RocketMQ 过程中的一些心得和经验,偏重于实践。 嘉宾李样兵,现就职于美菜网基础服务平台组,负责 MQ ,配置中心和任务调度等基础...

大涛学长
18分钟前
2
0
设计模式之:外观模式和桥接模式

作者:DevYK 链接:https://juejin.im/post/5d7e01f4f265da03b5747aac 外观模式 介绍 外观模式 (Facade) 在开发过程中的运用评率非常高,尤其是在现阶段,各种第三方 SDK “充斥” 在我们周边...

Java架构Monster
19分钟前
1
0
人证合一核验设备

人脸身份验证机,人证合一设备1:N如我们现在在车站或一些重要的场所如步行街、城中村等人流密集的场所应用的人脸识别布控系统,其特点是动态和非配合。所谓的动态也就是识别的不是照 片,不是...

非思丸智能
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部