老铁们,大家好,相信还有很多朋友对于深入解析iOS平台下的音视频播放技术和的相关问题不太懂,没关系,今天就由我来为大家分享分享深入解析iOS平台下的音视频播放技术以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
废话不多说,我们直接上代码来了解一下:
//第一步:获取视频路径
NSString *webVideoPath=@"https://vd2.bdstatic.com/mda-kidkfudrpqgg8891/sc/cae_h264_clips/mda-kidkfudrpqgg8891.mp4";
NSURL*webVideoUrl=[NSURLURLWithString:webVideoPath];
//第2步:创建AVPlayer
AVPlayer * avPlayer=[[AVPlayer alloc]initWithURL:webVideoUrl];
//第三步:使用AVPlayer创建AVPlayerViewController并跳转到播放界面
AVPlayerViewController *avPlayerVC=[[AVPlayerViewController 分配] init];
avPlayerVC.player=avPlayer;
[自我呈现ViewController:avPlayerVC动画:YES完成:nil];
没错,就这样结束了!祝您使用愉快!
AV播放器
对于AVPlayer来说,就麻烦一些了。我应该和谁打交道?相对于AVPlayerViewController!可见,也不算太麻烦吧?
首先新建一个普通viewController,导入头文件,创建对象
进口
@property(非原子,强)AVPlayer * avplayer;
@property(非原子,强)AVPlayerItem * avplayerItem;
@property(非原子,强)AVPlayerLayer * playLayer;
初始化相关对象和数据设置
//本地视频
//NSString * localPath=[[NSBundle mainBundle] pathForResource:@"movie" ofType:@"mp4"];
//NSURL * localUrl=[NSURL fileURLWithPath:localPath];
//网络视频
NSString * webPath=@"https://vd2.bdstatic.com/mda-kidkfudrpqgg8891/sc/cae_h264_clips/mda-kidkfudrpqgg8891.mp4";
NSURL* webUrl=[NSURLURLWithString:webPath];
//初始化播放器
self.avplayerItem=[[AVPlayerItem alloc] initWithURL:webUrl];
self.avplayer=[[AVPlayer alloc] initWithPlayerItem:self.avplayerItem];
//创建一个AVPLayerLayer来显示视频
/*
AVLayerVideoGravityResizeAspectFill 等比例填充,宽度或高度可能超出屏幕。
AVLayerVideoGravityResizeAspect 等比例默认
AVLayerVideoGravityResize完全适应宽度和高度
*/
_playLayer=[AVPlayerLayerplayerLayerWithPlayer:self.avplayer];
_playLayer.videoGravity=AVLayerVideoGravityResizeAspect;
_playLayer.frame=CGRectMake(0, 100, DEVICEWIDTH, DEVICEHEIGHT/2);
[self.view.layer addSublayer:_playLayer];
//开始播放
[self.avplayer 播放];
这样一个简单的视频播放就完成了!但是,听着,这只是完成的三分之一。剩下的我该怎么办?
暂停?
关于暂停视频播放,很简单
[self.avplayerpause];
结束了!
继续播放?
然后
[self.avplayer 播放];
什么?就这样?
是的,就是这么简单!
播放监听?
视频播放必须有自己的状态,是否缓冲完成、加载失败、异常、视频长度、播放进度等。那么如何监控和处理呢?
使用KVO添加属性监控,监控AVPlayer的currentItem中的“status”和“loadedTimeRanges”关键字属性。
[self.avplayer.currentItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
调用属性监听方法
//属性监控
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)对象
更改:(NSDictionary *)更改
context:(void*)上下文
{
AVPlayerItem* 播放项目=(AVPlayerItem*) 对象;
if([keyPathisEqualToString:@"status"]) {
AVPlayerStatus status=[[change objectForKey:@"new"] intValue];
开关(状态){
case AVPlayerStatusReadyToPlay:{ //就绪
//获取视频时间
CMTimeduration=playitem.duration;
NSString* 时间=[selfformatTimeWithTimeInterVal:CMTimeGetSeconds(duration)];
//显示视频总长度。只需自定义一个标签即可。
self.timeLabel.text=时间;
//开启滑块控制播放进度
self.sliderView.enabled=YES;
[self.avplayer 播放];
休息;
}
case AVPlayerStatusFailed:{ //失败,可以重试
休息;
}
case AVPlayerStatusUnknown:{ //异常
休息;
}
默认:
休息;
}
}
}
通过上面的方法就可以获取到视频的状态和长度,然后就要处理播放过程了。
__weak typeof(self)weakSelf=self;
self.timeObserver=[self.avplayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime 时间) {
//当前播放时间
NSTimeInterval nowTime=CMTimeGetSeconds(时间);
//总时间
NSTimeInterval 总时间=CMTimeGetSeconds(weakSelf.avplayer.currentItem.duration);
//滑块进度
weakSelf.sliderView.value=nowTime/totaltime;
//倒计时
weakSelf.nowtimeLabel.text=[weakSelfformatTimeWithTimeInterVal:nowTime];
}];
上面的代码可以动态显示播放时间和播放进度。具体的展示风格根据个人的实际情况而定!
文章到此结束,如果本次分享的深入解析iOS平台下的音视频播放技术和的问题解决了您的问题,那么我们由衷的感到高兴!
【深入解析iOS平台下的音视频播放技术】相关文章:
用户评论
真爱iPhone!就喜欢它流畅的画面和超低的卡顿感。
有7位网友表示赞同!
这个界面好清爽啊,看得舒服眼睛都不累
有19位网友表示赞同!
希望能支持更多高清格式,看画质更清!
有14位网友表示赞同!
苹果设备在这几个方面做的很棒啊!
有7位网友表示赞同!
以后不用担心视频播放卡顿,手机流畅得不得了!
有12位网友表示赞同!
现在想看哪个视频都可以随时看了,真方便!
有6位网友表示赞同!
学习学习,想自己也做一个手机音视频APP。
有17位网友表示赞同!
苹果还是牛!
有5位网友表示赞同!
期待以后能够有更丰富的功能!
有9位网友表示赞同!
希望支持一些新兴的视频格式
有6位网友表示赞同!
看视频太香了,现在玩手机时间感觉加长一点。
有15位网友表示赞同!
这个播放器好用,我之前用其他播放器经常会卡顿
有13位网友表示赞同!
苹果手机音视频处理效果是真的好!
有14位网友表示赞同!
想看视频就打开手机,太方便了!
有13位网友表示赞同!
感觉苹果在视频方面越来越专业了!
有10位网友表示赞同!
这个标题把我好奇ちゃった,赶紧去看文章了解下。
有18位网友表示赞同!
希望未来iOS系统能够支持多画面播放功能!
有19位网友表示赞同!
现在看视频体验简直太棒了,画面清晰流畅
有17位网友表示赞同!