การเล่นสื่อด้วย AVPlayer
สตรีมและเล่นทรัพยากรเสียงกับวิดีโอ
การเล่นสื่อด้วย AVPlayer เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
AVFoundation สำหรับสื่อ
AVFoundation เป็นเฟรมเวิร์กของ Apple สำหรับจัดการสื่อภาพและเสียงที่อิงตามเวลา ทั้งการเล่น การบันทึก การตัดต่อ และการส่งออก
คลาสหลักสำหรับการเล่นคือ AVPlayer
import AVFoundationAVPlayer และ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเล่นสื่อด้วย AVPlayer
- การบันทึกเสียง
- AVAsset และ Composition
- การฝังตัวเล่นใน SwiftUI