التخزين المحلي لـ HTML5 لمصدر عنصر الصوت - هل هذا ممكن؟

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

سؤال

لقد قمت مؤخرًا بتجربة ميزات الصوت والتخزين المحلي لـ html5 وواجهت شيئًا جعلني في حيرة من أمري.

أود أن أكون قادرًا على تخزين مصدر عنصر الصوت مؤقتًا أو تخزينه محليًا لتمكين التشغيل بشكل أسرع وبدون اتصال بالإنترنت.المشكلة هي أنني لا أستطيع أن أرى كيف يكون ذلك ممكنًا مع التنفيذ الحالي.

لقد حاولت ما يلي باستخدام WebKit:

  1. إنشاء ملف بيان لإعداد التخزين المؤقت المحلي ولكن يبدو أن الملف الصوتي ليس عنصرًا قابلاً للتخزين المؤقت ربما بسبب طريقة البث أو شيء من هذا القبيل

  2. لقد حاولت أيضًا استخدام جافا سكريبت لوضع كائن صوتي في وحدة التخزين المحلية ولكن حجم ملف mp3 يجعل هذا مستحيلًا بسبب مشكلات في الذاكرة (على ما أعتقد).

  3. لقد حاولت استخدام بيانات uri وbase64 لاستخدام html كوسيلة نقل صوتي يمكن تخزينها مؤقتًا ولكن مرة أخرى فإن حجم الملف يجعل هذا أمرًا محظورًا.كما يبدو أن عنصر الصوت لا يحب هذا في WebKit (يعمل بشكل جيد في mozilla)

  4. لقد جربت عدة طرق لوضع البيانات في مخزن قاعدة البيانات المحلية.مرة أخرى يعاني من نفس المشاكل مثل الحالات الأخرى.

أرغب في سماع أي أفكار أخرى قد تكون لدى أي شخص حول كيفية تحقيق هدفي المتمثل في التشغيل دون اتصال باستخدام التخزين المؤقت/التخزين المحلي في WebKit.

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

المحلول

لقد مر وقت طويل منذ أن طرحت هذا السؤال واعتقدت أنني سأقدم بعض المعلومات حول كيفية حل المشكلة.لقد قمنا بشكل أساسي بتشفير البيانات إلى ملفات PNG باستخدام تقنية مشابهة لهذه:

http://audioscene.org/scene-files/yury/pngencoding/sample.html

ثم قم بتخزين الصورة مؤقتًا على الجهاز المحمول باستخدام وحدة تخزين html5 المحلية والوصول إليها حسب الحاجة.كانت ملفات PNG كبيرة جدًا ولكن هذا نجح بالنسبة لنا.

نصائح أخرى

لقد كنت أحاول القيام بذلك بنفسي، على نظام التشغيل iOS (لأجهزة iPhone / iPad) ولكنه يرفض تخزين الملفات الصوتية مؤقتًا في وضع عدم الاتصال، حتى لو كانت في Cache Manifest.

إنه لا يخطئ، ولكنه بدلاً من ذلك يتظاهر ببساطة بأنه قام بتشغيل عنصر الصوت إذا تم استدعاؤه عبر JavaScript دون تحكم.إذا كان مضمنًا مع عنصر تحكم، فإنه يعرض عنصر تحكم بديلًا يقول "لا يمكن تشغيل ملف صوتي".إنه يعمل بشكل جيد إذا كان التطبيق قادرًا على الاتصال بالإنترنت.

يبدو أنه لا يقوم بتخزين الصوت مؤقتًا، ويبدو أن تشغيل مصدر صوت آخر يؤدي إلى مسح المورد السابق من الذاكرة - وهذه وظيفة لا قيمة لها حتى عند الاتصال بالإنترنت.

لقد قمت بتجربة ترميز base64 للصوت كمعرف URI للبيانات.يعمل هذا في Safari على سطح المكتب (على الأقل بالنسبة للعينات القصيرة إلى حد ما التي كنت أستخدمها حوالي 20-30 ألفًا) ولكن يبدو أنه غير مدعوم على الإطلاق على نظام التشغيل iOS - فهو لا يفعل شيئًا بصمت، وهو أمر مزعج للغاية.

لا أعرف شيئًا عن البائعين الآخرين - اعتاد Google Chrome على عدم دعم معرفات URI للبيانات للصوت ولكن ربما قاموا بإصلاحها ...- يبدو أن هذا غير ممكن في الوقت الحالي.

تحديث:تناقض بسيط مع iPhone OS 3.x (تم اختباره مع الإصدار 3.1.2):إذا تم تحديد عنصر صوتي في تطبيق ويب غير متصل بالإنترنت ولكنه لا يحتوي على عنصر تحكم، فإنه يعرض عنصر تحكم غير تفاعلي مع قرص دوار غير متحرك عليه (وهو ما لا ينبغي أن يفعله بالتأكيد).أفترض أن هذا قد تم إصلاحه في نظام التشغيل iOS 4.x (والذي من المفترض أن يصدر في الأسبوع المقبل).

لقد أمضيت بعض الوقت في محاولة القيام بذلك في لعبة أقوم بإنشائها، وبما أنني أستطيع أن أقول أن المتصفحات (Firefox وChrome) لا تزال لا تدعم التخزين المؤقت لعناصر الصوت، اعتقدت أنني سأنشر الحل الذي وجدته.

يوجد حل بديل موضح هنا: http://dougx.net/plunder/index.php#code

أستطيع أن أؤكد أنه يعمل بشكل جيد، ولكن ربما يكون أكثر ملاءمة للملفات الصغيرة.كما وصف هنا (http://dougx.net/plunder/GameSounds.txt)، يمكنك تشفير الصوت كسلاسل base64، ومنحهم رأس data:audio/ogg;base64 (أو أي تنسيق صوت متوافق)، والذي يمكن بعد ذلك لصوت HTML5 قراءته.نظرًا لأن هذه مجرد سلسلة، فسيقوم المتصفح بتخزينها مؤقتًا.

أعتقد أنه سيكون من الأفضل تشغيل نهج البيان، نظرًا لأن هذا يبدو وكأنه الآلية الأكثر صلة بالتخزين المؤقت للملف محليًا.

ماذا يحدث إذا قمت بتغيير رؤوس HTTP للملف الصوتي، على سبيل المثال: Content-Type و Expires؟هل يفعل المتصفح شيئًا مختلفًا إذا تم تغيير امتداد الملف؟

أرى أنه لم يحالفك الحظ حتى الآن.

قد ترغب في إلقاء نظرة على JAI (واجهة جافا سكريبت الصوتية) ("أول واجهة جافا سكريبت في العالم للويب <audio>").أو التواصل مع أليستر ماكدونالد, ، من كتبه.

إذا فشل ذلك، فإن دكتور HTML5 قد تكون قادرة على المساعدة.

تعمل إضافة ملفات الفيديو والصوت إلى وحدة التخزين المحلية مع نظام التشغيل iOS 4.3.

لقد أضفت للتو مقطع فيديو وملفًا صوتيًا للبيان وتم تنزيلهما إلى وحدة التخزين غير المتصلة بالإنترنت على جهاز iPad.

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