Jellyfin FFMpeg का उपयोग करके वीडियो एन्कोडिंग / डिकोडिंग के हार्डवेयर त्वरण (HWA) का समर्थन करता है। FFMpeg और Jellyfin Intel Quicksync (QSV), AMD AMF, nVidia NVENC / NVDEC, OpenMax OMX और MediaCodec जैसे वीडियो त्वरण API के लिए कई हार्डवेयर त्वरण कार्यान्वयन का समर्थन कर सकते हैं।
VAAPI एक वीडियो त्वरण एपीआई है जो HWA प्रदान करने के लिए स्थानीय नियंत्रकों के साथ बातचीत करने के लिए libva का उपयोग करता है। QSV VAAPI के एक संशोधित (forked) संस्करण का उपयोग करता है और इसे libmfx और इसके मालिकाना ड्राइवरों (QSV- संगत प्रोसेसर की सूची) के साथ इंटरफेस करता है।

OS अनुशंसित HW त्वरण LinuxQSV, NVENC, VAAPI WindowsQSV, NVENC, AMF, VAAPIMacOSNone (VideoToolbox जल्द ही आ रहा है) AndroidMediaCodec, OMXRPOSOMX
HWA का उपयोग करके ग्राफिक्स कार्ड की तुलना
NVIDIA आधिकारिक ffmpeg सूची का उपयोग कर। सभी कार्डों का परीक्षण नहीं किया गया है। इन ड्राइवरों को लिनक्स और विंडोज के लिए अनुशंसित किया जाता है। यहाँ समर्थित कोडेक के लिए NVIDIA ग्राफिक्स कार्ड की आधिकारिक सूची है। NVENC के साथ काम करने वाले उबंटू का उदाहरण। H264 10-बिट NVIDIA त्वरण का समर्थन नहीं करता है।
VAAPI द्वारा समर्थित कोडेक्स की सूची।
एएमएफ लिनक्स समर्थन अभी तक आधिकारिक नहीं है और एएमडी जीएफएक्स कार्ड को लिनक्स पर वीएएपीआई का उपयोग करना चाहिए।
झेन सिर्फ सीपीयू है। वीडियो डिकोडिंग / एन्कोडिंग के किसी भी रूप के लिए कोई हार्डवेयर त्वरण नहीं है। हार्डवेयर त्वरण के लिए आपको APU या dGPU की आवश्यकता होगी।
लिनक्स पर इंटेल QSV बेंचमार्क।
विंडोज पर, आप डिकोडिंग के लिए DXVA2 / D3D11VA पुस्तकालयों और एन्कोडिंग के लिए libmfx लाइब्रेरी का उपयोग कर सकते हैं।
CentOS को QSV के लिए अतिरिक्त ड्राइवरों की आवश्यकता हो सकती है।
अधिक जानने के लिए यहां अतिरिक्त जानकारी दी गई है।
हार्डवेयर त्वरण को सक्षम करना
हार्डवेयर एक्सेलेरेशन विकल्प अनुभाग में व्यवस्थापक डैशबोर्ड में पाए जा सकते हैं ट्रांसकोडिंग । ड्रॉप-डाउन मेनू से एक मान्य हार्डवेयर त्वरण विकल्प का चयन करें, यदि लागू हो तो एक उपकरण का संकेत दें और हार्डवेयर एन्क्रिप्शन को सक्षम करने के साथ ही एन्क्रिप्शन को सक्षम करने के लिए जांच करें कि क्या आपका हार्डवेयर इसका समर्थन करता है।
मीडिया प्लेबैक के लिए हार्डवेयर त्वरण तुरंत उपलब्ध है। सर्वर को पुनरारंभ करने की आवश्यकता नहीं है।
विन्यास
प्रत्येक प्रकार के हार्डवेयर त्वरण, साथ ही साथ प्रत्येक प्रकार की जेलीफिन की स्थापना, उपयोग करने से पहले विभिन्न कॉन्फ़िगरेशन विकल्पों की आवश्यकता होती है। नवीनतम जानकारी के लिए आपके द्वारा चुने गए त्वरण के प्रकार पर FFMpeg प्रलेखन से परामर्श करना हमेशा सबसे अच्छा होता है।
डॉकटर में त्वरण
डॉकर में हार्डवेयर त्वरण का उपयोग करने के लिए, उपकरणों को कंटेनर में ले जाना चाहिए। यह देखने के लिए कि कौन से वीडियो उपकरण उपलब्ध हैं, आप अपनी मशीन पर sudo lshw -c वीडियो या vainfo चला सकते हैं।
टिप्पणी
NVIDIA GPU वर्तमान में डॉकर-कम्पोज पर समर्थित नहीं है।
आप निम्न की तरह कमांड के साथ सर्वर को शुरू करने के लिए डॉकर रन का उपयोग कर सकते हैं।
docker run -d --volume / path / to / config: / config --volume / path / to / cache: / cache --volume / path / to / media: / media ~ -user 1000: 1000 --net = होस्ट - श्रेष्ठ = जब तक बंद न करें --देव / देव / टपक / रेंडरD128: / देव / टपक / रेंडरD128 - देव / देव / टपक / कार्ड0: / देव / टपक / कार्ड0 ~ जेलीफिन / जेलीफिन
वैकल्पिक रूप से, आप एक कॉन्फ़िगरेशन फ़ाइल के साथ डॉक-कंपोज़ का उपयोग कर सकते हैं ताकि आपको हर बार अपने सर्वर को पुनरारंभ करने के लिए एक लंबी कमांड न चलाना पड़े।
संस्करण: "3" सेवाएं: जेलीफिन: छवि: जेलीफिन / जेलीफिन उपयोगकर्ता: 1000: 1000 network_mode: "मेजबान" संस्करणों: - / पथ / करने के लिए / config: / config - / पथ / से / कैश: / कैश - / पथ / मीडिया / मीडिया: / मीडिया डिवाइस: # VAAPI डिवाइस - / dev / dri / renderD128: / dev / dri / रेंडरD128 - / dev / dri / card0: / dev / dri / card0 # RPM 4 - / देव / vchiq: / देव / किलिक
डेबियन डोकर एनवीडिया
डॉकटर का उपयोग करके हार्डवेयर त्वरण प्राप्त करने के लिए, कई चरणों की आवश्यकता होती है।
आवश्यक शर्तें:
https://github.com/nvidia/nvidia-docker/wiki/Installation-(versión-2.0)
GNU / Linux x86_64 कर्नेल संस्करण के साथ; 3.10Docker; आर्किटेक्चर के साथ 1.12 NVIDIA GPU; Fermi (2.1) NVIDIA ड्राइवर ~ = 361.93 (पिछले संस्करणों में परीक्षण नहीं किया गया)
पुष्टि करें कि आपका GPU इस कमांड के साथ दिखाई देता है।
lspci | grep वीजीए
अपने होस्ट को अपडेट करें ताकि समस्या पैदा करने वाले पुराने सॉफ़्टवेयर का कोई मौका न हो।
apt-get update && apt-get dist-upgrade -y
आवश्यक फ़ाइलों को डाउनलोड करने के लिए उपयोग किए जाने वाले कर्ल को स्थापित करें।
apt-get install कर्ल
/Etc/apt/source.list में source.list संपादित करें और आवश्यकतानुसार प्रत्येक स्रोत में गैर-मुक्त योगदान जोड़ें।
deb http://ftp.ch.debian.org/debian/ खिंचाव मुख्य
उपरोक्त पंक्ति को एक उदाहरण के रूप में निम्नलिखित पंक्ति से मेल खाने के लिए संशोधित किया जाना चाहिए।
deb http://ftp.ch.debian.org/debian/ खिंचाव मुख्य गैर-मुक्त कंट्रीब
डाउनलोड करें और एनवीडिया डॉक कंटेनर फोंट जोड़ें।
कर्ल -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key adddistribution = $ (? / etc / os-release; echo $ID$VERSION_ID) कर्ल -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docklist | 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-$ (unr -r। sed $0027s / [^ -] * * - [^ -] * - // $0027)
Nvidia docker2 को रिपॉजिटरी से इंस्टॉल करें।
apt-get Install nvidia-docker2
जब रखरखाव पैकेज को बनाए रखने या स्थापित करने के लिए चुनने के लिए कहा जाए, तो रखरखाव रिलीज़ को स्थापित करने के लिए y टाइप करें।
स्थापना के बाद आप डिफ़ॉल्ट रनटाइम के रूप में एनवीडिया जोड़ना चाह सकते हैं: संपादन /etc/docker/daemon.json द्वारा इस तरह:
<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}
वर्तमान में काम कर रहे स्टीवर्ड की सेवाओं को पुनः आरंभ करें।
सुडोकू pkill -SIGHUP docker
एनवीडिया ड्राइवर और निर्भरता स्थापित करें।
apt-get install -t stretch-backports nvidia- ड्राइवर libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi
कृपया सभी परिवर्तनों को लागू करने के लिए अपने होस्ट को पुनरारंभ करें।
अब पुनः आरंभ करें
पुष्टि करें कि आपका ड्राइवर और युग्मक इस परीक्षण ड्राइव के साथ ठीक से कॉन्फ़िगर किए गए हैं।
nvidia-smidocker run --gpus 0 nvidia / cuda: 9.0-आधार nvidia-smi
मेज़बान और स्टीवडोर के आवश्यक संसाधनों तक पहुँच को मान्य करें।
ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1
उन पर्यावरण मापदंडों को जोड़कर अपने कंटेनर को शुरू करें।
-e "NVIDIA_DRIVER_CAPABILITIES = सभी" -e NVIDIA_VISIBLE_DEVICES = सभी - क्रम = nvidia --gpus सभी
एक पूर्ण निष्पादन आदेश इस तरह दिखेगा।
docker run -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 -v / cache: / cache --restore जब तक बंद न हो जाए ~ jellyfin / jellyfin
अगले विकल्प के साथ चलने पर कुछ विशेष चरण हैं।
--user 1000: 1000
आपको इस उपयोगकर्ता को वीडियो समूह में जोड़ना पड़ सकता है।
usermod -aG वीडियो उपयोगकर्ता
एक बार कंटेनर शुरू होने पर, आप मेजबान के संसाधनों तक पहुंच को फिर से सत्यापित कर सकते हैं।
docker exec -it जेलीफिन ldconfig -p | grep cuviddocker निष्पादन -it जेलीफिन ldconfig -p | grep libnvidia-encode.so.1
अब जेलीफिन प्लेबैक सेटिंग्स पर जाएं, एनवीडिया एनवीएनसी को सक्षम करें और लक्ष्य कोडेक का चयन करें जो आपके जीपीयू को ट्रांसकोडिंग की आवश्यकता वाली किसी भी फ़ाइल को चलाने के लिए समर्थन करता है। इसे जांचने के लिए बिटरेट को बदलना एक अच्छा तरीका है।
सब कुछ ठीक से काम कर रहा है यह सुनिश्चित करने के लिए ट्रांसकोडिंग लॉग की समीक्षा करें।
स्ट्रीम #0: 0 -----; #0: 0 (h264 (h264_cuvid) -------; h264 (h264_nvenc)) स्ट्रीम #0: 2 -------; #0: 1 (ac3 (देशी) -------, aac (देशी))<-pre>। डेब पैकेज से डेबियन / उबंटू पर VAAPI त्वरण की स्थापना
डेबियन / उबंटू में VAAPI कॉन्फ़िगरेशन को अनुमति सुनिश्चित करने के लिए कुछ अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होती है।
अपने सिस्टम पर VAAPI जानकारी की जांच करने के लिए, कमांड लाइन से vainfo को इंस्टॉल और रन करें।
- संबंधित प्रलेखन के बाद अपने सिस्टम के लिए VAAPI कॉन्फ़िगर करें। सत्यापित करें कि अब / dev / dri में रेंडर डिवाइस है, और इसे लिखने के लिए उपलब्ध अनुमतियां और समूह नोट करें, इस मामले में रेंडर करें: $ ls -l / dev / dritotal 0drwxr-xr-2 रूट 100 अप्रैल 13 16:37 by-pathcrw-rw ---- 1 रूट वीडियो 226, 0 अप्रैल 13 16:37 card0crw-rw ---- 1 रूट वीडियो 226, 1 अप्रैल 13 16:37 card1crw-rw ---- 1 रूट रेंडर 226, 128 अप्रैल 13 16:37 रेंडरडीडी128 नोट कुछ संस्करणों में, समूह रेंडर के बजाय वीडियो हो सकता है।
- Jellyfin सेवा उपयोगकर्ता को पिछले समूह में जोड़ें Jellyfin FFMpeg प्रक्रिया को उपकरण तक पहुँच प्रदान करने के लिए, और Jellyfin को पुनः आरंभ करें।
sudo usermod -aG रेंडर जेलीफिनसूडो सिस्टमैक्टल रिस्टार्ट जेलीफिन
- व्यवस्थापक पैनल के "ट्रांसकोडिंग" पृष्ठ पर VAAPI त्वरण सेट करें। वीए एपीआई के उपकरण मूल्य के रूप में ऊपर डिवाइस / देव / ड्रिप / रेंडरडाउन दर्ज करें।
- एक फिल्म देखें, और सत्यापित करें कि ffmpeg-transcode - * के लॉग्स को देखकर ट्रांसकोडिंग हो रही है / txt के तहत / var / log / jellyfin और radeontop या इसी तरह के टूल का उपयोग करके।
LXC या LXD कंटेनर
यह LXC 3.0 के साथ परीक्षण किया गया है और पहले के संस्करणों के साथ काम कर भी सकता है और नहीं भी।
जेलीफिन उपयोगकर्ता को वीडियो में जोड़ने के लिए या उनकी परिस्थितियों के आधार पर समूह को प्रस्तुत करने के लिए ऊपर दिए गए चरणों का पालन करें।
- अपने GPU को कंटेनर में जोड़ें।
$ lxc config डिवाइस जोड़ें gpu gpu जीआईडी = <gid de su video o grupo de renderización;
- सुनिश्चित करें कि आपके पास कंटेनर के अंदर कार्ड है:
$ lxc exec jellyfin - ls -l / dev / dritotal 0crw-rw ---- 1 रूट वीडियो 226, 0 जून 4 02:13 card0crw-rw ---- 1 रूट वीडियो 226, 0 जून 4 02:13 नियंत्रण D64crw -rw ---- 1 रूट वीडियो 226, 128 जून 4 02:13 रेंडरडीडी128
- वीडियो त्वरण का उपयोग करने के लिए जेलीफिन सेट करें और डिफ़ॉल्ट विकल्प गलत होने पर इसे सही डिवाइस पर इंगित करें।
- एक वीडियो चलाने की कोशिश करें जिसमें ट्रांसकोडिंग की आवश्यकता होती है और निम्नलिखित को चलाने के लिए, आपको एक हिट प्राप्त करना चाहिए।
$ ps aux | grep ffmpeg | ग्रीप गति
- आप एक वीडियो चलाने की भी कोशिश कर सकते हैं, जिसमें ट्रांसकोडिंग की आवश्यकता होती है, और यदि यह खेलता है तो आप अच्छे हैं।
उपयोगी संसाधन:
रास्पबेरी पाई 3 और 4
- वीडियो समूह में जेलीफिन सेवा उपयोगकर्ता को जोड़ें जेलीफिन की एफएफएमपी प्रक्रिया को एनकोडर तक पहुंच प्रदान करने के लिए अनुमति दें, और जेलीफिन। एसयूडी usermod -aG वीडियो को फिर से शुरू करें जेलीफिनसुडो सिस्टमैक्टल पुनः आरंभ करें आप रास्पबेरी Pi 4 का उपयोग कर रहे हैं, आपको sudo rpi-update चलाने की आवश्यकता हो सकती है कर्नेल और फर्मवेयर अपडेट के लिए।
- सर्वर डैशबोर्ड के ट्रांसकोडिंग टैब में हार्डवेयर त्वरण के रूप में ओपनमैक्स ओएमएक्स चुनें।
- GPU को आवंटित स्मृति की मात्रा बदलें। GPU त्वरित डिकोडिंग और एन्कोडिंग को एक साथ नहीं संभाल सकता है। sudo nano /boot/config.txt RPi4 के लिए, लाइन जोड़ें gpu_mem = 320 और देखें यहाँ RPi3 के लिए, पंक्ति gpu_mem को जोड़ें - 256 आप किसी भी मान को सेट कर सकते हैं, लेकिन 320 की मात्रा है 4K HEVC के लिए अनुशंसित। CPU और GPU मेमोरी के बीच विभाजन की जाँच करें: vcgencmd get_mem arm && vcgencmd get_mem gpu मॉनिटर CPU घड़ी का तापमान और गति: vcgencmd माप_temp और& vcgencmd उपाय_clock आर्म
टिप्पणी
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 (anac (देशी) ----; एमपी 3 (libmp3lame))#0: 0 स्ट्रीम ने HEVC को डिकोड करने के लिए सॉफ्टवेयर का इस्तेमाल किया और HWA का उपयोग एनकोड करने के लिए किया।
#0: 1 स्ट्रीम के परिणाम समान थे। डिकोडिंग एन्कोडिंग की तुलना में आसान है, इसलिए ये आम तौर पर अच्छे परिणाम हैं। HWA डिकोडिंग कार्य प्रगति पर है।