1、音頻 2、視頻 1、 2、AVPlayer 1、音頻 2、視頻 1、 2、AVPlayer 0)、寫在前面 AVPlayer 主要包含 AVPlayer、AVPlayerItem、AVPlayerLayer,分別對應,控制器C、模型M、視圖V。 1)、AVPlayer(控制器C) 2)、AVPl ...
1、音頻
2、視頻
1、
2、AVPlayer
1、音頻
2、視頻
1、
2、AVPlayer
0)、寫在前面
AVPlayer 主要包含 AVPlayer、AVPlayerItem、AVPlayerLayer,分別對應,控制器C、模型M、視圖V。
1)、AVPlayer(控制器C)
2)、AVPlayerItem(模型M)
2-1)、影片時長:
AVPlayerItem.duration 是 CMTime 類型
typedef struct{ CMTimeValue value; // 幀數 CMTimeScale timescale; // 幀率(影片每秒有幾幀) CMTimeFlags flags; CMTimeEpoch epoch; } CMTime;
影片的總秒數 = duration.value / duration.timeScale 。
或 = CMTimeGetSeconds( AVPlayerItem.duration )。
2-2)、跳到某個時刻
CMTime time1 = CMTimeMake(120, 60); CMTime time2 = CMTimeWithSeconds(2.0, 1); [self.avItem seekToTime:time1 completionHandler:^(BOOL finished) { // 跳轉完成後 }];
CMTimeMake、CMTimeWithSeconds,都是跳到 第一個參數/第二個參數 = 2秒。
兩者的區別,我個人認為是為了讓開發者有個參照物,比如:
第一個函數 CMTimeMake,知道每秒幾幀,跳到指定的幀數。
第二個函數 CMTimeWithSeconds ,知道要跳到第幾秒,從而設置第二個參數。
3)、 AVPlayerLayer(視圖V)