سؤال

أنا أكتب تطبيقا، جزءا منه يسمح للمستخدم بتشغيل / تشغيل مقاطع الفيديو. أريد تقييد الوظيفة حتى يتمكنوا من دفق مقاطع الفيديو إلا إذا كان لديهم اتصال WiFi. سأقوم بعد ذلك بحفظ الفيديو بحيث يكون لديك اتصال 3G فقط (أو أقل) لا يمكنه دفق مقاطع الفيديو ويمكنه فقط إعادة تشغيل مقاطع الفيديو التي يتم حفظها على الهاتف.

من الناحية المثالية، أود الحصول على MPMoviePlayerController لتدفق / تشغيل الفيلم ثم الوصول إلى بيانات الأفلام وحفظه. ومع ذلك، لا يبدو أن Api MPMoviePlayerCerTroller يدعم الوصول إلى بيانات الأفلام.

أود تجنب وتنزيل سيناريو Play. أيه أفكار؟

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

المحلول

اثنين من الحلول تتبادر إلى الذهن. تتطلب كل من هذه الحلول أن يكون الملف بتنسيق يمكن تشغيله تدريجيا، على سبيل المثال أنك لا تحتاج إلى الملف بأكمله لتكون قادرا على تشغيله (ولكن هذا سيكون شرطا مسبقا على أي حال).

  1. استخدم مؤشر ترابط لتنزيل البيانات وإلحاقه بملف، وتشغيل الملف من مؤشر ترابط آخر. الآن، يتطلب ذلك أنه يمكنك التعامل مع أحداث EOF في MPMoviePlayerController وإيقاف التشغيل حتى يتم إلحاق ملف ذاكرة التخزين المؤقت ثم استئناف النقطة نفسها.

حتى الآن ما رأيته الأشخاص الذين يقومون بهذا الأمر لا يعمل لأن MPMoviePlayerController لا يستطيع التعامل مع حدث EOF. (لم يختبر ذلك بنفسي بعد) [التخزين المؤقت مقاطع الفيديو على القرص بعد التحميل المسبق بنجاح بواسطة MPMoviePlayerController

  1. تخطي اللعب من ملف وإعداد خادم HTTP محلي ومدفق من ذلك (على LocalHost). هذا لم يتم اختباره أيضا. هذه الفكرة هي أن MPMoviePlayerController قد يدخل حدث البيانات المفقودة بشكل أفضل من دفق HTTP ثم من قراءة الملف مباشرة. قد يكون الجانب السلبي هو أنه أقل كفاءة، لكنني أعتقد أن هذه زيادة طفيفة في وحدة المعالجة المركزية. لا أعرف إذا كانت واجهة الشبكة ستتعامل معها، لكنني أفترض أنها ليست مشكلة.

أترك هذه الإجابة ك Wiki، لأنني لا أملك حل عمل لكنني أريد أيضا.

نصائح أخرى

هناك طريقة لجعل هذا العمل، ولكن عليك أن تكتب تنزيل تنزيل HTTP Live Live الخاص بك.

في الأساس، تقوم بتحليل ملف .m3u8 (إنه معيار بسيط للغاية، ولكن يمكن أن تصبح صعبة مع تدفقات بديلة وإمكانية التسرب ببساطة وتحتاج إلى قائمة تشغيل جديدة للمتابعة) ثم قم بتنزيل القطع بتنسيق .ts التخزين المحلي الخاص بك، قل مجلد المستندات أو المخابئ الخ

ثم سيتعين عليك إعداد خادم HTTP محلي للسماح ل MPMoviePlayerController أو AVPlayer للوصول إلى الملفات الموجودة عبر HTTP (نظرا لأنها لن تلمس مسار ملف محلي)، بما في ذلك ملف قائمة التشغيل Re-Coded يشير إلى الملفات المحلية، التي سيتعين عليك إنشاء نفسك من قائمة التشغيل الأصلية. cocoahttpserver يعمل بشكل رائع لهذا.

بمجرد أن تفعل كل ذلك، فإنه يعمل بشكل رائع. إنه أمر لا مفر منه أن تحصل على القليل من التأخير أثناء تنزيل الجزء الأول أو اثنين قبل تقديم عنوان URL المحلي HTTP الخاص بك لاعب الفيلم، ولكن بعد ذلك تحصل على تنزيل سلس وتسجيل ومعاينة التشغيل.

حظ سعيد!

يستخدم iPhone تنزيل التقدمي لذلك لن ينقذ على الجهاز. لأنك تحتاج إلى تنزيله بشكل صريح ثم قم بتشغيل الفيديو من المجلد المحلي الخاص بك.

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