iOS音频视频播放

1.使用System Sound Services播放音效

System Sound Services是最简单、也比较底层的音效播放服务,使用System Sound Services只适合播放一些很小的提示或者警告音频。

它存在如下限制:

(1)声音长度不能超过30秒;

(2)声音文件必须是PCM或者IMA4(IMA/ADPCM)格式;

(3)打包成.caf、.aif、.wav的文件;

(4)不能控制播放的进度;

(5)调用方法后立即播放声音;

(6)没有循环播放和立体声控制。

示例:一个按钮控制一个音效,需要AudioToolbox框架支持。

ViewController.m

#import "ViewController.h"
#import <AudioToolbox/AudioToolbox.h>
@interface ViewController ()

@end

void completionCallback(SystemSoundID mySSID)
{
    AudioServicesPlaySystemSound(mySSID);
}

SystemSoundID crash;

@implementation ViewController

- (void)viewDidLoad
{
    [superviewDidLoad];
    //需要播放的音频文件
    NSURL *crashUrl = [[NSBundlemainBundle]URLForResource:@"hello"withExtension:@"wav"];
    //加载音频文件
    AudioServicesCreateSystemSoundID((__bridgeCFURLRef)crashUrl, &crash);
    //为crash播放完成绑定回调函数
    AudioServicesAddSystemSoundCompletion(crash,NULL, NULL, (void *)completionCallback,NULL);
}

- (void)didReceiveMemoryWarning
{
    [superdidReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)play:(id)sender {
    //播放crash代表的音频
    AudioServicesPlaySystemSound(crash);
    //播放crash代表的音频,并控制设备震动
    //AudioServicesPlayAlertSound(crash);
}
@end


 ViewController.h 

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

- (IBAction)play:(id)sender;
@end


2.使用AVAudioPlayer播放音乐

AVAudioPlayer是一个属于AVFoudationframework的类,它的作用类似于一个功能强大的播放器。AVAudioPlayer支持广泛的音频格式,主要是以下几种:

(1)AAC

(2)AMR(Adaptive Multi-Rate,一种语音格式)

(3)ALAC(Apple Lossless Audio Codec)

(4)iLBC(internet Low Bitrace Codec)

(5)IMA4(IMA/ADPCM)

(6)linearPCM(uncompressed)

(7)μ-law和a-low

(8)MP3(MPEG-Laudio Layer3)


示例:需要AVFoundation框架支持

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end
AVAudioPlayer *audioPlayer;
CGFloat durationTime;
NSTimer *timer;

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //获取要播放音乐的URL
	NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"Apologize大提琴版伴奏" withExtension:@"mp3"];
    //创建AVAudioPlayer对象
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
    NSString *msg = [NSString stringWithFormat:@"音频文件声道数:%d\n音频文件持续时间%g",audioPlayer.numberOfChannels,audioPlayer.duration];
    self.show.text = msg;
    durationTime = audioPlayer.duration;
    //将循环次数设为-1,用于指定该音频文件循环播放
    //audioPlayer.numberOfLoops = -1;
    //为AVAudioPlayer设置代理,监听它的播放事件
    audioPlayer.delegate = self;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
   
}
//播放完成后自动调用该方法
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    if(player == audioPlayer && flag)
    {
        NSLog(@"播放完成");
        [self.playBtn setTitle:@"Play" forState:UIControlStateNormal];
    }
}

- (void) audioPlayerBeginInterruption:(AVAudioPlayer *)player
{
    if(player == audioPlayer)
    {
        NSLog(@"被中断!");
    }
}

- (IBAction)play:(id)sender {
    //如果当前正在播放
    if(audioPlayer.playing)
    {
        //暂停播放
        [audioPlayer pause];
        [self.playBtn setTitle:@"Pause" forState:UIControlStateNormal];
    }
    else
    {
        [audioPlayer play];
        [self.playBtn setTitle:@"Play" forState:UIControlStateNormal];
    }
    //如果timer为nil,则执行如下方法
    if(timer == nil)
    {
        timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProg) userInfo:nil repeats:YES];
    }
}


- (IBAction)stop:(id)sender {
    //停止播放音频
    [audioPlayer stop];
    audioPlayer.currentTime = 0;
    [timer invalidate];
    timer = nil;
}

- (void) updateProg
{
    self.prog.progress = audioPlayer.currentTime / durationTime;
}
@end


ViewController.h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController : UIViewController<AVAudioPlayerDelegate>
@property (weak, nonatomic) IBOutlet UIButton *playBtn;
@property (weak, nonatomic) IBOutlet UIButton *stopBtn;
@property (weak, nonatomic) IBOutlet UIProgressView *prog;
@property (weak, nonatomic) IBOutlet UILabel *show;

- (IBAction)play:(id)sender;
- (IBAction)stop:(id)sender;
@end


运行结果图:



3.使用MPMoviePlayerController播放视频

MPMoviePlayerController与MPMusicPlayerController相似,它们都是一个简单的播放器,而且都实现了MPMediaPlayer协议,因此它们有相似的play、stop、pause等播放方法。

示例:需要MediaPlayer框架支持。

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

MPMoviePlayerController *moviePlayer;

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //创建本地URL(也可以创建基于网络的URL)
	NSURL *movieUrl = [[NSBundle mainBundle] URLForResource:@"m" withExtension:@"mp4"];
    //使用指定URL创建MPMoviePlayerController
    moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieUrl];
    //设置播放器的控制条风格
    moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
    //设置播放器缩放模式
    moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
    
    [moviePlayer.view setFrame:CGRectMake(20, 10, 250, 340)];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)play:(id)sender {
    //播放视频
    [moviePlayer prepareToPlay];
    [self.movieView addSubview:moviePlayer.view];
    
}
@end

ViewController.h

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
@interface ViewController : UIViewController
- (IBAction)play:(id)sender;

@property (weak, nonatomic) IBOutlet UIView *movieView;
@end

运行结果图:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值