AVPlayer — แนวคิดหลัก คุณสมบัติและการใช้งาน

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-23 เวลาอ่าน: 9 นาที

AVPlayer คือเฟรมเวิร์กเครื่องเล่นมีเดียจาก Apple ซึ่งเป็นส่วนหนึ่งของ AVFoundation ที่ให้บริการเล่นเสียงและวิดีโอบน iOS, macOS, tvOS และ visionOS AVPlayer รองรับรูปแบบที่หลากหลาย ตั้งแต่ไฟล์ MP4 ในเครื่องไปจนถึงสตรีม HLS แบบปรับตัวได้ — ผ่าน API แบบครบวงจรพร้อมการถอดรหัสแบบเร่งด้วยฮาร์ดแวร์บนชิป Apple Silicon จากข้อมูลของ Apple WWDC (2024) AVPlayer ถูกใช้ใน 90% ของแอปพลิเคชัน iOS ที่ทำงานกับสื่อ รวมถึง Apple TV, Music และ Photos

ประเด็นสำคัญ

  • AVPlayer — เฟรมเวิร์กเครื่องเล่นมีเดียของ Apple จาก AVFoundation สำหรับทุกแพลตฟอร์มของ Apple
  • การเร่งด้วยฮาร์ดแวร์ — AVPlayer ใช้ VideoToolbox สำหรับการถอดรหัสบน GPU ลดการใช้พลังงาน
  • HLS — รองรับ HTTP Live Streaming แบบเนทีฟพร้อมสลับบิตเรตแบบปรับตัวอัตโนมัติ
  • Picture in Picture — รองรับโหมดภาพซ้อนภาพในตัวบน iPad, iPhone และ Mac
  • DRM — การผสานรวมกับ FairPlay Streaming เพื่อการป้องกันเนื้อหาระดับพรีเมียม

AVPlayer คืออะไร?

AVPlayer คือส่วนประกอบหลักของเฟรมเวิร์ก AVFoundation ที่รับผิดชอบการเล่นมัลติมีเดียบนทุกแพลตฟอร์มของ Apple เปิดตัวใน iOS 4.0 (2010) เพื่อแทนที่ MPMoviePlayerController ที่เลิกใช้แล้ว AVPlayer ให้การควบคุมระดับต่ำเหนือการเล่นด้วยการปรับแต่งพารามิเตอร์การถอดรหัสอย่างละเอียด การซิงโครไนซ์เสียงและวิดีโอ และการผสานรวมกับบริการระบบ เช่น AirPlay และ Picture in Picture

แตกต่างจากเครื่องเล่นของบุคคลที่สาม AVPlayer ได้รับประโยชน์จากการเร่งด้วยฮาร์ดแวร์บนชิป Apple Silicon การถอดรหัสวิดีโอดำเนินการผ่าน VideoToolbox โดยใช้เอ็นจินมีเดียเฉพาะของ M-series (Media Engine) ทำให้สามารถเล่น 8K HDR โดยใช้พลังงานน้อยที่สุด สำหรับ HEVC (H.265) และ ProRes การถอดรหัสเกิดขึ้นบนบล็อกชิปเฉพาะโดยไม่ทำให้ CPU ทำงานหนัก

AVPlayer ผสานรวมอย่างใกล้ชิดกับระบบนิเวศของ Apple: รองรับ Handoff สำหรับการถ่ายโอนการเล่นระหว่างอุปกรณ์ AirPlay 2 สำหรับสตรีมมิ่งไปยัง Apple TV เสียงเชิงพื้นที่พร้อมการติดตามศีรษะแบบไดนามิก และการซิงโครไนซ์กับองค์ประกอบควบคุมระบบผ่าน MPNowPlayingInfoCenter การผสานรวมเหล่านี้ทำให้ AVPlayer เป็นมาตรฐานโดยพฤตินัยสำหรับแอปพลิเคชันทั้งหมดที่ทำงานกับสื่อบนแพลตฟอร์ม Apple

AVFoundation และลำดับชั้นคลาส

เฟรมเวิร์ก AVFoundation ให้ลำดับชั้นสามระดับสำหรับการเล่น: AVAsset (เมตาดาต้าและข้อมูลเนื้อหา), AVPlayerItem (สถานะและการจัดการอินสแตนซ์เนื้อหาเฉพาะ) และ AVPlayer (การควบคุมการเล่น) สถาปัตยกรรมนี้แยกการโหลดเมตาดาต้า การเตรียมการเล่น และกระบวนการเล่นออกจากกัน ซึ่งสำคัญอย่างยิ่งสำหรับสตรีม HLS ที่มีตัวเลือกบิตเรตหลายแบบ

AVAsset แสดงถึงโมเดลเนื้อหาสื่อ — ไฟล์หรือสตรีม AVAsset ไม่สามารถเล่นได้ด้วยตัวเอง ประกอบด้วยแทร็ก (AVAssetTrack), เมตาดาต้า (commonMetadata), ข้อมูลระยะเวลา และคุณลักษณะอื่นๆ AVPlayerItem ถูกสร้างขึ้นจาก AVAsset ซึ่งสามารถส่งต่อไปยัง AVPlayer เพื่อเล่นได้

คุณสมบัติหลักของ AVPlayer

AVPlayer ให้ความสามารถที่ครอบคลุมสถานการณ์การเล่นส่วนใหญ่ ตั้งแต่การเล่นไฟล์ธรรมดาไปจนถึงการถ่ายทอดสดที่ซับซ้อนด้วย DRM มาสำรวจคุณสมบัติหลักพร้อมตัวอย่างการใช้งาน

คุณสมบัติคำอธิบายแพลตฟอร์ม
ไฟล์ในเครื่องMP4, MOV, M4V, AVI, MKV (ผ่านส่วนขยาย)iOS, macOS, tvOS
HLSHTTP Live Streaming พร้อม ABR แบบปรับตัวทุกแพลตฟอร์ม Apple
FairPlay DRMเนื้อหา HLS ที่ป้องกันด้วยใบอนุญาตสตรีมมิ่งiOS, tvOS, macOS
Picture in Pictureหน้าต่างวิดีโอลอยเหนือแอปอื่นๆiPad, iPhone (iOS 14+), Mac
AirPlay 2สตรีมมิ่งไร้สายไปยัง Apple TV และลำโพงทุกแพลตฟอร์ม
เสียงเชิงพื้นที่Dolby Atmos และการติดตามศีรษะแบบไดนามิกiOS 15+, macOS 13+
HDRDolby Vision, HDR10, HLG พร้อมรองรับจอแสดงผลiOS 11+, macOS 10.13+

การรองรับ HLS และการสลับแบบปรับตัว

AVPlayer รองรับ HLS แบบเนทีฟโดยไม่ต้องใช้ไลบรารีเพิ่มเติม เมื่อเล่นสตรีม HLS AVPlayer จะจัดการการสลับบิตเรตแบบปรับตัวโดยอัตโนมัติโดยใช้อัลกอริทึม ABR ในตัวที่ปรับให้เหมาะสมสำหรับแพลตฟอร์ม Apple อัลกอริทึมพิจารณาไม่เพียงแต่แบนด์วิธเครือข่าย แต่ยังรวมถึงสถานะความร้อนของอุปกรณ์ด้วย — เมื่อร้อนเกินไป AVPlayer อาจลดบิตเรตเพื่อลดภาระ CPU

สำหรับสตรีม HLS กับ FairPlay Streaming AVPlayer จะจัดการการรับและต่ออายุใบอนุญาตโดยอัตโนมัติผ่านตัวแทน AVContentKeySession นักพัฒนาต้องใช้งานโปรโตคอล AVContentKeySessionDelegate ซึ่งเครื่องเล่นจะเรียกเมื่อจำเป็นต้องรับหรือต่ออายุคีย์ถอดรหัส นี่เป็นวิธีเดียวในการปกป้องเนื้อหา HLS บนแพลตฟอร์ม Apple เนื่องจาก Widevine ไม่รองรับบน iOS

Picture in Picture

PiP คือโหมดที่อนุญาตให้ผู้ใช้ดูวิดีโอในหน้าต่างลอยต่อไปเมื่อสลับระหว่างแอป บน iPad และ iPhone (iOS 14+) AVPlayer ผสานรวมกับ AVPictureInPictureController เพื่อเปิดใช้โหมดนี้ บน macOS 15+ PiP ก็มีให้เช่นกัน แต่เปิดใช้งานผ่านเมนูระบบหรือปุ่มในหน้าต่างเครื่องเล่น

วิธีใช้ AVPlayer ในแอป iOS

การผสานรวม AVPlayer ในแอป iOS สามารถทำได้สองวิธี: ผ่าน AVPlayerViewController ระดับสูง (สำหรับสถานการณ์มาตรฐาน) หรือโดยตรงผ่าน AVPlayer + AVPlayerLayer (สำหรับการปรับแต่ง UI อย่างเต็มที่) มาสำรวจทั้งสองวิธีใน Swift

การผสานรวมผ่าน AVPlayerViewController

AVPlayerViewController คือส่วนประกอบ UI ที่พร้อมใช้งานซึ่งมีตัวควบคุมในตัว: เล่น/หยุดชั่วคราว ค้นหา ระดับเสียง AirPlay PiP และโหมดเต็มหน้าจอ การผสานรวมขั้นต่ำต้องการโค้ดเพียงไม่กี่บรรทัด: สร้างอินสแตนซ์ AVPlayer ส่งต่อไปยัง AVPlayerViewController และแสดงตัวควบคุมบนหน้าจอ

swift
import AVKit

let url = URL(string: "https://example.com/video.mp4")!
let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)

let controller = AVPlayerViewController()
controller.player = player
controller.allowsPictureInPicturePlayback = true

present(controller, animated: true) {
    player.play()
}

การผสานรวมโดยตรงผ่าน AVPlayerLayer

สำหรับแอปที่มี UI แบบกำหนดเอง ให้ใช้ AVPlayerLayer — เลเยอร์ Core Animation ที่เรนเดอร์วิดีโอภายใน UIView ใดๆ วิธีนี้ให้การควบคุมอินเทอร์เฟซอย่างเต็มที่: คุณสามารถเพิ่มตัวควบคุมแบบกำหนดเอง แอนิเมชัน และเลเยอร์เพิ่มเติมบนวิดีโอ

swift
class VideoPlayerView: UIView {

    var player: AVPlayer? {
        get { (layer as! AVPlayerLayer).player }
        set { (layer as! AVPlayerLayer).player = newValue }
    }

    override class var layerClass: AnyClass {
        AVPlayerLayer.self
    }
}

// การใช้งาน:
let playerView = VideoPlayerView(frame: view.bounds)
playerView.player = AVPlayer(url: url)
view.addSubview(playerView)

การจัดการวงจรชีวิตของ AVPlayer

การจัดการวงจรชีวิตเครื่องเล่นอย่างถูกต้องมีความสำคัญต่อความเสถียรของแอป AVPlayer ควรถูกสร้างขึ้นเมื่อหน้าจอปรากฏและปล่อยเมื่อปิด เมื่อแอปเข้าสู่พื้นหลัง แนะนำให้หยุดการเล่นชั่วคราวเพื่อประหยัดทรัพยากรและหลีกเลี่ยงบทลงโทษจาก App Review สำหรับการเล่นพื้นหลังที่ไม่จำเป็น

AVPlayerLayer และการแสดงวิดีโอ

AVPlayerLayer คือเลเยอร์ Core Animation ที่สืบทอดจาก CALayer ซึ่งเรนเดอร์วิดีโอบนหน้าจอ แตกต่างจาก UIView AVPlayerLayer ทำงานโดยตรงกับ GPU ผ่าน Metal หรือ OpenGL ทำให้มั่นใจได้ถึงความหน่วงในการส่งออกเฟรมน้อยที่สุด การทำความเข้าใจ AVPlayerLayer เป็นสิ่งจำเป็นสำหรับการใช้งานอินเทอร์เฟซการเล่นแบบกำหนดเอง

การกำหนดค่า videoGravity

คุณสมบัติ videoGravity กำหนดว่าวิดีโอพอดีภายในขอบเขตเลเยอร์อย่างไร AVLayerVideoGravity.resizeAspect (รักษาอัตราส่วนภาพด้วยแถบดำ) เป็นค่าเริ่มต้นสำหรับ AVPlayerViewController resizeAspectFill (เต็มหน้าจอด้วยการครอบตัด) ใช้สำหรับโหมดเต็มหน้าจอ resize (บิดเบือนสัดส่วนให้พอดีกับขนาดเลเยอร์) ไม่ค่อยได้ใช้ ส่วนใหญ่สำหรับแอปพลิเคชันวิเคราะห์

การซิงโครไนซ์กับเธรดหลัก

AVPlayerLayer เรนเดอร์วิดีโอแบบเรียลไทม์ แต่การดำเนินการของเครื่องเล่นทั้งหมด (เริ่ม, หยุดชั่วคราว, ค้นหา) ต้องดำเนินการบนเธรดหลัก ค่าหลักสำหรับการสังเกต — timeControlStatus, rate, status และ error — จะถูกติดตามผ่าน KVO (Key-Value Observing) หรือ API async/await สมัยใหม่ที่นำมาใช้ใน iOS 16 ผ่านวิธีการของ AVPlayer ที่รองรับ Swift Concurrency

swift
let player = AVPlayer(url: url)
let statusObservation = player.observe(
    \.status,
    options: [.new, .initial]
) { player, _ in
    switch player.status {
    case .readyToPlay:
        player.play()
    case .failed:
        handleError(player.error)
    default:
        break
    }
}

การรองรับคำบรรยายและแทร็กทางเลือก

AVPlayer รองรับคำบรรยายแบบฝังในรูปแบบ VTT, CEA-608 และ ITT (iTunes Timed Text) การเลือกแทร็กเสียงและคำบรรยายทำผ่าน AVMediaSelectionGroup และ AVMediaSelectionOption การตั้งค่าคำบรรยายของผู้ใช้ (แบบอักษร, ขนาด, สี) จะถูกอ่านจากการตั้งค่าการช่วยเหลือระบบและนำไปใช้กับ AVPlayerLayer โดยอัตโนมัติ เว้นแต่จะระบุไว้อย่างชัดเจนในโค้ด

การจัดการการเล่นและสถานการณ์ขั้นสูง

สำหรับแอปพลิเคชันในระดับโปรดักชัน การผสานรวม AVPlayer พื้นฐานมักต้องการการกำหนดค่าเพิ่มเติม: การแคชส่วน HLS, การผสานรวม FairPlay DRM, การผสานรวมระบบ Now Playing และอัลกอริทึมการเลือกบิตเรตแบบกำหนดเอง

การแคช HLS ผ่าน AVAssetResourceLoader

AVAssetResourceLoader เป็นวิธีเดียวในการสกัดกั้นการโหลดส่วน HLS และใช้งานการแคช ตัวแทน AVAssetResourceLoaderDelegate รับคำขอโหลดสำหรับคีย์และส่วน ทำให้สามารถจัดเก็บในเครื่องและส่งคืนจากแคชในการร้องขอครั้งต่อไป ซึ่งมีประโยชน์โดยเฉพาะสำหรับแอปพลิเคชันที่ทำงานในสภาวะเครือข่ายไม่เสถียร

swift
let asset = AVURLAsset(url: hlsURL)
asset.resourceLoader.setDelegate(
    resourceLoaderDelegate,
    queue: DispatchQueue(label: "com.app.resourceloader")
)
let playerItem = AVPlayerItem(asset: asset)

FairPlay Streaming — การผสานรวม DRM

FairPlay Streaming (FPS) คือมาตรฐานของ Apple สำหรับการป้องกันเนื้อหา HLS ในการผสานรวม FPS คุณต้องใช้งานโปรโตคอล AVContentKeySessionDelegate ซึ่งจัดการคำขอคีย์ถอดรหัส กระบวนการรวมถึง: การรับ SPC (บริบทการเล่นเซิร์ฟเวอร์) จากเครื่องเล่น ส่งไปยังเซิร์ฟเวอร์ใบอนุญาต รับ CKC (บริบทคีย์เนื้อหา) และส่งกลับไปยัง AVContentKeySession

swift
class DRMDelegate: NSObject, AVContentKeySessionDelegate {

    func contentKeySession(
        _ session: AVContentKeySession,
        didProvide keyRequest: AVContentKeyRequest
    ) {
        // 1. รับ SPC จาก keyRequest
        // 2. ส่ง SPC ไปยังเซิร์ฟเวอร์ใบอนุญาต
        // 3. รับ CKC และส่งต่อไปยัง keyRequest.processContentKeyResponse
    }
}

Now Playing และการควบคุมระบบ

เพื่อแสดงข้อมูลการเล่นปัจจุบันบนหน้าจอล็อก ศูนย์ควบคุม และ Apple Watch ให้ใช้ MPNowPlayingInfoCenter จาก MediaPlayer.framework AVPlayer ไม่อัปเดต Now Playing โดยอัตโนมัติ — นักพัฒนาต้องตั้งค่าเมตาดาต้า (ชื่อ, ศิลปิน, ภาพปก, ความคืบหน้า) ด้วยตนเองเมื่อสถานะการเล่นเปลี่ยนแปลง ตัวจับเวลาปกติหรือ observe(\.timeControlStatus) ใช้สำหรับอัปเดตความคืบหน้า

Remote Command Center เป็นบริการระบบอีกอย่างที่อนุญาตให้ควบคุมการเล่นจากหน้าจอล็อก AirPods และ CarPlay MPRemoteCommandCenter ลงทะเบียนตัวจัดการสำหรับคำสั่ง play, pause, nextTrack, previousTrack, changePlaybackPosition และ skipForward/skipBackward AVPlayer ไม่จัดการคำสั่งเหล่านี้โดยอัตโนมัติ — นักพัฒนาต้องเชื่อมต่อกับคำสั่ง player.play(), player.pause() และ player.seek()

คำถามที่พบบ่อย

AVPlayer แตกต่างจาก AVAudioPlayer อย่างไร?

AVPlayer คือเครื่องเล่นสากลสำหรับเสียงและวิดีโอที่รองรับสตรีมมิ่ง HLS DRM และการซิงโครไนซ์กับระบบควบคุม AVAudioPlayer คือเครื่องเล่นเสียงแบบง่ายสำหรับการเล่นไฟล์เสียงในเครื่องโดยไม่รองรับสตรีมมิ่งหรือการเร่งวิดีโอด้วยฮาร์ดแวร์ สำหรับวิดีโอและ HLS ใช้ AVPlayer สำหรับเสียงแบบง่าย ใช้ AVAudioPlayer

AVPlayer รองรับการเล่น YouTube หรือไม่?

ไม่ AVPlayer ไม่รองรับการโหลดเนื้อหา YouTube โดยตรง เนื่องจาก YouTube ใช้เครื่องเล่นของตัวเองที่ใช้ DASH และรูปแบบกรรมสิทธิ์ ในการผสานรวม YouTube ในแอป iOS ให้ใช้ YouTube IFrame Player API ผ่าน WKWebView หรือไลบรารีอย่างเป็นทางการ youtube-ios-player-helper

วิธีใช้งานการเล่นเสียงพื้นหลังกับ AVPlayer?

สำหรับเสียงพื้นหลัง ให้เพิ่ม Audio, AirPlay and Picture in Picture ในโหมดพื้นหลังของโปรเจกต์ Xcode ของคุณ กำหนดค่า AVAudioSession ด้วยหมวดหมู่ .playback: try AVAudioSession.sharedInstance().setCategory(.playback) AVPlayer จะเล่นต่อในพื้นหลัง และหน้าจอล็อกและศูนย์ควบคุมจะแสดงการควบคุมผ่าน MPNowPlayingInfoCenter

ทำไม AVPlayer ถึงไม่เล่นวิดีโอจาก YouTube, Vimeo หรือ Twitter?

บริการเหล่านี้ใช้การป้องกัน DRM และโซลูชันเครื่องเล่นของตัวเอง AVPlayer สามารถเล่นเนื้อหาผ่าน URL ไฟล์สื่อโดยตรงหรือเพลย์ลิสต์ HLS เท่านั้น วิดีโอจาก YouTube และแพลตฟอร์มที่คล้ายกันถูกห่อหุ้มใน iframe หรือ JavaScript ซึ่งเข้ากันไม่ได้กับ AVPlayer ใช้ SDK อย่างเป็นทางการหรือ WebView สำหรับการแสดงผล

วิธีลดความหน่วงในการถ่ายทอดสดผ่าน AVPlayer?

สำหรับ HLS หน่วงต่ำ ให้กำหนดค่า AVPlayerItem ด้วย preferredForwardBufferDuration = 2.0 (วินาที) และจัดการการหยุดชั่วคราวโดยอัตโนมัติเมื่อตามขอบสดไม่ทัน: ใช้ player.currentItem?.configuredTimeOffsetFromLive และ player.currentItem?.canPlayReverse Apple แนะนำ LL-HLS ด้วยความหน่วง 2-4 วินาทีเมื่อกำหนดค่าอย่างถูกต้องทั้งบนเซิร์ฟเวอร์และไคลเอ็นต์

สรุป

  • AVPlayer — เครื่องเล่นมีเดียสากลของ Apple พร้อมการเร่งด้วยฮาร์ดแวร์บน Apple Silicon สำหรับ iOS, macOS, tvOS และ visionOS
  • HLS — รองรับแบบเนทีฟพร้อมสลับบิตเรตแบบปรับตัวอัตโนมัติโดยไม่ต้องใช้ไลบรารีเพิ่มเติม
  • FairPlay Streaming — ระบบ DRM เพียงระบบเดียวสำหรับ HLS ที่ป้องกันบนแพลตฟอร์ม Apple
  • การผสานรวม — AVPlayerViewController สำหรับเริ่มต้นอย่างรวดเร็วหรือ AVPlayerLayer สำหรับ UI แบบกำหนดเอง
  • การแคช HLS ใช้งานผ่าน AVAssetResourceLoaderDelegate โดยการสกัดกั้นคำขอส่วน
  • Now Playing — อัปเดตเมตาดาต้าด้วยตนเองสำหรับศูนย์ควบคุมและหน้าจอล็อกผ่าน MPNowPlayingInfoCenter
  • แนะนำให้ใช้ AVPlayer สำหรับโปรเจกต์มีเดียทั้งหมดบนแพลตฟอร์ม Apple ที่มีความต้องการ HLS

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม