注冊 AVAudioSession.interruptionNotification 的通知,可以收到播放打斷通知。 系統(tǒng)將此通知發(fā)布到主線程。

為龍子湖等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及龍子湖網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、成都做網(wǎng)站、龍子湖網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
其中userinfo有如下字段:
分began與end,用來表示打斷開始與打斷結(jié)束。
只在打斷結(jié)束時返回。選項用 shouldResume 來指示:另一個音頻會話的中斷已結(jié)束,應(yīng)用程序可以恢復(fù)其音頻會話。
該屬性只在打斷開始時返回。存在于版本iOS 10.3-14.5。
用于確定這次中斷是否由于系統(tǒng)掛起App所致。
獲取到的是一個NSNumber表示的Bool。為true表示中斷是由于系統(tǒng)掛起,false是被另一音頻打斷。
該屬性只在打斷開始時返回。存在于版本iOS 14.5以后,用來代替 AVAudioSessionInterruptionWasSuspendedKey 。
default :因為另一個音頻會話被激活,音頻中斷。(例如后臺播著音頻,此時播放微信語音)
appWasSuspended :由于APP被系統(tǒng)掛起,音頻中斷
builtInMicMuted :音頻因內(nèi)置麥克風(fēng)靜音而中斷(例如iPad智能關(guān)閉套【iPad's Smart Folio】合上)
最近工作之余, 寫了一個視頻播放器,輸入要播放的視頻資源地址,即可實現(xiàn)播放功能。
目前功能比較簡單,支持鎖屏、屏幕旋轉(zhuǎn)等基礎(chǔ)功能,后續(xù)會繼續(xù)完善。。。
下面講解下實現(xiàn)思路:
因 MediaPlayer/MediaPlayer.h 中 MPMoviePlayerController MP_DEPRECATED("Use AVPlayerViewController in AVKit.", ios(2.0, 9.0)) 在iOS9以后已經(jīng)廢棄,為了更好的兼容性,采用了 AVFoundation/AVFoundation.h 為技術(shù)實現(xiàn)方案。
框架在此就不講解了,官網(wǎng)講的比較清楚,不懂的可以查看官檔。 - 戳這里
監(jiān)聽視頻資源的加載狀態(tài), 根據(jù)不同的狀態(tài)進行相應(yīng)的操作。
更新視頻資源的播放進度。
實現(xiàn)控制視圖 QYPlayerControlView 的Delegate。 當(dāng)控制視圖進行了相應(yīng)操作,事件被傳遞到該類中進行統(tǒng)一處理。
該類中還有對操作視圖 顯示/隱藏 的方法。
后續(xù)調(diào)整視頻亮度、音量、進度等手勢都需添加在該分類中,便于統(tǒng)一管理。
主要存放時間轉(zhuǎn)換的分類 NSString+Custom 、常用宏 QYPlayerDefine 等工具類。
1). BaseViewController 中實現(xiàn)了控制屏幕旋轉(zhuǎn)的系統(tǒng)方法,實現(xiàn)的控制器要繼承自 BaseViewController 。
2). 在子控制器中實現(xiàn)如下方法。
此時屏幕旋轉(zhuǎn)功能已經(jīng)添加成功!
以上便是整個播放器的源碼解析,具體的細(xì)節(jié)請查看源碼。
源碼放在GitHub上了,想查看的小伙伴可以 -戳這里。
千里之行,始于足下。
快進:AVPlayer .rate 1
慢放: 0 AVPlayer .rate 1
快退: AVPlayer .rate 0 (m3u8 不能快退)
MP4:如果快進到了緩存不夠的地方:KVC監(jiān)聽 AVPlayerItem .isPlaybackBufferEmpty = yes
快退到頭會走通知AVPlayerItemDidPlayToEndTimeNotification
m3u8(靜態(tài)):快進與MP4格式視頻一致,可以10倍 20倍播放。
m3u8(動態(tài)):快進到了緩存不夠的地方,會走通知AVPlayerItemDidPlayToEndTimeNotification。
備注:使用[AVPlayerItem stepByCount:-24];
將AVPlayerItem 向前或向后移動指定的步數(shù),正數(shù)前進,負(fù)數(shù)后退。 每個步數(shù)的大小取決于AVPlayerItem啟用的AVPlayerItemTracks對象;
注冊監(jiān)聽和通知
本文講解的是 iOS 視頻播放, 支持本地,在線播放. 進度拖動,精準(zhǔn)跳轉(zhuǎn),獲取視頻的長度等問題
demo 記得點亮 star. 3Q
iOS 視頻播放主要使用的類 AVPlayerItem,AVPlayerLayer,AVPlayer
AVPlayerItem: 提供視頻信息, 利用視頻的 url 創(chuàng)建一個對象.利用 kvo 監(jiān)聽 status,可以獲取當(dāng)前視頻的狀態(tài).
AVPlayer: 就類似視頻的控制者. 可以用來控制視頻的播放,暫停,跳轉(zhuǎn)等. 它的創(chuàng)建依賴于AVPlayerItem
AVPlayerLayer: 用于視頻的顯示. 可以理解成一個 view. 它的創(chuàng)建依賴于AVPlayer
簡單總結(jié): AVPlayer控制視頻狀態(tài), AVPlayerLayer用于顯示,AVPlayerItem提供視頻信息
獲取視頻的長度 s
視頻精準(zhǔn)跳轉(zhuǎn).拖動 UISlider,監(jiān)聽 value 改變方法如下:
//為什么timescale要設(shè)置成 600 CMTime教程
筆者iOS開發(fā)工程師,現(xiàn)在很多應(yīng)用場景下都會用到視頻播放技術(shù),當(dāng)然iOS APP也不例外,這是寫這篇文章的背景。
最近我一個同樣做iOS工程師的同學(xué)說他最近面試了一個人,簡歷里寫著做過視頻播放,就問他基本的視頻播放原理是什么,結(jié)果此人一臉懵逼狀什么也沒答上來,只是說會用iOS SDK下調(diào)用視頻播放的幾個API。我同學(xué)跟我說他就是想問問此人計算機基礎(chǔ)怎么樣,其實只要應(yīng)聘者能說出“解碼”兩個字都會讓他滿意的,可惜他卻什么也沒說出來。這又讓筆者想起幾年前臨近大學(xué)畢業(yè)時同寢室友校招面試時也遇到了同樣的問題,他也做過視頻播放,人家就問他其中有兩個問題,一是如果現(xiàn)在有一種非常奇怪的格式的視頻讓你播放你該怎么辦,他也是懵逼了。二是如果現(xiàn)在有一個1G的超大視頻讓你播放,你又該怎么辦,他直接就傻了,面試自然折戟沉沙了。
事實上僅就iOS APP來講,要想做出視頻播放的功能來,的確是調(diào)用 AVFoundation 框架下幾個常用的API就可以了,iOS 9 之前常用的是 MPMoviePlayerController ,ios 9 之后推薦使用流播放技術(shù)的 AVPlayer ,可是就像常說的API普通的程序員都會調(diào),可是真正有專業(yè)基礎(chǔ)和想進階就要知其然還要知其所以然,有專業(yè)基礎(chǔ)的和半路出家的程序員的最大區(qū)別也正在于此,這也就成了本片文章寫作的契機,下面這些內(nèi)容也是筆者整合了一些自己的一些積累,主要來源于我們有合作關(guān)系的一家叫保利威視的視頻解決方案提供商,希望對大家有幫助,水平有限,有不足之處還請大家不吝賜教。
視音頻技術(shù)主要包含以下幾點:** 封裝技術(shù),視頻壓縮編碼技術(shù)以及音頻壓縮編碼技術(shù)。如果考慮到網(wǎng)絡(luò)傳輸?shù)脑挘€包括流媒體協(xié)議技術(shù)。**
視頻播放器播放網(wǎng)上的視頻文件,需要經(jīng)過以下幾個步驟:** 解協(xié)議,解封裝,解碼視音頻,視音頻同步**。如果播放本地文件則不需要解協(xié)議,為以下幾個步驟:解封裝,解碼視音頻,視音頻同步。過程如圖所示。
解協(xié)議的作用,就是將流媒體協(xié)議的數(shù)據(jù),解析為標(biāo)準(zhǔn)的相應(yīng)的封裝格式數(shù)據(jù)。視音頻在網(wǎng)絡(luò)上傳播的時候,常常采用各種流媒體協(xié)議,例如HTTP,RTMP,或是MMS等等。這些協(xié)議在傳輸視音頻數(shù)據(jù)的同時,也會傳輸一些信令數(shù)據(jù)。這些信令數(shù)據(jù)包括對播放的控制(播放,暫停,停止),或者對網(wǎng)絡(luò)狀態(tài)的描述等。解協(xié)議的過程中會去除掉信令數(shù)據(jù)而只保留視音頻數(shù)據(jù)。例如,采用RTMP協(xié)議傳輸?shù)臄?shù)據(jù),經(jīng)過解協(xié)議操作后,輸出FLV格式的數(shù)據(jù)。
解封裝的作用,就是將輸入的封裝格式的數(shù)據(jù),分離成為音頻流壓縮編碼數(shù)據(jù)和視頻流壓縮編碼數(shù)據(jù)。封裝格式種類很多,例如MP4,MKV,RMVB,TS,F(xiàn)LV,AVI等等,它的作用就是將已經(jīng)壓縮編碼的視頻數(shù)據(jù)和音頻數(shù)據(jù)按照一定的格式放到一起。例如,F(xiàn)LV格式的數(shù)據(jù),經(jīng)過解封裝操作后,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流。
解碼的作用,就是將視頻/音頻壓縮編碼數(shù)據(jù),解碼成為非壓縮的視頻/音頻原始數(shù)據(jù)。音頻的壓縮編碼標(biāo)準(zhǔn)包含AAC,MP3,AC-3等等,視頻的壓縮編碼標(biāo)準(zhǔn)則包含H.264,MPEG2,VC-1等等。解碼是整個系統(tǒng)中最重要也是最復(fù)雜的一個環(huán)節(jié)。通過解碼,壓縮編碼的視頻數(shù)據(jù)輸出成為非壓縮的顏色數(shù)據(jù),例如YUV420P,RGB等等;壓縮編碼的音頻 數(shù)據(jù)輸出成為非壓縮的音頻抽樣數(shù)據(jù),例如PCM數(shù)據(jù)。
視音頻同步的作用,就是根據(jù)解封裝模塊處理過程中獲取到的參數(shù)信息,同步解碼出來的視頻和音頻數(shù)據(jù),并將視頻音頻數(shù)據(jù)送至系統(tǒng)的顯卡和聲卡播放出來。
網(wǎng)站名稱:ios視頻播放開發(fā),ios開發(fā)視頻教程
分享URL:http://chinadenli.net/article15/dsepsdi.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站收錄、靜態(tài)網(wǎng)站、全網(wǎng)營銷推廣、外貿(mào)網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)