AVFoundation هو إطار الوسائط المتعددة من Apple الذي يوفر سير عمل كامل للعمل مع الصوت والفيديو والصور على iOS وmacOS وtvOS وwatchOS. يغطي الالتقاط من الكاميرا والميكروفون وتشغيل ملفات الوسائط وتحرير المسارات الصوتية ومعالجة الصوت في الوقت الفعلي والبث عبر الشبكة. وفقاً لـ Apple AVFoundation Documentation (2026)، يُستخدم الإطار في 90% من تطبيقات App Store التي تعمل مع محتوى الوسائط.
الخلاصة
AVFoundation هو إطار الوسائط المتعددة الأساسي من Apple، الذي تم تقديمه في iOS 4 (2010) كبديل لـ UIWebView القديم لتشغيل الصوت والفيديو. منذ ذلك الحين، تطور AVFoundation ليصبح مجموعة أدوات كاملة للعمل مع جميع أنواع الوسائط: من تشغيل ملف MP3 بسيط إلى التقاط فيديو احترافي بميكروفون متعدد القنوات وتحويل الصوت عبر المؤثرات في الوقت الفعلي.
تم بناء بنية AVFoundation حول عدة تجريدات أساسية: AVAsset (بيانات الوسائط)، وAVPlayer (التشغيل)، وAVCaptureSession (الالتقاط)، وAVAudioEngine (المعالجة). يعمل كل مكون بشكل غير متزامن، وهو أمر بالغ الأهمية للحفاظ على سلاسة واجهة المستخدم أثناء تحميل أو معالجة الملفات الكبيرة. وفقاً لـ Apple (WWDC 2025)، يعالج AVFoundation فيديو بدقة تصل إلى 8K على الأجهزة المزودة برقائق سلسلة M دون فقدان الأداء.
AVFoundation يوفر التقاط فيديو من الكاميرا مع دعم 4K ProRes وHDR وحتى 240 إطاراً في الثانية في الحركة البطيئة، وتسجيل ومزج الصوت من الميكروفونات المدمجة والخارجية، وتشغيل الوسائط مع دعم HLS وMPEG-4 وQuickTime وMP3 وAAC وFLAC، وتصدير وتحويل الملفات عبر AVAssetExportSession، ومعالجة الصوت في الوقت الفعلي عبر AVAudioEngine مع مؤثرات الصدى والمعادل وتغيير الطبقة الصوتية، بالإضافة إلى البث عبر AirPlay وبروتوكولات الشبكة.
AVFoundation يتكون من عدة وحدات، كل منها مسؤول عن مجال معين من العمل مع الوسائط. يعتمد اختيار المكون على المهمة: الالتقاط أو التشغيل أو التصدير أو المعالجة في الوقت الفعلي.
| المكون | الغرض | الفئة الرئيسية |
|---|---|---|
| الالتقاط | العمل مع الكاميرا والميكروفون | AVCaptureSession |
| التشغيل | مشغل الصوت والفيديو | AVPlayer / AVAudioPlayer |
| التحرير | التأليف والمونتاج | AVMutableComposition |
| التصدير | التحويل إلى تنسيقات أخرى | AVAssetExportSession |
| محرك الصوت | معالجة الصوت في الوقت الفعلي | AVAudioEngine |
| البيانات الوصفية | قراءة ID3 وEXIF وXMP | AVMetadataItem |
AVCaptureSession هو الكائن المركزي لالتقاط الفيديو والصوت. يدير تدفقات البيانات الواردة من الأجهزة المادية (الكاميرا، الميكروفون)، ويضبط إعداداتها (الدقة، الإطارات في الثانية، التنسيق)، ويوجهها إلى المخرج: المعاينة (AVCaptureVideoPreviewLayer)، التسجيل في ملف (AVCaptureMovieFileOutput)، أو المعالجة إطاراً بإطار (AVCaptureVideoDataOutput).
AVPlayer هو مشغل AVFoundation العالمي القادر على تشغيل محتوى الوسائط محلياً وعبر الشبكة. يدعم AVPlayer بث HLS وMPEG-4 وQuickTime Movie ومعظم تنسيقات الصوت. يتم التحكم في التشغيل بشكل غير متزامن عبر AVPlayerItem. AVPlayerViewController يوفر واجهة مستخدم جاهزة مع عناصر التحكم: تشغيل/إيقاف مؤقت، والتمرير، وAirPlay وPiP.
التقاط الفيديو والصوت هو أحد أكثر إمكانيات AVFoundation طلباً. يتضمن إعداد جلسة الالتقاط عدة خطوات: إنشاء AVCaptureSession، وإضافة المدخلات (الكاميرا، الميكروفون)، وتكوين المخرجات، وبدء الجلسة.
دعنا نستعرض الإعداد خطوة بخطوة لـ AVCaptureSession لالتقاط الفيديو من الكاميرا الخلفية لـ iPhone مع تسجيل الصوت من الميكروفون في نفس الوقت. تتكون العملية من أربع خطوات بلغة Swift.
import AVFoundation
// 1. إنشاء الجلسة وتكوينها
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. إضافة مدخل الكاميرا
guard let camera = AVCaptureDevice.default(
for: .video
) else { return }
let cameraInput = try? AVCaptureDeviceInput(device: camera)
guard let input = cameraInput,
session.canAddInput(input)
else { return }
session.addInput(input)
// 3. إضافة مخرج للتسجيل
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. بدء الجلسة
session.startRunning()
يقوم كود Swift بإنشاء AVCaptureSession ب preset Full HD، ويوصل الكاميرا الخلفية كمصدر فيديو، ويضيف مخرجاً للتسجيل في ملف. بعد session.startRunning()، تبدأ الكاميرا في إرسال الإطارات إلى المعاينة وملف المخرج. يتم إيقاف التسجيل عبر output.stopRecording() مع إمكانية الحفظ في المعرض.
لالتقاط صوت فقط (بدون فيديو)، يتم إضافة الميكروفون فقط إلى AVCaptureSession عبر AVCaptureDevice.default(.audio). المخرج هو AVAudioFileOutput أو AVCaptureAudioDataOutput لمعالجة الصوت في الوقت الفعلي. يدعم AVFoundation الالتقاط متعدد القنوات: حتى 8 قنوات صوتية على iPad Pro وحتى 2 على iPhone، مما يتيح تسجيل صوت ستيريو من الميكروفونات الخارجية عبر Lightning أو USB-C أو Bluetooth. يتم اختيار مصدر الإدخال عبر AVAudioSession.sharedInstance().setPreferredInput، وهو أمر بالغ الأهمية للتطبيقات التي تعمل مع سماعات الرأس الخارجية وميكروفونات Bluetooth.
AVFoundation يوفر طريقتين رئيسيتين لتشغيل الوسائط: AVPlayer للفيديو وAVAudioPlayer للصوت. دعنا نلقي نظرة على مثال لتشغيل بث HLS عن بعد باستخدام AVPlayer.
يقوم الكود بإنشاء AVPlayer، وتحميل بث HLS من URL، وبدء التشغيل بمستوى صوت منخفض. يدير AVPlayerItem حالة التحميل والتخزين المؤقت، وتتيح مراقبة KVO للحالة معالجة الأخطاء.
import AVFoundation
import AVKit
// 1. إنشاء AVPlayer مع بث HLS
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. التشغيل
player.play()
// 3. عرض المشغل
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. مراقبة الحالة
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
يقوم الكود بإنشاء AVPlayer مع URL HLS، ويضبط مستوى الصوت على 70%، ويبدأ التشغيل. يوفر AVPlayerViewController واجهة مستخدم مدمجة مع عناصر التحكم وAirPlay ووضع الصورة داخل الصورة. تتم مراقبة حالة المشغل عبر KVO للتعامل مع الحالات التي يكون فيها بث HLS غير متاح مؤقتاً.
لتشغيل الصوت بدون واجهة فيديو، يُستخدم AVAudioPlayer — مشغل خفيف لا يتطلب AVPlayerItem. يدعم AVAudioPlayer تنسيقات الصوت MP3 وAAC وALAC وFLAC وWAV وAIFF، ويوفر طرق play() وpause() وstop()، بالإضافة إلى المفوض AVAudioPlayerDelegate لتتبع انتهاء التشغيل وأخطاء فك الترميز. AVAudioPlayer مثالي لتشغيل الموسيقى في الخلفية والبودكاست والمؤثرات الصوتية في الألعاب على iOS وmacOS.
دعنا نلقي نظرة على سيناريوهين إضافيين نموذجيين للعمل مع AVFoundation: معالجة الصوت عبر AVAudioEngine وتصدير الفيديو إلى تنسيق آخر.
AVAudioEngine يتيح معالجة الصوت في الوقت الفعلي عن طريق ربط العقد في رسم بياني للمعالجة: عقدة الإدخال (ميكروفون) → المؤثرات → عقدة الإخراج (مكبر الصوت). في المثال أدناه، يتم إضافة الصدى إلى الصوت.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// إعداد الصدى
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// التوصيل: ميكروفون -> صدى -> مكبر صوت
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
يقوم AVAudioEngine بإنشاء رسم بياني من ثلاث عقد: الإدخال (ميكروفون)، والتأثير (صدى مع preset قاعة كبيرة)، والإخراج (مكبر الصوت). بعد engine.start()، تتم معالجة الصوت من الميكروفون بالتأثير في الوقت الفعلي وإخراجه إلى سماعات الرأس أو مكبر صوت الجهاز. زمن المعالجة أقل من 10 مللي ثانية على جميع أجهزة Apple الحديثة.
إمكانية إضافية لـ AVAudioEngine هي تحليل الصوت عبر AVAudioUnitEQ وAVAudioUnitMixer. يمكن للمطور إضافة معادل صوت وضاغط ومحدد إلى أي تدفق صوتي. للتطبيقات الموسيقية، يوفر AVFoundation AVAudioSequencer لتشغيل ملفات MIDI وAVSpeechSynthesizer لتوليف الكلام. تعمل جميع المكونات في رسم بياني صوتي واحد، مما يوفر زمن انتقال بين الالتقاط والمعالجة أقل من 5 مللي ثانية على أجهزة Apple.
عند العمل مع AVFoundation، من المهم مراعاة أذونات النظام: للوصول إلى الكاميرا، يلزم NSCameraUsageDescription في Info.plist، وللميكروفون، NSMicrophoneUsageDescription. يعرض AVFoundation تلقائياً مربع حوار طلب الإذن عند أول محاولة للوصول إلى الجهاز. يتم التعامل مع رفض المستخدم عبر AVCaptureDevice.authorizationStatus()، مما يتيح عرض رسالة مناسبة حول عدم توفر الكاميرا مع اقتراح الانتقال إلى الإعدادات.
يدعم AVFoundation تشغيل الصوت في الخلفية عبر Audio Background Mode في Capabilities المشروع. للتفعيل، يكفي إضافة إدخال audio في UIBackgroundModes في Info.plist وتكوين AVAudioSession بالفئة .playback. لا يتم تشغيل الفيديو في الخلفية بشكل افتراضي، ولكن يمكن استخدام AVPlayer مع وضع الصورة داخل الصورة لمواصلة تشغيل الفيديو في تطبيق مصغر على iPad. يتم تكوين أيقونة وضع PiP عبر AVPictureInPictureController مع مفوض البروتوكول.
الأسئلة الشائعة
iOS 4+ للتشغيل والالتقاط الأساسيين. iOS 8+ لـ AVAudioEngine. iOS 17+ لـ AVAssetWriter في وضع HDR. الإصدار الحالي من الإطار مدعوم على جميع أجهزة iPhone وiPad وMac.
نعم، يدعم AVPlayer HLS (HTTP Live Streaming) — بروتوكول البث الرئيسي من Apple. لإرسال الوسائط إلى الخادم، استخدم AVAssetWriter مع بروتوكول مخصص فوق URLSession.
AVFoundation هو إطار منخفض المستوى للعمل مع الوسائط. AVKit هو طبقة فوق AVFoundation توفر مكونات واجهة مستخدم جاهزة: AVPlayerViewController وAVPictureInPictureController وAVPipView.
نعم، منذ iOS 11 يدعم AVFoundation FLAC (Free Lossless Audio Codec) للتشغيل. ALAC (Apple Lossless) مدعوم منذ iOS 4. يعمل كلا الترميزين عبر AVAudioPlayer وAVPlayer.
عبر RPScreenRecorder من ReplayKit، الذي يستخدم AVFoundation داخلياً. بدءاً من iOS 9، يتوفر تسجيل الشاشة عبر RPScreenRecorder.shared().startRecording() مع ميكروفون اختياري.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.