0Pricing
Swift Academy · บทเรียน

การเล่นสื่อด้วย AVPlayer

สตรีมและเล่นทรัพยากรเสียงกับวิดีโอ

การเล่นสื่อด้วย AVPlayer เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

AVFoundation สำหรับสื่อ

AVFoundation เป็นเฟรมเวิร์กของ Apple สำหรับจัดการสื่อภาพและเสียงที่อิงตามเวลา ทั้งการเล่น การบันทึก การตัดต่อ และการส่งออก

คลาสหลักสำหรับการเล่นคือ AVPlayer

import AVFoundation

AVPlayer และ AVPlayerItem

AVPlayer ควบคุมการเล่น ส่วน AVPlayerItem แทนสื่อที่กำลังเล่นและติดตามสถานะของสื่อนั้น โดยมี AVAsset เป็นแหล่งข้อมูลของรายการ

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

การเริ่มและหยุดชั่วคราว

ควบคุมการเล่นด้วย play(), pause() และ seek(to:) การเล่นจะเริ่มจากเวลาปัจจุบัน

player.play()
// later
player.pause()

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

หากต้องการแสดงวิดีโอใน UIKit ให้ฝัง AVPlayerLayer ไว้ในมุมมอง เลเยอร์นี้จะแสดงผลภาพจากเครื่องเล่น

let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
playerLayer.videoGravity = .resizeAspect
view.layer.addSublayer(playerLayer)

การสังเกตสถานะ

AVPlayerItem รายงาน status คุณสามารถสังเกตค่านี้เพื่อทราบว่าสื่อ readyToPlay แล้วหรือเกิด failed

let observation = item.observe(\.status) { item, _ in
    if item.status == .readyToPlay {
        player.play()
    }
}

การติดตามเวลา

ใช้ addPeriodicTimeObserver เพื่ออัปเดตส่วนติดต่อผู้ใช้แสดงความคืบหน้าขณะที่การเล่นดำเนินไป ค่าเวลาจะอยู่ในรูปของ CMTime

let interval = CMTime(seconds: 0.5, preferredTimescale: 600)
player.addPeriodicTimeObserver(forInterval: interval, queue: .main) { time in
    let seconds = time.seconds
    print("at \(seconds)s")
}

พื้นฐานของ CMTime

CMTime จัดเก็บเวลาเป็นจำนวนตรรกยะ (ค่าเทียบกับมาตราส่วนเวลา) เพื่อความแม่นยำระดับตัวอย่าง มาตราส่วนเวลา 600 สามารถหารด้วยอัตราเฟรมทั่วไปได้ลงตัว

let t = CMTime(seconds: 5, preferredTimescale: 600)
let half = CMTimeMultiplyByFloat64(t, multiplier: 0.5)

การเลื่อนไปยังเวลาอย่างแม่นยำ

seek(to:toleranceBefore:toleranceAfter:) ที่มีค่าความคลาดเคลื่อนเป็นศูนย์จะทำให้เลื่อนไปยังเวลาได้แม่นยำระดับเฟรม แต่ต้องใช้การถอดรหัสมากขึ้น

let target = CMTime(seconds: 30, preferredTimescale: 600)
player.seek(to: target, toleranceBefore: .zero, toleranceAfter: .zero)

เมื่อเล่นถึงจุดสิ้นสุด

สังเกต AVPlayerItem.didPlayToEndTimeNotification เพื่อตรวจจับเมื่อเล่นจบ จากนั้นจึงเล่นวน ปิดรายการ หรือแสดงรายการถัดไป

NotificationCenter.default.addObserver(
    forName: .AVPlayerItemDidPlayToEndTime,
    object: item, queue: .main) { _ in
    player.seek(to: .zero)
    player.play() // loop
}

เซสชันเสียงสำหรับการเล่น

เพื่อให้เสียงเล่นได้อย่างถูกต้อง (และเล่นต่อในเบื้องหลังได้เมื่อกำหนดค่าไว้) ให้ตั้งค่า AVAudioSession ด้วยหมวดหมู่ที่เหมาะสม

let session = AVAudioSession.sharedInstance()
try? session.setCategory(.playback)
try? session.setActive(true)

AVQueuePlayer สำหรับรายการเล่น

AVQueuePlayer สืบทอดจาก AVPlayer เพื่อเล่นรายการสื่อตามคิวทีละรายการ เหมาะสำหรับรายการเล่นและฟีดวิดีโอแบบต่อเนื่อง

let queue = AVQueuePlayer(items: [item1, item2, item3])
queue.play()

ตรวจสอบความเข้าใจอย่างรวดเร็ว: AVPlayer

ทดสอบความเข้าใจเกี่ยวกับการเล่นด้วย AVPlayer ของคุณ

ทบทวน: การเล่นสื่อด้วย AVPlayer

AVPlayer ควบคุมการเล่นของ AVPlayerItem ที่มี AVAsset เป็นแหล่งข้อมูล ส่วน AVPlayerLayer จะแสดงผลวิดีโอ สังเกต status ของรายการ ติดตามความคืบหน้าด้วยตัวสังเกต CMTime แบบเป็นช่วง เลื่อนไปยังเวลาอย่างแม่นยำด้วยค่าความคลาดเคลื่อนเป็นศูนย์ และจัดการการแจ้งเตือนเมื่อเล่นจบ

กำหนดค่า AVAudioSession เพื่อให้เสียงทำงานอย่างถูกต้อง และใช้ AVQueuePlayer สำหรับรายการเล่น

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

บทเรียน “การเล่นสื่อด้วย AVPlayer” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเล่นสื่อด้วย AVPlayer” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเล่นสื่อด้วย AVPlayer”

สตรีมและเล่นทรัพยากรเสียงกับวิดีโอ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การเล่นสื่อด้วย AVPlayer” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเล่นสื่อด้วย AVPlayer
  2. การบันทึกเสียง
  3. AVAsset และ Composition
  4. การฝังตัวเล่นใน SwiftUI
← กลับไปที่ Swift Academy