Jellyfin يدعم تسريع الأجهزة (HWA) لترميز / فك تشفير الفيديو باستخدام FFMpeg. يمكن لـ FFMpeg و Jellyfin دعم العديد من تطبيقات تسريع الأجهزة مثل Intel Quicksync (QSV) و AMD AMF و nVidia NVENC / NVDEC و OpenMax OMX و MediaCodec من خلال واجهات برمجة تطبيقات تسريع الفيديو.
VAAPI هي واجهة برمجة تطبيقات لتسريع الفيديو تستخدم libva للتفاعل مع وحدات التحكم المحلية لتوفير HWA. تستخدم QSV إصدارًا معدلاً (متشعبًا) من VAAPI وواجهته مع libmfx وبرامج التشغيل الخاصة به (قائمة المعالجات المتوافقة مع QSV).
تسريع HW الموصى به من قبل نظام التشغيل LinuxQSV و NVENC و VAAPI WindowsQSV و NVENC و AMF و VAAPIMacOSNone (VideoToolbox قريبًا) AndroidMediaCodec و OMXRPiOMX
مقارنة بين بطاقات الجرافيكس باستخدام HWA
NVIDIA باستخدام قائمة ffmpeg الرسمية. لم يتم اختبار جميع البطاقات. يوصى باستخدام برامج التشغيل هذه لنظامي التشغيل Linux و Windows. فيما يلي القائمة الرسمية لبطاقات رسومات NVIDIA الخاصة ببرامج الترميز المدعومة. مثال على عمل Ubuntu مع NVENC. لا يدعم H264 10 بت تسريع NVIDIA.
قائمة برامج الترميز التي يدعمها VAAPI.
لم يكن دعم AMF Linux رسميًا بعد ، ويجب على بطاقات AMD GFX استخدام VAAPI على Linux.
Zen هي وحدة المعالجة المركزية فقط. لا يوجد تسريع للأجهزة لأي شكل من أشكال فك تشفير / تشفير الفيديو. ستحتاج إلى APU أو dGPU لتسريع الأجهزة.
معايير Intel QSV على Linux.
في نظام التشغيل Windows ، يمكنك استخدام مكتبات DXVA2 / D3D11VA لفك التشفير ومكتبة libmfx للترميز.
قد يتطلب CentOS برامج تشغيل إضافية لـ QSV.
هنا معلومات إضافية لمعرفة المزيد.
تمكين تسريع الأجهزة
يمكن العثور على خيارات تسريع الأجهزة في لوحة تحكم المشرف في القسم تحويل الشفرة . حدد خيارًا صالحًا لتسريع الأجهزة من القائمة المنسدلة ، وحدد جهازًا إن أمكن ، وحدد تمكين تشفير الأجهزة لتمكين التشفير وكذلك فك التشفير إذا كان جهازك يدعمه.
تسريع الأجهزة متاح على الفور لتشغيل الوسائط. لا حاجة لإعادة تشغيل الخادم.
الإعداد
يتطلب كل نوع من تسريع الأجهزة ، بالإضافة إلى كل نوع من أنواع تثبيت Jellyfin ، خيارات تكوين مختلفة قبل استخدامها. من الأفضل دائمًا الرجوع إلى وثائق FFMpeg حول نوع التسريع الذي تختاره للحصول على أحدث المعلومات.
التسارع في دوكر
لاستخدام تسريع الأجهزة في Docker ، يجب نقل الأجهزة إلى الحاوية. لمعرفة ما هي أجهزة الفيديو المتوفرة ، يمكنك تشغيل sudo lshw -c video أو vainfo على جهازك.
ملاحظة
وحدات معالجة الرسومات NVIDIA غير مدعومة حاليًا على Docker-Compose.
يمكنك استخدام Docker Run لبدء الخادم بأمر مثل ما يلي.
تشغيل عامل الميناء -d- حجم / مسار / إلى / التكوين: / التكوين - حجم / مسار / إلى / ذاكرة التخزين المؤقت: / ذاكرة التخزين المؤقت - حجم / مسار / إلى / وسائط: / وسائط ~-المستخدم 1000: 1000 - شبكة = المضيف - إعادة التشغيل = ما لم يتوقف --dev / dev / dri /enderD128: / dev / dri /overD128 --dev / dev / dri / card0: / dev / dri / card0 ~ jellyfin / jellyfin
بدلاً من ذلك ، يمكنك استخدام docker-compose مع ملف تكوين حتى لا تضطر إلى تشغيل أمر طويل في كل مرة تقوم فيها بإعادة تشغيل الخادم الخاص بك.
الإصدار: خدمات "3": jellyfin: image: jellyfin / jellyfin user: 1000: 1000 network_mode: "host" مجلدات: - / path / to / config: / config - / path / to / cache: / cache - / path / to / media: / أجهزة الوسائط: # أجهزة VAAPI - / dev / dri /enderD128: / dev / dri /enderD128 - / dev / dri / card0: / dev / dri / card0 # RPi 4 - / dev / vchiq: / dev / qchiq
ديبيان دوكر نفيديا
لتحقيق تسريع الأجهزة باستخدام عامل الإرساء ، يلزم عدة خطوات.
الشروط:
https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)
غنو / لينكس x86_64 مع نسخة النواة ؛ 3.10 عامل الميناء ؛ = 1.12 NVIDIA GPU مع بنية ؛ Fermi (2.1) NVIDIA Drivers ~ = 361.93 (لم يتم اختباره في الإصدارات السابقة)
تأكد من ظهور GPU الخاص بك مع هذا الأمر.
lspci | grep VGA
قم بتحديث مضيفك حتى لا تكون هناك فرصة لوجود برامج قديمة تسبب مشكلات.
apt-get update && apt-get dist-upgrade -y
قم بتثبيت الضفيرة ليتم استخدامها لتنزيل الملفات الضرورية.
apt-get install curl
تحرير sources.list في /etc/apt/sources.list وإضافة مساهمات غير مجانية لكل مصدر حسب الحاجة.
deb http://ftp.ch.debian.org/debian/ تمدد رئيسي
يجب تعديل السطر أعلاه ليطابق السطر التالي كمثال.
deb http://ftp.ch.debian.org/debian/ تمتد المساهمة الرئيسية غير الحرة
قم بتنزيل خطوط حاوية إرساء Nvidia وإضافتها.
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key adddistribution = $ (. / etc / os-release؛ echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
قم بتحديث قائمة الحزم الخاصة بك مرة أخرى لتنزيل أحدث البرامج المتاحة في المستودع الجديد.
apt-get update
ثبّت رؤوس لينكس وشغّل الأمر التالي.
apt-get install linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)
بدلاً من ذلك ، قم بتشغيل هذا الأمر إذا كنت في السباق من أجل التوافق.
apt-get install -t stretch-backports linux-headers-$ (uname -r | sed $0027s / [^ -] * - [^ -] * - // $0027)
قم بتثبيت Nvidia docker2 من المستودع.
apt-get install nvidia-docker2
عند مطالبتك باختيار الحفاظ على حزمة الصيانة أو تثبيتها ، اكتب y لتثبيت إصدار الصيانة.
بعد التثبيت ، قد ترغب في إضافة nvidia كوقت التشغيل الافتراضي: عن طريق تحرير /etc/docker/daemon.json كما يلي:
<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}
إعادة تشغيل خدمات الشحن والتفريغ التي تعمل حاليًا.
sudo pkill -SIGHUP عامل ميناء
تثبيت برامج تشغيل وتبعيات nvidia.
apt-get install -t stretch-backports nvidia-driver libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi
يرجى إعادة تشغيل مضيفك لتطبيق جميع التغييرات.
إعادة التشغيل الآن
تحقق من تكوين برنامج التشغيل والمقرنة بشكل صحيح باستخدام محرك الاختبار هذا.
تشغيل nvidia-smidocker - gpus 0 nvidia / cuda: 9.0-base nvidia-smi
التحقق من الوصول إلى الموارد اللازمة للمضيف و stevedore.
ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1
ابدأ الحاوية بإضافة معلمات البيئة هذه.
-e "NVIDIA_DRIVER_CAPABILITIES = all" -e NVIDIA_VISIBLE_DEVICES = all --runtime = nvidia --gpus all
سيبدو أمر التنفيذ الكامل هكذا.
تشغيل docker -d --name = jellyfin -e NVIDIA_DRIVER_CAPABILITIES = all -e NVIDIA_VISIBLE_DEVICES = all --gpus all --runtime = nvidia -p 8096: 8096 -p 8920: 8920 -v / config: / config -v / media: / media -v / cache: / cache --restore إلا إذا توقفت ~ jellyfin / jellyfin
هناك بعض الخطوات الخاصة عند التشغيل مع الخيار التالي.
- المستخدم 1000: 1000
قد تضطر إلى إضافة هذا المستخدم إلى مجموعة الفيديو.
مستخدم الفيديو usermod -AG
بمجرد بدء الحاوية ، يمكنك إعادة التحقق من صحة الوصول إلى موارد المضيف.
docker exec -it jellyfin ldconfig -p | grep cuviddocker exec -it jellyfin ldconfig -p | grep libnvidia-encode.so.1
انتقل الآن إلى إعدادات تشغيل Jellyfin ، وقم بتمكين Nvidia NVENC وحدد برامج الترميز المستهدفة اعتمادًا على ما يدعمه GPU الخاص بك لتشغيل أي ملف يحتاج إلى تحويل. يعد تغيير معدل البت طريقة جيدة لاختبار ذلك.
راجع سجلات التحويل للتأكد من أن كل شيء يعمل بشكل صحيح.
تيار #0: 0 ----- ؛ #0: 0 (h264 (h264_cuvid) -------؛ h264 (h264_nvenc)) تيار #0: 2 -------؛ #0: 1 (ac3 (أصلي) ------- ؛ aac (أصلي))<-pre>إعداد تسريع VAAPI على Debian / Ubuntu من حزم .deb
تتطلب تهيئة VAAPI في Debian / Ubuntu بعض التكوين الإضافي لضمان صحة الأذونات.
للتحقق من معلومات VAAPI على نظامك ، قم بتثبيت وتشغيل vainfo من سطر الأوامر.
- تكوين VAAPI لنظامك باتباع الوثائق ذات الصلة. تحقق من وجود الآن جهاز عرض في / dev / dri ، ولاحظ الأذونات والمجموعة المتاحة للكتابة إليه ، في هذه الحالة: $ ls -l / dev / dritotal 0drwxr-xr-x 2 root 100 13 أبريل 16:37 بواسطة pathcrw-rw ---- 1 جذر فيديو 226 ، 0 أبريل 13 16:37 card0crw-rw ---- 1 جذر فيديو 226 ، 1 أبريل 13 16:37 card1crw-rw ---- تقديم الجذر الأول 226 ، 128 أبريل 13 16:37 التقديم D128 ملاحظة في بعض الإصدارات ، قد تكون المجموعة فيديو بدلاً من التقديم.
- أضف مستخدم خدمة Jellyfin إلى المجموعة السابقة للسماح بالوصول إلى عملية Jellyfin FFMpeg إلى الجهاز ، وأعد تشغيل Jellyfin.
sudo usermod -aG تقديم jellyfinsudo systemctl إعادة تشغيل jellyfin
- قم بتعيين تسريع VAAPI في صفحة "Transcoding" بلوحة الإدارة. أدخل device / dev / dri /enderD128 أعلاه كقيمة الجهاز لـ VA API.
- شاهد فيلمًا وتحقق من أن تحويل الترميز يحدث عن طريق عرض سجلات ffmpeg-transcode - *. Txt تحت / var / log / jellyfin واستخدام radeontop أو أدوات مماثلة.
حاوية LXC أو LXD
تم اختبار هذا مع LXC 3.0 وقد يعمل أو لا يعمل مع الإصدارات السابقة.
اتبع الخطوات أعلاه لإضافة مستخدم jellyfin إلى مجموعة الفيديو أو العرض ، حسب ظروفهم.
- أضف GPU إلى الحاوية.
إضافة جهاز تكوين $ lxc gpu gpu gid = <gid de su video o grupo de renderización;
- تأكد من وجود البطاقة داخل الحاوية:
$ lxc exec jellyfin - ls -l / dev / dritotal 0crw-rw ---- 1 root video 226، Jun 4 02:13 card0crw-rw ---- 1 root video 226، Jun 4 02:13 controlD64crw -RW ---- 1 جذر فيديو 226 ، 128 يونيو 4 02:13 تقديم D128
- قم بتعيين Jellyfin لاستخدام تسريع الفيديو وتوجيهه إلى الجهاز الصحيح إذا كان الخيار الافتراضي خاطئًا.
- حاول تشغيل فيديو يتطلب تحويل الشفرة وتشغيل ما يلي ، يجب أن تحصل على نجاح.
$ ps aux | grep ffmpeg | تسريع grep
- يمكنك أيضًا تجربة تشغيل فيديو يتطلب تحويل الشفرة ، وإذا تم تشغيله ، فأنت جيد.
موارد مفيدة:
التوت بي 3 و 4
- أضف مستخدم خدمة Jellyfin إلى مجموعة الفيديو للسماح بوصول عملية FFMpeg من Jellyfin إلى برنامج التشفير ، وأعد تشغيل Jellyfin.sudo usermod -aG video jellyfinsudo systemctl إعادة تشغيل jellyfin ملاحظة إذا كنت تستخدم Raspberry Pi 4 ، فقد تحتاج إلى تشغيل sudo rpi-update لتحديثات kernel والبرامج الثابتة.
- اختر OpenMAX OMX كتسريع للأجهزة في علامة التبويب Transcoding للوحة أجهزة الخادم.
- قم بتغيير مقدار الذاكرة المخصصة لوحدة معالجة الرسومات. لا يمكن لوحدة معالجة الرسومات معالجة فك التشفير والتشفير المتساعرين في نفس الوقت sudo nano /boot/config.txt لـ RPi4 ، أضف السطر gpu_mem = 320 شاهد المزيد هنا لـ RPi3 ، أضف السطر gpu_mem = 256 يمكنك تعيين أي قيمة ، ولكن 320 هي الكمية يوصى به لـ 4K HEVC. تحقق من التقسيم بين وحدة المعالجة المركزية وذاكرة GPU: vcgencmd get_mem arm && vcgencmd get_mem gpu Monitor درجة حرارة ساعة وحدة المعالجة المركزية وسرعتها: vcgencmd measure_temp && vcgencmd measure_clock arm
ملاحظة
لا يدعم RPi4 حاليًا فك تشفير HWA ، فقط تشفير H.264 HWA. التبريد النشط مطلوب ، التبريد السلبي غير كاف للتحويل. في اختبارات RPi3 ، لم يعمل تحويل الترميز بالسرعة الكافية للعمل في الوقت الفعلي لأنه تم تغيير حجم الفيديو.
التحقق من الشفرات
للتحقق من أنك تستخدم المكتبات المناسبة ، قم بتشغيل هذا الأمر على سجل التحويل الخاص بك. يمكن العثور على هذا في لوحة تحكم المشرف> السجلات ، و / var / log / jellyfin إذا كان من خلال المستودع.
grep -A2 "تعيين البث: /var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txtأدى هذا إلى النتائج التالية.
رسم الخرائط الحالي: #0 الحالي: 0 ---- ؛ #0: 0 (hevc (أصلي) ----؛ h264 (h264_omx)) الحالي #0: 1 ----؛ #0: 1 (aac (أصلية) ----؛ mp3 (libmp3lame))استخدم الدفق #0: 0 برنامجًا لفك تشفير HEVC واستخدم HWA للتشفير.
كان للتيار #0: 1 نفس النتائج. فك التشفير أسهل من التشفير ، لذا فهي نتائج جيدة بشكل عام. فك تشفير HWA هو عمل مستمر.