رسانه و استریم یکی از شایستگیهای کلیدی توسعه مدرن موبایل است. به گزارش Statista (2025)، بازار جهانی استریم ویدیو تا سال 2027 از 100 میلیارد دلار فراتر خواهد رفت. دستگاههای موبایل بیش از 60٪ از کل ترافیک پلتفرمهای استریم را تشکیل میدهند. توسعهدهنده باید پروتکلها، پخشکنندهها، مکانیسمهای حفاظت از محتوا و ویژگیهایی مانند Picture-in-Picture را درک کند. استریم با کیفیت در برنامههای موبایل نیاز به تسلط بر تمام این فناوریها دارد.
نکات اصلی
HTTP Live Streaming (HLS) پروتکلی برای استریم در برنامههای موبایل است که توسط Apple توسعه یافته است. ویدیو را به بخشهای کوچک (معمولاً 6 تا 10 ثانیه) تقسیم میکند و آنها را از طریق HTTP معمولی ارسال میکند. پخشکننده یک لیست پخش (.m3u8) دانلود میکند و به ترتیب بخشها را بارگیری میکند و کیفیت را با سرعت اتصال تطبیق میدهد. HLS استریم قابل اعتمادی را در برنامههای موبایل در تمام دستگاههای Apple فراهم میکند و استاندارد دوفاکتو برای iOS است.
DASH (Dynamic Adaptive Streaming over HTTP) یک استاندارد باز MPEG برای تحویل رسانه به برنامههای موبایل است. برخلاف HLS، DASH از فرمت MP4 برای بخشها و یک مانیفست XML (MPD) به جای .m3u8 استفاده میکند. DASH کنترل بیشتری روی کدکها ارائه میدهد و از فرمتهای بیشتری پشتیبانی میکند. انتخاب بین HLS و DASH یک تصمیم کلیدی هنگام توسعه استریم برای دستگاههای موبایل است. مقایسه پروتکلها در جدول زیر نشان داده شده است.
| پارامتر | HLS | DASH |
|---|---|---|
| توسعهدهنده | Apple | MPEG (استاندارد باز) |
| فرمت لیست پخش | .m3u8 | .mpd (XML) |
| بخشها | .ts یا fMP4 | fMP4 (هر کدکی) |
| پشتیبانی بومی | iOS، macOS، tvOS | Android، وب |
| نرخ بیت تطبیقی | بله (avc1, mp4a) | بله (هر کدکی) |
| تأخیر کم | LL-HLS (2–5 ثانیه) | LL-DASH (2–5 ثانیه) |
در عمل، برنامههای iOS HLS را انتخاب میکنند — AVPlayer به صورت بومی با آن کار میکند. برای Android، DASH به لطف ExoPlayer ترجیح داده میشود. هر دو پروتکل برای استریم رسانه در دستگاههای موبایل مناسب هستند. در IT Sectr، ما از هر دو فناوری استفاده میکنیم و توصیه میکنیم پروتکل را بر اساس پلتفرم هدف انتخاب کنید.
Adaptive Bitrate (ABR) مکانیزمی است که در آن پخشکننده به طور خودکار کیفیت ویدیو را بر اساس سرعت اتصال انتخاب میکند. استریم با چندین نرخ بیت (360p، 720p، 1080p، 4K) کدگذاری میشود. پخشکننده بدون مکث بین آنها جابجا میشود. کدکها: H.264 (AVC) — پایه، H.265 (HEVC) — 50٪ کارآمدتر، VP9 و AV1 — جایگزینهای باز برای Android.
برای رمزگشایی سختافزاری در برنامههای موبایل، انتخاب کدک مناسب مهم است. Hardware Decoding از GPU/پردازنده ویدیوی دستگاه استفاده میکند و باتری کمتری مصرف میکند. Software Decoding روی CPU کار میکند — زمانی استفاده میشود که رمزگشایی سختافزاری در دسترس نباشد. IT Sectr توصیه میکند همیشه پشتیبانی کدک را از طریق MediaCodec (Android) یا AVAssetTrack (iOS) برای پخش بهینه رسانه در دستگاههای موبایل بررسی کنید.
ExoPlayer یک پخشکننده رسانه از Google برای Android است که برای پخش رسانه در برنامههای موبایل بهینه شده است. برخلاف MediaPlayer، ExoPlayer به رمزگشایی سختافزاری وابسته نیست و از طرحهای سفارشی از طریق ماژولهای توسعه پشتیبانی میکند. با HLS، DASH، SmoothStreaming و RTSP کار میکند. ExoPlayer پخشکننده اصلی YouTube، Google TV و Android TV است.
AVPlayer و AVPlayerViewController پخشکنندههای Apple برای iOS، macOS، tvOS هستند. AVPlayer یک API سطح پایین است، AVPlayerViewController یک پوسته UI آماده با PiP و AirPlay است. تفاوتهای اصلی: ExoPlayer کنترل کامل بر بافرینگ و رندرینگ ارائه میدهد، AVPlayerViewController ادغام سریع با حداقل کد را فراهم میکند. انتخاب پخشکننده مستقیماً بر کیفیت استریم در برنامههای موبایل تأثیر میگذارد.
// ExoPlayer — راهاندازی پخشکننده پایه در Android
val player = ExoPlayer.Builder(this)
.setMediaSource(ProgressiveMediaSource.Factory(DefaultHttpDataSource.Factory()))
.build()
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
player.playWhenReady = true
کد راهاندازی حداقل ExoPlayer را نشان میدهد: ایجاد نمونه، تنظیم آیتم رسانه و شروع پخش. ExoPlayer به طور خودکار چرخه حیات Activity را از طریق player.release() در onStop مدیریت میکند. برای Android TV یا PiP، مدیریت اضافی چرخه حیات از طریق PlayerView مورد نیاز است — این هنگام راهاندازی استریم برای برنامههای موبایل بسیار مهم است.
Transcoding تبدیل ویدیو از یک فرمت به فرمت دیگر است. برای بهینهسازی جریانهای رسانه برای دستگاههای موبایل مختلف استفاده میشود (به عنوان مثال، H.264 → H.265). در دستگاههای موبایل، ترانسکدینگ از طریق MediaCodec (Android) یا AVAssetExportSession (iOS) امکانپذیر است. ترانسکدینگ منابع زیادی مصرف میکند و باتری را خالی میکند — آن را در پسزمینه از طریق WorkManager یا BGTaskScheduler انجام دهید.
Digital Rights Management (DRM) سیستمهایی برای محافظت از محتوای رسانه در برابر کپی غیرمجاز هستند. برای استریم رسانه پریمیوم در برنامههای موبایل از سه فناوری اصلی استفاده میشود: Widevine (Google)، FairPlay (Apple) و PlayReady (Microsoft). بدون DRM، سرویسهای پریمیوم (Netflix، Spotify، Disney+) نمیتوانند محتوا توزیع کنند.
Widevine استاندارد حفاظت DRM برای Android است، در سه سطح موجود: L3 (رمزگذاری نرمافزاری)، L2، L1 (رمزگذاری سختافزاری، فقط Trusted Execution Environment). FairPlay سیستم اختصاصی Apple است، از SVP (Secure Video Pipeline) در سطح تراشه استفاده میکند. PlayReady سیستم Microsoft است، در دستگاههای Xbox و Windows رایج است.
Multi-DRM رویکردی است که در آن از یک پلتفرم واحد برای مدیریت همه کلیدهای DRM استفاده میکنید. مثال: EZDRM یا Verimatrix. آنها مجوزهای Widevine، FairPlay و PlayReady را از طریق یک API یکپارچه صادر میکنند. Multi-DRM به ویژه برای رسانه پریمیوم در دستگاههای موبایل مهم است. در IT Sectr، ما multi-DRM را از طریق تجمیعکنندگان پیادهسازی میکنیم — این در مقایسه با ادغام هر DRM به طور جداگانه در زمان و هزینه صرفهجویی میکند.
Audio Focus (Android) سیستمی برای مدیریت جریانهای صوتی برای پخش رسانه در برنامههای موبایل است. وقتی برنامه شما Audio Focus درخواست میکند، سایر برنامهها (موسیقی، پادکست) متوقف میشوند یا صدای خود را کاهش میدهند (ducking). بدون Audio Focus، دو برنامه به طور همزمان پخش میشوند و نویز ایجاد میکنند.
Android جریانهای صوتی را به انواع تقسیم میکند: MUSIC، VOICE_CALL، ALARM، NOTIFICATION. برای یک پخشکننده رسانه، باید AudioManager.AUDIOFOCUS_GAIN را درخواست کنید. هنگام از دست دادن فوکوس (تماس ورودی)، باید پخش رسانه را متوقف کرده و پس از بازگشت فوکوس از سر بگیرید. پیادهسازی از طریق AudioManager.OnAudioFocusChangeListener.
Audio Session (iOS) معادل Audio Focus برای برنامههای رسانه در دستگاههای موبایل Apple است. از طریق AVAudioSession.sharedInstance() پیکربندی میشود. دستهبندیها: .playback (اجباری برای ویدیو)، .soloAmbient (پیشفرض، سکوت هنگام قفل)، .playAndRecord (برای ضبط). برای استریم، از .playback با گزینه .allowAirPlay استفاده کنید.
Picture-in-Picture (PiP) حالتی است که در آن محتوای رسانه در یک پنجره شناور کوچک هنگام کوچکسازی برنامه یا رفتن به صفحه دیگر به پخش ادامه میدهد. PiP به استانداردی برای برنامههای رسانه در دستگاههای موبایل تبدیل شده است — iOS (از iPadOS 13) و Android (از Android 8.0).
در Android، PiP از طریق Activity.isInPictureInPictureMode() و PictureInPictureParams.Builder فعال میشود. برنامه باید در حالت چند پنجرهای باشد. MediaSession برای کنترل پخش رسانه از پنجره PiP مورد نیاز است. در مانیفست، android:supportsPictureInPicture="true" را مشخص کنید.
AirPlay پروتکل Apple برای استریم رسانه به Apple TV، HomePod و تلویزیونهای هوشمند سازگار است. در iOS، از طریق AVRoutePickerView یا MPNowPlayingInfoCenter پیادهسازی میشود. در Android، معادل Google Cast SDK (Chromecast) است. هر دو فناوری نیاز به پیکربندی در فایل باینری و پشتیبانی در پخشکننده دارند. استریم با کیفیت در برنامههای موبایل بدون یکی از آنها غیرممکن است.
سوالات متداول
برای iOS HLS بهتر است — به صورت بومی توسط AVPlayer پشتیبانی میشود. برای Android و برنامههای چندپلتفرمی، DASH ترجیح داده میشود زیرا ExoPlayer پشتیبانی بهتری از DASH و کنترل بافرینگ انعطافپذیرتری ارائه میدهد. انتخاب پروتکل مستقیماً بر استریم در برنامههای موبایل تأثیر میگذارد.
DRM اجباری است فقط اگر محتوای رسانه پریمیوم (فیلم، موسیقی، دوره) توزیع میکنید. برای محتوای تولید شده توسط کاربر یا پخش رایگان، DRM لازم نیست. IT Sectr توصیه میکند بدون DRM شروع کنید و فقط در صورت نیاز آن را اضافه کنید.
ExoPlayer یک پخشکننده رسانه قابل تنظیم برای Android با پشتیبانی از DASH، HLS و SmoothStreaming است. AVPlayerViewController یک پخشکننده بومی iOS برای HLS با PiP و AirPlay است. ExoPlayer کنترل بیشتری ارائه میدهد، AVPlayerViewController به کد کمتری نیاز دارد. هر دو پخش رسانه با کیفیت را در برنامههای موبایل فراهم میکنند.
PiP حالتی است که در آن محتوای رسانه در یک پنجره کوچک هنگام کوچکسازی برنامه به پخش ادامه میدهد. در iOS از طریق نماینده AVPlayerViewController، در Android از طریق PictureInPictureParams فعال میشود. نیاز به پیکربندی مانیفست و مدیریت چرخه حیات دارد.
Audio Focus (Android) و Audio Session (iOS) پخش همزمان صدا از منابع مختلف را مدیریت میکنند. آنها تضمین میکنند که برنامه رسانه شما به تماسها، اعلانها و راهاندازی سایر برنامههای صوتی به درستی پاسخ دهد.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.