日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS 视屏开发之AVPlayer的基本使用

發布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS 视屏开发之AVPlayer的基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 名詞解釋:(1)AVPlayer 負責控制播放(管理和調控)

使用 AVPlayer 時需要注意,AVPlayer 本身并不能顯示視頻, 顯示視頻的是 AVPlayerLayer。 AVPlayerLayer 繼承自 CALayer,添加到 view.layer 上就可以使用了。

? - (void)play;? ——? 播放

? - (void)pause; ——? 暫停

?(2)AVPlayerLayer 畫面顯示播放 —- View

?(3)AVPlayerItem 提供數據 —- 數據源

?? ? AVPlayItem 相當于 Model 層,包含Media的信息和播放狀態,并提供這些數據給視頻觀察者。

?? ? status: 播放器狀態變化

?? ? loadedTimeRange :緩存大小

2. 整個播放視頻的步驟。

? (1)首先,得到視頻的URL

? (2)根據URL創建AVPlayerItem

? (3)把AVPlayerItem 提供給 AVPlayer

? (4)AVPlayerLayer 顯示視頻。

? (5)AVPlayer 控制視頻, 播放, 暫停, 跳轉 等等。

? (6)播放過程中獲取緩沖進度,獲取播放進度。

? (7)視頻播放完成后做些什么,是暫停還是循環播放,還是停留在最后一幀圖像。

3. 初始化一個AVPlayer用來播放

#pragma mark -- life cycle - (void)createAVPlay {// 監測設備方向[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];//旋轉屏幕通知[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(onDeviceOrientationChange)name:UIDeviceOrientationDidChangeNotificationobject:nil];//播放完成通知[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(avPlayDidEnd)name:AVPlayerItemDidPlayToEndTimeNotificationobject:nil];/* 1. 初始化一個View,是用來放置播放器用的,此處是self2. 初始化播放器AVPlayerItem,用來設置播放視屏的URL或者本地視屏資源3. 初始化一個AVPlayer對象,來接收AVPlayerItem傳過來的資源4. 初始化一個AVPlayerLayer對象,將AVPlayer對象疊加在其上面5. 將AVPlayerLayer對象添加到self的layer層上*/// 初始化播放器itemself.playerItem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:self.movieUrlString]];// 監聽播放器狀態變化[self.playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];// 監聽緩存大小[self.playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];// 初始化一個AVPlayerself.player = [[AVPlayer alloc] initWithPlayerItem:self.playerItem];// 初始化播放器的Layerself.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];//此處為默認視頻填充模式self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;// 添加playerLayer到self.layer[self.layer insertSublayer:self.playerLayer atIndex:0];/* layer的填充屬性AVLayerVideoGravityResizeAspect 等比例拉伸,會留白AVLayerVideoGravityResizeAspectFill // 等比例拉伸,會裁剪AVLayerVideoGravityResize // 保持原有大小拉伸*/ }
// 監聽播放器的變化屬性 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {if ([keyPath isEqualToString:@"status"]){AVPlayerItemStatus statues = [change[NSKeyValueChangeNewKey] integerValue];switch (statues){case AVPlayerItemStatusReadyToPlay:{[self hiddenLoading];[self setNeedsLayout];[self layoutIfNeeded];// 5. 添加playerLayer到self.layer//[self.layer insertSublayer:self.playerLayer atIndex:0];// 最大值直接用sec,以前都是// CMTimeMake(幀數(slider.value * timeScale), 幀/sec)[self.avPlayControlView setSliderMaxValue:CMTimeGetSeconds(self.playerItem.duration)];[self initTimer];// 啟動定時器 5秒自動隱藏if (!self.autoDismissTimer){self.autoDismissTimer = [NSTimer timerWithTimeInterval:8.0 target:self selector:@selector(autoHiddenControlView) userInfo:nil repeats:YES];[[NSRunLoop currentRunLoop] addTimer:self.autoDismissTimer forMode:NSDefaultRunLoopMode];}}break;case AVPlayerItemStatusUnknown:NSLog(@"--AVPlayerItemStatusUnknown");break;case AVPlayerItemStatusFailed:NSLog(@"--AVPlayerItemStatusFailed");break;default:break;}}else if ([keyPath isEqualToString:@"loadedTimeRanges"]) // 監聽緩存進度的屬性{// 計算緩存進度NSTimeInterval timeInterval = [self availableDuration];// 獲取總長度CMTime duration = self.playerItem.duration;CGFloat durationTime = CMTimeGetSeconds(duration);// 監聽到了給進度條賦值[self.avPlayControlView setProgress:timeInterval / durationTime];} }




?本工程的演示demo地址? 點擊打開鏈接




總結

以上是生活随笔為你收集整理的IOS 视屏开发之AVPlayer的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。