سؤال

يجب أن أقرأ ملفًا كبيرًا يحتوي على العديد من إطارات الرسوم المتحركة من CD/DVDROM وعرضه في الشاشة كرسوم متحركة. عند القراءة من القرص الصلب ، فإن استراتيجية قراءة إطار في الذاكرة ، والمعالجة ، وعرضها ، ثم قراءة الإطار التالي تعمل بشكل جيد ، ولكن عندما أقرأ من الجهاز البصري ، تقتل وقت الوصول إلى الرسوم المتحركة.

يمكنني استخدام أساليب C و Winapi OpenFile/ReadFile.

كيف يمكنني قراءة محتويات ملف مخزّن على جهاز بصري لتحقيق سرعة الرسوم المتحركة في الوقت الفعلي (لقد رأيت برنامجًا يفعله حتى بسرعة مزدوجة ، بالتأكيد لا يعزز الملف بأكمله قبل بدء الرسوم المتحركة)؟

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

المحلول

تقنيتان:

  1. مخزن مؤقت كبير أو ذاكرة التخزين المؤقت ، كما هو الحال في متعددة MB. يحتوي CD/DVD على إدخال/إخراج متتابع معقول ولكن بطيئة جدًا للبحث عن سرعات/الوصول (كما لاحظت) ، لذلك من الصعب إعادة ملء المخزن المؤقت. تحتاج فقط إلى أن يكون المخزن المؤقت كبيرًا بدرجة كافية بحيث يغطي بضع ثوان للسماح للقرص بالدوران إذا لزم الأمر ، ويسعى إذا تم نسجه بالفعل.

  2. Multi-Threshence: احتفظ بقراءة مؤشر ترابط واحد باستمرار ورسوم متحركة منفصلة لتفكك الخيط. يجب أن تمنع موضوع القارئ إذا كان متوقعًا بعيدًا عن فك التشفير.

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

تعديل:هذه هي التقنيات التي يستخدمها mplayer. بالإضافة إلى ذلك ، يجب أن تفكر في تنسيق الترميز الخاص بك إذا أمكن ذلك - يمكن لتنسيقات مختلفة أن تتجاوز وقت وحدة المعالجة المركزية عند فك التشفير للحصول على بيانات أقل للقراءة من القرص. بضع قطع من المعلومات لتقدير مقدار الفيديو الذي يجب ضغطه.

  • اقرأ السرعة لـ 1x CD-ROM: 150 KIB/S (السرعة الدنيا العارية)
  • اقرأ السرعة 4x CD-ROM: 600 KIB/S (محرك الحد الأدنى القياسي)
  • اقرأ السرعة 16x CD-ROM: 1600 KIB/S (الحد الأقصى يمكن الحصول عليها ، وعادة ما يتم تشغيل ما يصل إلى 8x فقط)
  • اقرأ السرعة 1x DVD محرك الأقراص: ~ 1.3 MIB/S
  • التعريف القياسي الفيديو المضغوط مع MPEG2 بجودة DVD: ~ 600 KIB/S
  • التعريف القياسي فيديو مضغوط مع MPEG4 في جودة DVD: ~ 100 KIB/S
  • فيديو تعريف قياسي غير مضغوط: ~ 30 ميجابايت/ثانية
  • 1000 × 1000 (1 ميجابكسل) صورة بألوان 24 بت: 3 ميغابايت
  • صورة قياسية 1 ميجابكسل بألوان 8 بت (رمادي): 1 ميغابايت

EDIT2: معلومات إضافية

  • لاحظ أنه يمكن قراءة أقراص DVD عادة على 8x أو نحو ذلك إذا كان محرك الأقراص الخاص بك يدعمه (معظمه يفعل الآن).
  • تبدأ الرسوم المتحركة في الظهور بسلاسة في 24+ إطارات/ثانية. أدناه سوف تظهر متشنج للمشاهد.
  • عادة ما يكون الضغط بدون فقدان جيدًا لحوالي 50 ٪ في حجم الصور الفوتوغرافية. قد تختلف المسافة المقطوعة بالرغم من ذلك.
  • يعتمد التشغيل السلس للرسوم المتحركة جزئيًا على كيفية التحدث إلى أجهزة الفيديو. بعض الطرق ستنتج نتائج أفضل من غيرها. أقترح بشدة أن تنظر إلى رمز Mplayer في هذه الحالة.

نصائح أخرى

شيء واحد لمحاولة هو الضغط. على سبيل المثال ، سيستغرق تحميل ملف zip من محرك الأقراص وقتًا أقل ولكن يتطلب المزيد من وقت وحدة المعالجة المركزية للمعالجة. إذا كان الضغط غير المفقود ممكنًا ، فقد يكون ذلك يستحق الفحص. فهم محرك الأقراص المضغوطة مفيد أيضًا. يدور محرك الأقراص بسرعة الدورانية الثابتة. هذا يعني أن البيانات على الخارج من القرص يحمل أسرع من البيانات الموجودة في الداخل. ومع ذلك ، فإن الموقد سيحرق البيانات من الداخل إلى الخارج ، لذا قد ينتهي بك الأمر إلى حرق الكثير من البيانات قبل "الرسوم المتحركة" للحصول على سرعة قراءة Max.

استعمال إنشاء ملف مع open_always ، و file_flag_sequential_scan

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