AVPlayer屬於AVFoundation框架,不僅能夠播放音頻,還可以播放視頻,支持本地和網鏈,更加接近底層,定制也更加靈活。
為什麼要寫這篇文章呢?其因有二:
StreamingKit
FreeStreamer
AudioStreamer
AFSoundManager
DOUAudioStreamer
以上,除瞭FreeStreamer,其他的幾個框架都使用過,其中StreamingKit和DOUAudioStreamer在線上版本使用過,性能都比較不錯。
DOUAudioStreamer 唯一的問題就是在使用緩存繼續播放,有問題,並且不支持seekToTime,這句話的意思呢就是,整個音頻緩沖完畢才能繼續播放,如果快進的時候整個音頻沒有緩沖完成(網絡較差的時候,音頻較大),這個就比較坑瞭。StreamingKit 這個有個問題就是緩沖的進度無法回調,無法獲取,源碼都是互斥鎖,自旋鎖,看著各種暈菜,有個問題就是,可能是我使用的姿勢不對,緩存文件比較大,但是在沙盒又找不見這個文件的存在,無法刪除,API也沒有提供對應的接口,在手機的空間存儲中查看,占用空間很大。2、這些框架很久都沒人維護,面對現在的產品需求,不能滿足。
基於以上原因,結合自己項目中出現的問題,決定用強悍的AV框架中AVPlayer,自己寫一個, 功能如下:
不要求實現流播
能支持緩存播放
有緩存進度回調
可以清除緩存文件即可
以前做視頻開發,在播放視頻時,隻是簡單的播放一個視頻,而不需要考慮播放器的界面。
1、iOS9.0 之前使用 MPMoviePlayerController, 或者自帶一個 view 的 MPMoviePlayerViewController。2、iOS9.0 之後,可以使用新的API AVPictureInPictureController, AVPlayerViewController。3、甚至使用WKWebView。以上播放器都是系統提供,優點:封裝性很強,使用簡單方便。缺點:自由定制度太低。所以在我們需要自己定制播放器的時候,就需要時用AVPlayer。 AVPlayer繼承NSObject,所以單獨使用AVPlayer時無法顯示視頻的,必須將視頻圖層添加到AVPlayerLayer中方能顯示視頻。使用AVPlayer首先瞭解一下幾個常用的類:1、AVAsset:AVAsset類專門用於獲取多媒體的相關信息,包括獲取多媒體的畫面、聲音等信息,屬於一個抽象類,不能直接使用。2、AVURLAsset:AVAsset的子類,可以根據一個URL路徑創建一個包含媒體信息的AVURLAsset對象。3、AVPlayerItem:一個媒體資源管理對象,管理者視頻的一些基本信息和狀態,一個AVPlayerItem對應著一個視頻資源。4、AVPlayer:播放器。5、CMTime:是一個結構體,裡面存儲著當前的播放進度,總的播放時長。一般項目中會初始化一個播放管理的工具類(單例):
【文章福利】小編整理瞭一些音視頻學習資料包、大廠面試題、技術視頻和學習路線圖,包括(C/C++,Linux,FFmpeg webRTCrtmp hlsrtsp ffplay srs 等等資料)有需要的可以點擊1150259293加群免費領取哦~
- (AVPlayer *)player {
if (_player == nil) {
_player = [[AVPlayer alloc] init];
_player.volume = 1.0; // 默認最大音量
}
return _player;
}
上一篇
下一篇
allow 及物动词 1)允许,准许,同义词:permit, let 例句: She allowed me to interview her. 她允许我采访她。 2)同意给 ...