最近工作之余, 寫了一個視頻播放器,輸入要播放的視頻資源地址,即可實現(xiàn)播放功能。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名申請、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、勐海網(wǎng)站維護、網(wǎng)站推廣。
目前功能比較簡單,支持鎖屏、屏幕旋轉(zhuǎn)等基礎功能,后續(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 為技術實現(xiàn)方案。
框架在此就不講解了,官網(wǎng)講的比較清楚,不懂的可以查看官檔。 - 戳這里
監(jiān)聽視頻資源的加載狀態(tài), 根據(jù)不同的狀態(tài)進行相應的操作。
更新視頻資源的播放進度。
實現(xiàn)控制視圖 QYPlayerControlView 的Delegate。 當控制視圖進行了相應操作,事件被傳遞到該類中進行統(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)添加成功!
以上便是整個播放器的源碼解析,具體的細節(jié)請查看源碼。
源碼放在GitHub上了,想查看的小伙伴可以 -戳這里。
千里之行,始于足下。
本文講解的是 iOS 視頻播放, 支持本地,在線播放. 進度拖動,精準跳轉(zhuǎn),獲取視頻的長度等問題
demo 記得點亮 star. 3Q
iOS 視頻播放主要使用的類 AVPlayerItem,AVPlayerLayer,AVPlayer
AVPlayerItem: 提供視頻信息, 利用視頻的 url 創(chuàng)建一個對象.利用 kvo 監(jiān)聽 status,可以獲取當前視頻的狀態(tài).
AVPlayer: 就類似視頻的控制者. 可以用來控制視頻的播放,暫停,跳轉(zhuǎn)等. 它的創(chuàng)建依賴于AVPlayerItem
AVPlayerLayer: 用于視頻的顯示. 可以理解成一個 view. 它的創(chuàng)建依賴于AVPlayer
簡單總結: AVPlayer控制視頻狀態(tài), AVPlayerLayer用于顯示,AVPlayerItem提供視頻信息
獲取視頻的長度 s
視頻精準跳轉(zhuǎn).拖動 UISlider,監(jiān)聽 value 改變方法如下:
//為什么timescale要設置成 600 CMTime教程
實現(xiàn) iOS開發(fā)webrtc 視頻通話時錄像,截屏推薦ZEGO即構科技,4行代碼,30分鐘在APP、Web和小程序等應用內(nèi)實現(xiàn)視頻通話、語音通話,互動直播功能。【點擊免費試用,0成本啟動】
實現(xiàn) iOS開發(fā)webrtc 視頻通話時錄像,截屏的具體步驟如下:
1.權限申請。
2.引入 WebRTC 庫。
3.采集并顯示本地視頻。
4.信令驅(qū)動。
5.創(chuàng)建音視頻數(shù)據(jù)通道。
6.媒體協(xié)商。
7.渲染遠端視頻。
想要了解更多關于webrtc的相關信息,推薦咨詢ZEGO即構科技。ZEGO即構科技自主研發(fā)的高音質(zhì)語音視頻引擎,能夠提供實時清晰的多人語音通話獨立自研的語音前處理模塊(AEC, NS, AGC)能夠提供優(yōu)于同類競品的處理效果,支持全帶語音處理。良好的抖動緩沖、前向糾錯和丟幀補償技術使引擎適應復雜的網(wǎng)絡環(huán)境,提供低延時清晰流暢的語音視頻通話,在較差網(wǎng)絡環(huán)境中自適應的找到延時與流暢的最佳契合點。
快進: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ù)前進,負數(shù)后退。 每個步數(shù)的大小取決于AVPlayerItem啟用的AVPlayerItemTracks對象;
注冊監(jiān)聽和通知