مقدمة عن AVFoundation
AVFoundation هو إطار عمل قوي من Apple، مصمم للتعامل مع الصوت والفيديو على منصات iOS و macOS و tvOS و watchOS. يوفر للمطورين واجهة برمجة تطبيقات (API) عالية المستوى لالتقاط ومعالجة وتشغيل وتحرير المحتوى الوسائط المتعددة. على عكس الحلول منخفضة المستوى (مثل Core Audio أو Video Toolbox)، يقوم AVFoundation بتجريد التفاصيل المعقدة لبرامج الترميز والحاويات والمزامنة، مما يسمح لك بالتركيز على منطق التطبيق.
لماذا تحتاج AVFoundation؟ تتيح لك حل مجموعة واسعة من المهام:
- التشغيل: تشغيل الملفات الصوتية (MP3, AAC, WAV) وملفات الفيديو (MP4, MOV, M4V) مع دعم الترجمة والفصول.
- التسجيل: التقاط الفيديو من الكاميرا والصوت من الميكروفون في الوقت الفعلي.
- التحرير: إنشاء تركيبات من عدة مسارات، إضافة تأثيرات، قص، تغيير السرعة.
- المعالجة: استخراج البيانات الوصفية، العمل مع عينات الصوت، تطبيق المرشحات.
- البث المباشر: تشغيل محتوى HLS (HTTP Live Streaming).
AVFoundation هو المعيار الفعلي لتطوير تطبيقات Apple. إذا كنت تكتب تطبيقًا يحتاج إلى تشغيل الموسيقى أو تسجيل الفيديو أو تحرير البودكاست، فستستخدم هذا الإطار بالتأكيد.
التثبيت (إضافة إلى المشروع)
لا يتم تثبيت AVFoundation عبر pip أو npm، لأنه إطار عمل أصلي من Apple. إنه مدمج في Xcode و SDK. لاستخدامه، يكفي استيراد الوحدة في ملفات Swift.
خطوات الإضافة:
- افتح مشروعك في Xcode.
- في أي ملف Swift حيث تحتاج إلى العمل مع الوسائط المتعددة، أضف سطر الاستيراد التالي:
import AVFoundation
لا حاجة لأي إجراءات إضافية. الإطار متاح تلقائيًا لجميع مشاريع iOS/macOS.
إعداد الأذونات (iOS)
للعمل مع الكاميرا والميكروفون، يجب إضافة أسطر إلى ملف Info.plist:
NSCameraUsageDescription— وصف لسبب حاجة التطبيق للكاميرا.NSMicrophoneUsageDescription— وصف لسبب حاجة التطبيق للميكروفون.
بدون هذه المفاتيح، سيتعطل التطبيق مع خطأ عند محاولة الوصول إلى الأجهزة.
بداية سريعة: تشغيل الصوت
أبسط مثال هو تشغيل ملف صوتي محلي. قم بإنشاء كائن AVAudioPlayer واستدعِ الدالة play().
import AVFoundation
import UIKit
class ViewController: UIViewController {
var audioPlayer: AVAudioPlayer?
override func viewDidLoad() {
super.viewDidLoad()
// 1. البحث عن مسار الملف في الحزمة (Bundle)
guard let path = Bundle.main.path(forResource: "sample", ofType: "mp3") else {
print("الملف غير موجود")
return
}
let url = URL(fileURLWithPath: path)
do {
// 2. تهيئة المشغل
audioPlayer = try AVAudioPlayer(contentsOf: url)
// 3. التحضير للتشغيل (اختياري لكن موصى به)
audioPlayer?.prepareToPlay()
// 4. بدء التشغيل
audioPlayer?.play()
print("بدأ التشغيل")
} catch {
print("خطأ في تهيئة المشغل: \(error.localizedDescription)")
}
}
}
هذا الكود ينشئ مشغلًا، ويحمل الملف sample.mp3 من موارد التطبيق ويبدأ تشغيله.
الفئات والدوال الأساسية
فيما يلي الفئات والدوال الرئيسية في AVFoundation المستخدمة في 90% من المهام. لكل دالة، تم تقديم وصف، معاملات، ومثال عملي.
1. AVAudioPlayer
الوظيفة: تشغيل الملفات الصوتية من الذاكرة أو نظام الملفات. يدعم التحكم في مستوى الصوت، التكرار، والتقديم.