وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

ویدئوی MP4 تا پایان دانلود پخش نمی‌شود؛ faststart و Range را درست کنیم

آموزش تشخیص جای اطلاعات MP4، ساخت نسخه faststart با FFmpeg، بررسی Range و آزمایش پخش و جابه‌جایی ویدئو.

انتشار:
توسط تیم فنی نت‌آرام
۶ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله ویدئوی MP4 تا پایان دانلود پخش نمی‌شود؛ faststart و Range را درست کنیم در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
ویدئو را روی هاست دانلود گذاشته‌اید و لینک آن باز می‌شود، اما پخش‌کننده تا دریافت بخش زیادی از فایل یا حتی پایان دانلود چیزی نشان نمی‌دهد. گاهی پخش شروع می‌شود ولی جلو و عقب بردن ویدئو به‌خوبی کار نمی‌کند. دو علت احتمالی را باید از هم جدا کرد: محل اطلاعات لازم برای شروع پخش در فایل MP4 و امکان درخواست بخش‌های مشخص فایل از سرور.
در این راهنما ابتدا با یک فایل آزمایشی رفتار پخش و پاسخ سرور را می‌بینیم. سپس اگر ساختار فایل مناسب نباشد، یک نسخه جدید با گزینه faststart می‌سازیم و بدون حذف نسخه اصلی مقایسه می‌کنیم. این روش جایگزین بررسی کدک، سرعت اینترنت، مجوز دسترسی یا سازگاری پخش‌کننده نیست.

۱. یک نمونه کوچک و بی‌خطر انتخاب کنید

از ویدئویی که اجازه استفاده از آن را دارید یک نسخه آزمایشی کوتاه و عمومی آماده کنید. فایل اصلی را در جای امن نگه دارید و هنگام آزمایش روی آن رونویسی نکنید. لینک نمونه این مقاله ساختگی است:
کد / دستورhttps://dl.example.com/sample.mp4
آدرس واقعی فایل آزمایشی خود را جایگزین کنید. یک بار فایل را کامل روی رایانه دانلود و در پخش‌کننده محلی باز کنید. اگر نسخه محلی هم صدا یا تصویر ندارد، احتمال کدک ناسازگار یا فایل خراب را پیش از بررسی هاست دنبال کنید. اگر نسخه محلی درست است ولی پخش آنلاین مشکل دارد، مرحله بعد کمک می‌کند علت را محدودتر کنید.
در مرورگر، F12 و بخش Network را باز کنید و ویدئو را پخش کنید. کد پاسخ و درخواست‌های فایل را ببینید. خطای ۴۰۳ یا انتقال به صفحه ورود، قبل از بحث ساختار MP4 باید رفع شود. مقایسه را روی اتصال و فایل یکسان انجام دهید؛ یک بار پخش موفق یا ناموفق ثابت نمی‌کند مشکل همیشه وجود دارد.

۲. پشتیبانی Range را با فایل کوچک امتحان کنید

در ترمینال لینوکس یا macOS، نشانی فایل کوچک خود را جایگزین کنید:
کد / دستورcurl -sS -D - -o /dev/null -H 'Range: bytes=0-1' https://dl.example.com/sample.mp4
اگر سرور درخواست بخش را بپذیرد، معمولاً 206 Partial Content و Content-Range مناسب می‌بینید. اگر 200 برگشت، ممکن است Range نادیده گرفته شده و کل فایل فرستاده شود؛ به همین علت از فایل بزرگ برای این آزمایش استفاده نکنید. در PowerShell ویندوز ممکن است لازم باشد curl.exe بنویسید. نبود هدر Accept-Ranges به‌تنهایی همیشه نتیجه آزمون واقعی GET را تعیین نمی‌کند.
اگر سرور Range را پشتیبانی نمی‌کند، تنظیم وب‌سرور، CDN یا روش تحویل فایل را با مدیر سرویس بررسی کنید. راهنمای آزمون ادامه دانلود جزئیات بیشتری درباره پاسخ ۲۰۶ دارد. اگر همه درخواست‌ها درست‌اند اما پخش اولیه همچنان دیر شروع می‌شود، ساختار خود فایل را نیز بررسی کنید.

۳. faststart چه چیزی را تغییر می‌دهد؟

فایل MP4 اطلاعاتی دارد که پخش‌کننده برای شناخت و پیمایش محتوا به آن نیاز دارد. این اطلاعات معمولاً در بخشی با نام moov قرار می‌گیرند. اگر آن بخش در انتهای فایل باشد، برخی پخش‌کننده‌ها پیش از شروع به دریافت بخش انتهایی یا مقدار زیادی از فایل نیاز پیدا می‌کنند. گزینه faststart در FFmpeg تلاش می‌کند این اطلاعات را به ابتدای فایل خروجی منتقل کند.
این کار الزاماً کیفیت تصویر را تغییر نمی‌دهد، چون در نمونه زیر جریان‌ها بدون بازفشرده‌سازی کپی می‌شوند؛ با این حال سازگاری همه جریان‌ها با ظرف خروجی و سالم‌بودن فایل نهایی باید آزمایش شود. faststart به‌تنهایی سرعت اینترنت، مجوز دسترسی، کدک ناسازگار یا Range مسدودشده را اصلاح نمی‌کند.

۴. نسخه جدید را روی رایانه یا سرور آزمایشی بسازید

اگر FFmpeg و FFprobe را در یک محیط مورد اعتماد دارید، نسخه ابزارها را ببینید:
کد / دستورffmpeg -version ffprobe -version
روی هاست اشتراکی وجود این ابزارها و اجازه اجرای آن‌ها را فرض نکنید؛ می‌توانید تبدیل را روی رایانه خود انجام دهید. ابزار را از منبع رسمی یا مخزن مورد اعتماد سیستم بگیرید. در پوشه فایل، اطلاعات نمونه را ببینید:
کد / دستورffprobe -v error -show_entries format=duration,size -of default=nw=1 input.mp4
نام input.mp4 را با فایل واقعی عوض کنید. این فرمان مدت و اندازه را نشان می‌دهد، اما به‌تنهایی محل بخش moov یا سازگاری همه مرورگرها را ثابت نمی‌کند. برای دیدن جریان‌های صدا، تصویر و زیرنویس:
کد / دستورffprobe -v error -show_entries stream=index,codec_type,codec_name -of csv=p=0 input.mp4
اکنون با انتخاب یک نام خروجی تازه و فضای کافی، نسخه faststart بسازید:
کد / دستورffmpeg -i input.mp4 -map 0 -c copy -movflags +faststart output-fast.mp4
-map 0 درخواست کپی همه جریان‌های ورودی را می‌دهد و -c copy بازفشرده‌سازی آن‌ها را انجام نمی‌دهد. اگر بعضی جریان‌ها با ظرف MP4 سازگار نباشند، فرمان ممکن است خطا دهد؛ حذف بی‌فکر آن‌ها ممکن است صدا یا زیرنویس موردنیاز را از بین ببرد. نام خروجی باید با فایل اصلی متفاوت باشد. اگر خروجی از قبل وجود دارد، آن را بدون بررسی بازنویسی نکنید.

۵. خروجی را قبل از انتشار مقایسه کنید

بعد از موفقیت فرمان، همان بررسی جریان‌ها را برای فایل خروجی انجام دهید:
کد / دستورffprobe -v error -show_entries stream=index,codec_type,codec_name -of csv=p=0 output-fast.mp4
فهرست صدا، تصویر و زیرنویس موردنیاز را با فایل ورودی مقایسه و خود خروجی را در چند نقطه پخش کنید. مدت پخش و عملکرد صدا و زیرنویس را ببینید. اگر فرمان شکست خورده یا خروجی ناقص است، فایل اصلی را نگه دارید و متن خطا را براساس نوع جریان بررسی کنید.
فایل جدید را ابتدا با نام نسخه‌دار و آزمایشی روی هاست بگذارید، پایان انتقال را تأیید کنید و آن را از همان لینک دریافت و پخش کنید. برای جلوگیری از ارائه نسخه نیمه‌کاره، راهنمای انتشار فایل پس از پایان آپلود را ببینید.

۶. شروع پخش و جابه‌جایی را دوباره بسنجید

با همان مرورگر و شرایط شبکه، دو فایل را از ابتدا اجرا کنید و زمان شروع و امکان جلو بردن را مقایسه کنید. در Network ببینید آیا درخواست‌های بخشی پاسخ مناسب می‌گیرند. اگر نسخه جدید بهتر است، می‌توانید پس از آزمون کاربران و امکان بازگشت، لینک نسخه جدید را جایگزین کنید. اگر تغییری نکرد، به کدک، پخش‌کننده، سرعت شبکه، محدودیت دسترسی و تنظیم CDN نیز رسیدگی کنید.
برای میزبانی فایل‌های عمومی و حجیم، صفحه هاست دانلود نت‌آرام را ببینید. توضیح رسمی گزینه faststart در منبع مستندات FFmpeg و معنی درخواست Range در راهنمای HTTP موزیلا آمده است.
اشتراک‌گذاری:
لینکدینتلگرامایکس

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام