أسرع ترميز الرسومات ثلاثية الأبعاد في الوقت الحقيقي مع OpenGL و X264

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

سؤال

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

هنا هو ما أقوم به:

أولا، أمسك الإطارات

giveacodicetagpre.

ثم أنا أقفل الإطار، لأن هناك علة غريبة مع SWSSCALE (التي أستخدمها لتحويل Colorspace) تقلب الصورة عموديا عندما أتحول. أنا التقليب مقدما، لا شيء يتوهم.

giveacodicetagpre.

ثم قمت بتحويله إلى yuv420p

giveacodicetagpre.

ثم أنا فقط استدعاء تشفير X264. أنا بالفعل استخدام مسبقا Zerolatency.

giveacodicetagpre.

تخميني هو أنه يجب أن يكون هناك طريقة أسرع للقيام بذلك. التقاط الإطار وتحويله إلى yuv420p. سيكون من الجيد تحويله إلى YUV420P في GPU وفقط بعد أن نسخه إلى ذاكرة النظام، ونأمل أن هناك طريقة للقيام بتحويل الألوان دون الحاجة إلى الوجه.

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

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

المحلول

أولا، استخدم Async Texture قراءة باستخدام PBOS.here هو سبيل المثال إنه يسرع UPSالقراءة باستخدام 2 PBOS والتي تعمل بشكل غير متزامن دون توقف خط أنابيب مثل ReadPixels عند استخدامها مباشرة. حصل على تطبيق أداء بنسبة 80٪ عند تشغيله إلى PBOS. بالإضافة إلى ذلك، يعمل على بعض GPUS GlgetTexImage () بشكل أسرع من GlreadPixels () حتى تجربه.

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

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