AVPlayer — المفاهيم الأساسية والميزات والاستخدام

المؤلف: IT Sectr نُشر: 2026-05-23 وقت القراءة: 9 دق

AVPlayer هو إطار عمل مشغل وسائط من Apple، جزء من AVFoundation، يوفر تشغيل الصوت والفيديو على iOS وmacOS وtvOS وvisionOS. يدعم AVPlayer مجموعة واسعة من التنسيقات — من ملفات MP4 المحلية إلى تدفقات HLS التكيفية — عبر واجهة برمجة تطبيقات موحدة مع تسريع فك التشفير بالأجهزة على رقائق 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 (Media Engine)، مما يتيح تشغيل 8K HDR باستهلاك طاقة ضئيل. بالنسبة لـ HEVC (H.265) وProRes، يتم فك التشفير على كتل رقاقة متخصصة دون إثقال كاهل وحدة المعالجة المركزية.

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 معدل البت لتقليل حمل وحدة المعالجة المركزية.

لتدفقات 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 (لتخصيص واجهة المستخدم بالكامل). دعنا نستكشف كلا النهجين في Swift.

التكامل عبر AVPlayerViewController

AVPlayerViewController هو مكون واجهة مستخدم جاهز للاستخدام يوفر عناصر تحكم مدمجة: تشغيل/إيقاف مؤقت، بحث، صوت، 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

للتطبيقات ذات واجهة المستخدم المخصصة، استخدم 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 عند ظهور الشاشة وتحريره عند إغلاقها. عند انتقال التطبيق إلى الخلفية، يُوصى بإيقاف التشغيل مؤقتًا للحفاظ على الموارد وتجنب عقوبات مراجعة التطبيق للتشغيل الخلفي غير الضروري.

AVPlayerLayer وعرض الفيديو

AVPlayerLayer هي طبقة Core Animation ترث من CALayer وتعرض الفيديو على الشاشة. على عكس UIView، تعمل AVPlayerLayer مباشرة مع GPU عبر Metal أو OpenGL، مما يضمن أقل زمن وصول لإخراج الإطارات. فهم AVPlayerLayer ضروري لتنفيذ واجهات تشغيل مخصصة.

تكوين videoGravity

تحدد الخاصية videoGravity كيفية تناسب الفيديو داخل حدود الطبقة. AVLayerVideoGravity.resizeAspect (الحفاظ على نسبة العرض إلى الارتفاع مع أشرطة سوداء) هو القيمة الافتراضية لـ AVPlayerViewController. يُستخدم resizeAspectFill (ملء الشاشة بالكامل مع قص) لوضع ملء الشاشة. نادرًا ما يُستخدم resize (تشويه النسب لتناسب حجم الطبقة)، بشكل أساسي للتطبيقات التحليلية.

المزامنة مع الخيط الرئيسي

تعرض AVPlayerLayer الفيديو في الوقت الفعلي، ولكن يجب تنفيذ جميع عمليات المشغل (بدء، إيقاف مؤقت، بحث) على الخيط الرئيسي. القيم الرئيسية للمراقبة — timeControlStatus وrate وstatus وerror — يتم تتبعها عبر KVO (مراقبة القيمة والمفتاح) أو واجهة برمجة تطبيقات 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 تشغيل المحتوى فقط عبر رابط مباشر لملف الوسائط أو قائمة تشغيل HLS. مقاطع الفيديو من YouTube والمنصات المماثلة مغلفة في مشغلات iframe أو JavaScript غير متوافقة مع AVPlayer. استخدم SDKs الرسمية الخاصة بها أو 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 لواجهة مستخدم مخصصة.
  • التخزين المؤقت HLS يتم تنفيذه عبر AVAssetResourceLoaderDelegate عن طريق اعتراض طلبات الشرائح.
  • Now Playing — تحديثات البيانات الوصفية اليدوية لمركز التحكم وشاشة القفل عبر MPNowPlayingInfoCenter.
  • موصى به استخدام AVPlayer لجميع مشاريع الوسائط على منصات Apple مع متطلبات HLS.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا