MediaElement.js - لن يتم تشغيل فيديو Flash حتى يتم تحميله بالكامل

StackOverflow https://stackoverflow.com/questions/5058917

سؤال

أواجه مشكلة تتمثل في عدم قيام MediaElement.js (مشغل فيديو الفلاش الخاص بي) بتشغيل ملفات الفيديو بتنسيق .m4V (المشفرة باستخدام ffmpeg) حتى يتم تشغيل الفيديو محملة بالكامل.

لقد اختبرت هذا مع العديد من ملفات الفيديو التابعة لجهات خارجية والتي يبدو أنها تعمل على الفور قبل أن يتم تحميلها بالكامل.فقط ملفاتي لا :(

عند تشغيلها باستخدام حل فيديو html5، يتم تشغيلها على الفور، ولكن ليس على الفلاش الاحتياطي.

هل يمكن أن يكون لهذا علاقة بالإعدادات التي يتم ترميز الفيديو بها؟لا أرى أي سبب آخر.

شفرة:

<video id="player1" src='BriefTour.m4v' type="video/mp4" preload="none"></video>

<script>
var videoPlayer = MediaElement('player1',{
  success:function(me){me.play();}              
});
</script>

كما ترون، لم أحدد أي خيار، فاللاعب يعمل على الإعدادات الافتراضية.

آمل أن يكون شخص ما قد قام بهذا من قبل ويمكنه مساعدتي!

هل كانت مفيدة؟

المحلول

أثناء قيامك بتشفير مقاطع الفيديو الخاصة بك واستخدام FFmpeg، أقترح استخدام "qt-faststart".

هذه أداة مفيدة متضمنة في FFmpeg والتي تعمل على إعادة ترتيب ملف باستخدام فيديو H.264، "بحيث تكون ذرة moov أمام البيانات، مما يسهل تدفق الشبكة".في الأساس، فهو يسمح ببدء تشغيل أفلام الويب قبل أن يتم تنزيلها بالكامل.

قم بتمكينه باستخدام دليل ffmpeg التالي:

cd ~/ffmpeg
make tools/qt-faststart

الاستخدام (بعد ترميز ffmpeg):

qt-faststart input.foo output.foo

من المفترض أن يسمح هذا للمشغل الخاص بك بتشغيل الفيديو أثناء تنزيله.

نصائح أخرى

لا يستطيع Flash دائمًا تشغيل ملفات MP4 إذا لم تتم فهرستها بالطريقة التي يريدها.

لإصلاح ملفك، فقط قم بتحميل هذا: QTIndexSwapper

لقد قمت بتجربة qt-faststart مع ملفاتي المشفرة MP4 (h264+AAC) وكنت أحصل دائمًا على "الذرة الأخيرة في الملف لم تكن ذرة moov"رسالة خطأ (ولا يوجد ملف إخراج).كنت أفترض بعد ذلك أن ملفاتي كانت جيدة وبحثت عن المشكلة في مكان آخر.وبعد ساعات من الاختبار، ثبت أن افتراضاتي كانت خاطئة - بل يبدو ذلك بالفعل ملفاتي لا تحتوي على moov-atom على الإطلاق, ، لا في البداية ولا في النهاية!

لإصلاح هذه المشكلة بنجاح، استخدمت ffmpeg أولاً "لإعادة إنشاء" الملف - أي إعادة دمج مسارات h264+AAC الأصلية في ملف MP4 جديد دون إعادة ترميزه:

ffmpeg -i souce_file.mp4 -acodec copy -vcodec copy target_file_1.mp4

بعد ذلك، يجب أن يحتوي الملف الجديد على moov-atom المناسب في النهاية.والآن يمكنك استخدام qt-faststart لنقله إلى البداية، كما أوضح كيت في إجابته:

qt-faststart target_file_1.mp4 target_file_2.mp4

بعد القيام بذلك، يقوم Mediaelement بتشغيل جميع مقاطع الفيديو الخاصة بي مباشرة بعد النقر على زر التشغيل، عندما يبدأ تنزيل الملف!:)

إذا كانت مشكلتك هي أن لديك بالفعل جميع ملفاتك في موقع يشبه youtube، وأن استضافتك تعتمد على Linux، وأن ffmpeg غير موجود ولا يمكنك تجميعه بنفسك، فإنك تجد أنه من المفيد الحصول على بنية ثابتة لـ ffmpeg.يمكنك أن تجد ذلك هنا:

http://ffmpeg.gusari.org/static/ (32 بت) أو هنا:http://dl.dropbox.com/u/24633983/ffmpeg/index.html (64 بت)

لسوء الحظ، في الإصدار 32 بت الذي استخدمته، لم يكن هناك qt-faststart، وليس ثنائيًا ولا كود مصدر.في هذه الحالة، يمكنك تنزيله من ffmpeg SVN وتجميعه مباشرةً باستخدام gcc.لقد فعلت ذلك بنجاح في الاستضافة المشتركة الرخيصة للغاية.لا يبدو أن لديها أي تبعيات بناء.أو يمكنك حتى المحاولة بناء ثنائي كيو تي-فاست ستارت الخاص بي ومعرفة ما إذا كان يعمل بالنسبة لك.

يحرر: لقد اكتشفت للتو أنه في الإصدارات الأحدث ليست هناك حاجة لـ qt-faststart على الإطلاق.يمكنك التشفير مباشرة باستخدام ffmpeg باستخدام الخيار التالي:

-movflags +faststart 

أردت أن أتوسع قليلاً في تعليق جون داير وأقول ذلك باستخدام QTIndexSwapper ليس مخصصًا للفلاش فقط الوظيفة الاحتياطية/الخريفية لـ MediaElement.js ولكنها تعمل أيضًا مع مشغل غير Flash.

كانت المشكلة التي واجهتني في المشغل غير Flash هو أن ملف mp4 الخاص بي كان عليه تحميل الفيديو الكامل قبل بدء تشغيله (لم أتحقق من إصدار Flash إلا بعد أن جعلته يعمل بدون Flash) وقام QTIndexSwapper بحل المشكلة مشكلة.

أردت أن أشير إلى ذلك لأنني عندما قرأت التعليق لأول مرة اعتقدت أنه ينطبق فقط على Flash ولم أجربه على الفور.لا يعني ذلك أنني أستبعد أي شيء من جون داير لأن تعليقه هو الذي حل مشكلتي في النهاية، أردت فقط أن أضيف إليه حتى لا يرتكب الآخرون خطأي.

إذا كان أي شخص مهتما كتبت مشاركة مدونة حول هذه المشكلة وحول فئة PHP والتي يجب إصلاحها أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top