聊聊用原生 iOS 播放器打造良好的播放體驗
這篇文章想跟你分享:
在開發 App 的過程資源有限的情況下,往往選擇花費主要時間堆疊出新功能,但是在「播放體驗」上便容易被忽略。 此時便可利用原生 iOS 播放器提供的完整功能,快速搭建良好的播放體驗。這篇文章一起來看看如何使用 iOS 原生播放器打造良好的播放體驗吧!
【 Create a great video playback experience — WWDC22 — Apple 】
播放體驗三要素
一個良好的播放體驗需要注意三個重點:
- 直覺性(Intuitive)
- 整合性(Integrated)
- 內容導向(Content Forward)
【 Intuitive 】
設計上不需要過多解釋使用方法,使用者自然知道如何操作。這些直覺是從人們生活的經驗而來,做出讓使用者覺得熟悉的界面。介面設計可以來自其他播放媒介,像是電視遙控器可操控上下首、Mute 按鈕按了會靜音,將類似的介面套用在 App 中,可以減少使用者的學習成本。
直覺也可以是日常生活中的現象,以玩具車為例:玩具車滑出去之後,會漸慢接著停止,手按住車子的話,車子會馬上停止。播放器的拖曳時間軸功能,就是以玩具車為藍本,可以根據手指的操作控制播放功能。例如:按在螢幕上會停止、影片快進或快退的速度能夠根據手指滑動的速度動態調整。
【 Integrated 】
讓 App 在 iOS 中融為一體,例如:拉下 Control Center 可以在 Now Playing Media Controls 看到現在正在看的影片,或者從通知點擊訊息時,正在看的影片會縮小成 Picture in Picture 的佈局,減少觀看過程的空隙。
以下簡單列出幾個幫助 App 與 iOS 整合的工具:
- CoreSpotlight Integration: 讓 App 可以在 CoreSpotlight 被搜尋到
- Now Playing Info: 讓 App 的播放內容、資訊可以呈現在系統的介面
- MediaRemote Commands: 讓 App 可以接收鍵盤或者遙控器的操作
- TV App Integration: 把 App 整合進 TV App
最好的狀況是,提供使用者會想要用的功能
- AirPlay
- SharePlay
- Picture in Picture
以及滿足各種輸入:
- TV Remotes
- Keyboard
- TrackPad / Mouse
- Game Controller
- Headphone Controls
【 Content Forward 】
App 內提供的影音內容才是用戶使用 App 的目的,因此 App 應該以內容為出發點設計,所以應該確保提供足夠多的資訊:
- 主標題、副標題、描述、片縮圖
- 季數及集數資訊
- 直播開始與結束的時間
- 讓 Media 維持原始顯示比例
- 確保支援最新的影片播放標準 (例如:HDR、 Dolby Atmos)
- 確保音軌跟字幕有多國語言
AVPlayerViewController
為了達到上述三點要素,可以使用 AVPlayerViewController
的幾項新功能:
AVPlayerViewContoller
內建影片資訊- Visual Intelligence
- Playback Speed
【 AVPlayerViewContoller 內建影片資訊 】
使用 AVPlayerViewController
內建的 AVmetadataItem
可以輕易顯示影片資訊。上圖左邊框起來的程式碼分別對應到右邊手機螢幕裡的影片資訊。綠色框框的箭頭點開,會展開詳細描述。
【 Visual Intelligence 】
當影片暫停時,可以直接選取影片中的文字:
open var allowsVideoFrameAnalysis: Bool { get }
在 iOS 的 AVPlayerViewController
以及macOS AVPlayerView
都有這個屬性,當它為 true
,且影片暫停時,AVKit
會分析當下的影格。不過有些狀況會建議設為 false
:
- 很耗效能的 app (例:一整面 collection view 都是影片)
- 不開放使用者跟影片有互動的(例: Splash screens)
【 Playback Speed 】
若需要調整播放速度選項的話,可以在 AVKit
內的 Class AVPlaybackSpeed
進行調整:
rate
:初始化時定義,當此AVPlaybackSpeed
被選擇時,rate
就會被套用至播放器localized name
:此AVPlaybackSpeed
在 Accessibility System 的命名。 例: 2.5 倍速可能會被定義為 “Two and a half times speeds”localizedNumericName
:會從rate
生成字串顯示在播放速度選單上。若在播放器以外的地方客製播放速度選單的話,就用這個屬性來顯示速度systemDefaultSpeeds
:AVPlaybackSpeed
自行定義一系列的預設播放速度選項
定義完播放速度的 Class 後,該怎麼使用在播放器上呢?
AVPlayerViewController
AVPlayerView
有新的屬性叫做 speed
。
speed
:可以放客製播放速度選單內的選項,預設是AVPlaybackSpeed.systemDefaultSpeeds
。 如果把輸入設成空值的則會隱藏播放速度選單selectedSpeed
:取得目前的播放速度func var selectedSpeed(_ speed: AVPlaybackSpeed)
: 開放接口讓開發者用程式碼選擇速度。(只有客製播放速度選單才需用到此方法。)
題外話,如果需要新增其他播放速度可以使用:
小結
本文介紹了 iOS 原生播放器的新設計和新功能,讓開發者使用原生播放器達到事半功倍的效果。如果對更多細節有興趣的話,歡迎到下方連結研究更多,也歡迎有任何問題可以留言或者寄 Email 給我們!我們下篇文章見!
資料來源: