android 通过audiotrack播放caf音频,ios短音频(<=30),长音频,视频播放

短音频播放

/* 声音长度不能超过30秒

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

必须是 .caf、.aif 、.wav的文件

不能控制播放进度

没有循环播放

*/

// 导入#import

SystemSoundID soundID = 0;

// 获取音效文件的url

CFURLRef soundUrl = (__bridge CFURLRef)[[NSBundle mainBundle] URLForResource:@"m_09.wav" withExtension:nil];

// 根据音效文件的url创建soundID

AudioServicesCreateSystemSoundID(soundUrl, &soundID);

// 播放soundID对应的音效

// 播放声音并震动,如果用户设置为静音就没声音,如果设置为震动就震动

AudioServicesPlayAlertSound(soundID);

// 仅播放声音,如果用户设置为静音就没声音

//AudioServicesPlaySystemSound(soundID);

本地音乐播放AVAudioPlayer(只能播放本地音乐)

- (IBAction)beginBtnClick:(id)sender {

if (!self.musicPlayer) {

// 获取音乐文件的url

NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"120125029" withExtension:@"mp3"];

NSError *error;

// 创建播放器(一个播放器只能播放一个音乐)

AVAudioPlayer *musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:&error];

self.musicPlayer = musicPlayer;

// 播放前的准备工作

[musicPlayer prepareToPlay];

}

// 开始播放

[self.musicPlayer play];

}

- (IBAction)puseBtnClick:(id)sender {

// 暂停播放(不会清除preparetoplay方法做的准备工作)

[self.musicPlayer pause];

}

- (IBAction)stopBtnClick:(id)sender {

// 停止(会清除preparetoplay方法做的准备工作(但是测试不是这样的。。。))

[self.musicPlayer stop];

self.musicPlayer = nil;

}

常用属性

// 音乐的音量(默认1.0,可设置范围为0.0至1.0,两个极端为静音、系统音量

@property float volume;

// 左右声道的平衡(默认0.0,可设置范围为-1.0至1.0,两个极端分别为只有左声道、只有右声道)

@property float pan NS_AVAILABLE(10_7, 4_0);

// 播放速度(默认1.0,可设置范围为0.5至2.0,两个极端分别为一半速度、两倍速度)

@property float rate;

// 循环播放(默认1,若设置值大于0,则为相应的循环次数,设置为-1可以实现无限循环)

@property NSInteger numberOfLoops;

网络&本地音视频播放(AVPlayer,播放视频的话需要借助于AVPlayerLayer,支持播放进度监听)

使用到的相关类:

AVPlayer:控制播放器的播放,暂停,播放速度

AVURLAsset : AVAsset 的一个子类,使用 URL 进行实例化,实例化对象包含 URL 对应视频资源的所有信息。

AVPlayerItem:管理资源对象,提供播放数据源(一个item就是一个播放源,音视频切换只需切换播放源就行了)

AVPlayerLayer:负责显示视频,如果没有添加该类,只有声音没有画面

AVPlayer 类的常用方法

// 创建一个AVPlayer (此方法返回一个AVPlayer实例)

+ (instancetype)playerWithPlayerItem:(nullable AVPlayerItem *)item;

/* AVPlayer播放器的状态

typedef NS_ENUM(NSInteger, AVPlayerStatus) {

AVPlayerStatusUnknown, 位置状态

AVPlayerStatusReadyToPlay, 准备播放

AVPlayerStatusFailed 播放失败

};

*/

@property (nonatomic, readonly) AVPlayerStatus status;

// 播放错误信息(只有播放状态为AVPlayerStatusFailed才有值,否则为nil)

@property (nonatomic, readonly, nullable) NSError *error;

// 播放控制

// 倍率 0.0:暂停 1.0:按正常速率播放

@property (nonatomic) float rate;

// 播放、暂停

- (void)play;

- (void)pause;

// 切换资源

- (void)replaceCurrentItemWithPlayerItem:(nullable AVPlayerItem *)item;

// 设置当前播放时间 (调整播放进度)

NSTimeInterval currentTime = CMTimeGetSeconds(self.playerItem.duration) * sender.value;

[self.player seekToTime:CMTimeMakeWithSeconds(currentTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];

CMTime是专门用于标识电影时间的结构体

typedef struct{

CMTimeValue value; // 帧数

CMTimeScale timescale; // 帧率(影片每秒有几帧)

CMTimeFlags flags;

CMTimeEpoch epoch;

} CMTime;

CMTime定义是一个C语言的结构体,CMTime是以分数的形式表示时间,value表示分子,timescale表示分母,flags是位掩码,表示时间的指定状态。

// seconds当前时间,preferredTimescale每秒钟多少帧.

CMTime CMTimeMakeWithSeconds(

Float64 seconds,

int32_t preferredTimescale)

__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

函数获取时间的秒数:

CMTimeGetSeconds(t1)

// 获取总时间

NSTimeInterval duration = CMTimeGetSeconds(self.player.currentItem.duration);

// 获取当前播放时间

NSTimeInterval currentTime = CMTimeGetSeconds(self.player.currentTime);

demo地址:https://github.com/XPentaKill/AVPlayerDemo.git

****************************************************************************************

demo中用到了UISlide小控件

// 滑块当前的值

@property(nonatomic) float value;

// 滑块能划到的最小值,默认为0

@property(nonatomic) float minimumValue;

// 滑块能滑到的最大值,默认为1

@property(nonatomic) float maximumValue;

// 默认为yes,滑动的时候滑块的值随动;如果设置为NO,滑动结束的时候滑块的值才会变

@property(nonatomic,getter=isContinuous) BOOL continuous;

// 小于滑块当前值滑块条的颜色,默认为蓝色

@property(nullable, nonatomic,strong) UIColor *minimumTrackTintColor;

// 大于滑块当前值滑块条的颜色,默认为白色

@property(nullable, nonatomic,strong) UIColor *maximumTrackTintColor;

// 当前滑块的颜色,默认为白色

@property(nullable, nonatomic,strong) UIColor *thumbTintColor;

// 设置滑块的图片

- (void)setThumbImage:(nullable UIImage *)image forState:(UIControlState)state;

// 滑块条最小值处设置的图片

- (void)setMinimumTrackImage:(nullable UIImage *)image forState:(UIControlState)state;

// 滑块条最大值处设置的图片

- (void)setMaximumTrackImage:(nullable UIImage *)image forState:(UIControlState)state;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值