聊聊用原生 iOS 播放器打造良好的播放體驗

AppDev Ooops
AppDev Ooops
Published in
7 min readJan 18, 2023

這篇文章想跟你分享:

在開發 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 】

當影片暫停時,可以直接選取影片中的文字:

左: iPad 長按文字/ 右:Mac 滑鼠點選
open var allowsVideoFrameAnalysis: Bool { get }

在 iOS 的 AVPlayerViewController以及macOS AVPlayerView 都有這個屬性,當它為 true ,且影片暫停時,AVKit 會分析當下的影格。不過有些狀況會建議設為 false

  • 很耗效能的 app (例:一整面 collection view 都是影片)
  • 不開放使用者跟影片有互動的(例: Splash screens)

【 Playback Speed 】

播放器顯示播放速度選擇清單(iOS)

若需要調整播放速度選項的話,可以在 AVKit 內的 Class AVPlaybackSpeed 進行調整:

播放速度調整:AVPlaybackSpeed Class 內容
  • rate初始化時定義,當此AVPlaybackSpeed被選擇時,rate 就會被套用至播放器
  • localized nameAVPlaybackSpeed在 Accessibility System 的命名。 例: 2.5 倍速可能會被定義為 “Two and a half times speeds”
  • localizedNumericName會從 rate 生成字串顯示在播放速度選單上。若在播放器以外的地方客製播放速度選單的話,就用這個屬性來顯示速度
  • systemDefaultSpeedsAVPlaybackSpeed 自行定義一系列的預設播放速度選項

定義完播放速度的 Class 後,該怎麼使用在播放器上呢?

AVPlayerViewController AVPlayerView 有新的屬性叫做 speed

AVPlayerView 中可指定 speed 屬性的值
  • speed可以放客製播放速度選單內的選項,預設是 AVPlaybackSpeed.systemDefaultSpeeds。 如果把輸入設成空值的則會隱藏播放速度選單
  • selectedSpeed取得目前的播放速度
  • func var selectedSpeed(_ speed: AVPlaybackSpeed) 開放接口讓開發者用程式碼選擇速度。(只有客製播放速度選單才需用到此方法。)

題外話,如果需要新增其他播放速度可以使用:

使用 AVPlayback 新增其他播放速度選項

小結

本文介紹了 iOS 原生播放器的新設計和新功能,讓開發者使用原生播放器達到事半功倍的效果。如果對更多細節有興趣的話,歡迎到下方連結研究更多,也歡迎有任何問題可以留言或者寄 Email 給我們!我們下篇文章見!

資料來源:

--

--