안녕하세요. 도정진입니다.
emby-server 가 이전과는 설정이 많이 바뀌었네요. 그래서 메모 겸 글을 남기고 있습니다.
이전에는 Transcoding 항목에 custom ffmpeg 설정하는 부분이 있었는데요. 이제는 없네요.
아무래도 설치를 repo 를 통해서 하면 ffmpeg custom path 가 존재하고 그냥 deb 파일로 받아버리면 안나오는 것 같습니다.
설치 방법
1. 레포 등록하여 설치하기
https://emby.media/linux-server.html
상기 처럼 deb 파일로 설치를 진행하는 방법
2. repo 등록을 통한 설치
https://software.opensuse.org/download.html?project=home%3Aemby&package=emby-server
환경 맞추기
1. 하드웨어 트랜스코딩을 위한 emby 사용자를 아래의 그룹에 추가
usermod -a -G cdrom,audio,video,plugdev,users,dialout,dip,input emby
2. 본래 deb 패키지에 내장된 ffmpeg 사용하기
실제로 ffmpeg 패키지가 /opt/emby-server/bin/ffmpeg 이렇게 내장이 되어 있습니다.
그런데 실제로 데비안 8에서는 미리 들어가 있는 ffmpeg 에 대해서 의존성을 맞추기가 힘들더라구요. 그래서 그냥 저는 컴파일해서 사용합니다만, 그대로 사용하길 원하신다면 아래와 같이 드라이버 파일을 복사해 주셔야합니다.
cp /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so /opt/emby-server/lib/dri/
아무리 해도 의존성이 맞춰지지 않는 것입니다.
root@debian:/opt/emby-server/bin# ./ffmpeg
./ffmpeg: relocation error: ./ffmpeg: symbol av_hwdevice_find_type_by_name, version LIBAVUTIL_55 not defined in file libavutil.so.55 with link time reference
(에라이 ... ㅅ..ba)
3. 아무리 해도 안된다. 걍 컴파일해서 쓰자!
# 깃에서 코드 내려받기
git clone https://github.com/FFmpeg/FFmpeg.git
# 3.3.6 브랜치 체크아웃
git checkout n3.3.6
# 컴파일 configure 명령
./configure --prefix=/usr --enable-nonfree --enable-static --enable-vaapi --enable-gpl --enable-libfdk-aac --enable-libx264 --enable-libx265
# 컴파일 및 설치
make -j 4
make install
상기에서 컴파일 과정에서 필요한 의존성 패키지들은 대략 아래와 같습니다.
yasm nasm build-essential git gcc libvdpau1 vdpauinfo libva1 vainfo i965-va-driver libfdk-aac-dev libx264-dev libx265-dev
조금 더 필요할 수 있습니다.
만약에 버전이 맞지 않아서 (버전이 낮아서) 컴파일이 불가능 하다고 하면 아래와 같이 백포트에서 설치하시길 바랍니다.
apt-get install -t jessie-backports [패키지 이름]
non-free 패키지와 contrib 패키지를 설치하기 위해서는 그리고 백포트 패키지를 설치하기 위해서는 아래와 같이 apt 주소가 작성되어 있어야 합니다.
root@debian:~# cat /etc/apt/sources.list
#
# deb cdrom:[Debian GNU/Linux 8.7.0 _Jessie_ - Official amd64 NETINST Binary-1 20170114-13:24]/ jessie main
# deb cdrom:[Debian GNU/Linux 8.7.0 _Jessie_ - Official amd64 NETINST Binary-1 20170114-13:24]/ jessie main
deb http://ftp.kr.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
# jessie-updates, previously known as 'volatile'
deb http://ftp.kr.debian.org/debian/ jessie-updates main contrib non-free
deb-src http://ftp.kr.debian.org/debian/ jessie-updates main contrib non-free
# jessie-backports
deb http://ftp.kr.debian.org/debian/ jessie-backports main contrib non-free
deb-src http://ftp.kr.debian.org/debian/ jessie-backports main contrib non-free
4. 컴파일 한 ffmpeg 실행하기
root@debian:~# ffmpeg
ffmpeg version n3.3.6 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --prefix=/usr --enable-nonfree --enable-static --enable-vaapi --enable-gpl --enable-libfdk-aac --enable-libx264 --enable-libx265
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
root@debian:~#
정확히는 제가 어떻게 ffmpeg 를 빌드하는지는 모르겠습니다. 그냥 있는 그대로 간단하게만 빌드했습니다.
5. emby-server 에서 커스텀 빌드 ffmpeg 사용하도록 변경하기
root@debian:~# cat /opt/emby-server/bin/emby-server
#!/bin/sh
APP_DIR=/opt/emby-server
export FONTCONFIG_PATH=$APP_DIR/etc/fonts
export ICU_DATA=$APP_DIR/share/icu/59.1
export LD_LIBRARY_PATH=$APP_DIR/lib:$APP_DIR/lib/samba
export LIBVA_DRIVERS_PATH=$APP_DIR/lib/dri
if [ -z $EMBY_DATA ]; then
if [ -d /var/lib/emby-server ]; then
export EMBY_DATA=/var/lib/emby-server
else
export EMBY_DATA=/var/lib/emby
fi
fi
exec $APP_DIR/system/EmbyServer \
-programdata $EMBY_DATA \
-ffmpeg /usr/local/bin/ffmpeg \
-ffprobe /usr/local/bin/ffprobe \
-restartexitcode 3 \
-updatepackage 'emby-server-deb_{version}_amd64.deb'
6. 그런데 참 신기하게도 emby-server 최신 버전이 나왔다고 해서 업글 진행 후 내장 ffmpeg 정상 사용가능하네요..
emby 19543 2736 47 21:49 ? 00:10:20 /opt/emby-server/bin/ffmpeg -ss 00:37:57.000 -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -i file:/srv/plexdrive/100.djjproject/pvr/2017-KBS-가요대축제-KBS2.2부2017-12-29.ts -threads 1 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_vaapi -vf format=nv12|vaapi,hwupload,deinterlace_vaapi,scale_vaapi=w=1280:h=720 -b:v 2616000 -maxrate 2616000 -bufsize 5232000 -profile:v 578 -level 41 -force_key_frames expr:if(isnan(prev_forced_t),eq(t,t),gte(t,prev_forced_t+3)) -copyts -vsync -1 -codec:a:0 libmp3lame -ac 2 -ab 384000 -f segment -max_delay 5000000 -avoid_negative_ts disabled -map_metadata -1 -map_chapters -1 -start_at_zero -segment_time 3 -segment_time_delta -2277 -individual_header_trailer 0 -segment_format mpegts -segment_list_type m3u8 -segment_start_number 759 -segment_list /var/lib/emby/transcoding-temp/34aca6a89d672477001d33a60652e792.m3u8 -y /var/lib/emby/transcoding-temp/34aca6a89d672477001d33a60652e792%d.ts
컴파일 하면서 환경이 맞춰진것 같네요.
동일하게 실행 시 에러는 발생하는데요. 작동은 하네요..
root@debian:~# /opt/emby-server/bin/ffmpeg
/opt/emby-server/bin/ffmpeg: relocation error: /opt/emby-server/bin/ffmpeg: symbol av_hwdevice_find_type_by_name, version LIBAVUTIL_55 not defined in file libavutil.so.55 with link time reference
트랜스코딩 로그를 통해 에러 확인하기
혹시 동작이 되지 않고 CPU 가 100퍼로 치솟는 경우 에러로그를 참고하세요.
[AVHWDeviceContext @ 0x18458e0] No VA display found for device: /dev/dri/renderD128.
Device creation failed: -22.
Failed to set value '/dev/dri/renderD128' for option 'vaapi_device': Invalid argument
Error parsing global options: Invalid argument
상기 에러는 i965-driver 가 환경 변수가 맞지 않는 경우 발생하는 에러입니다. 그리고 emby 계정에 video 에 대한 권한이 없어서 발생하는 문제입니다.
그 다음 에러는 ffmpeg 를 너무 낮은 버전을 쓰면 deinterlace_vappi 라는 필터를 쓰지 못해서 발생하는 에러입니다. ffmpeg 를 이 글에 맞게 컴파일 하시면 됩니다.
[AVFilterGraph @ 0x308b3e0] No such filter: 'deinterlace_vaapi'
Error opening filters!
트랜스코딩 VAAPI 동작 확인
트와이스 영상 재생하면서 테스트 진행 하였습니다.
환경
mk802 카페 공제 N3150 듀얼이
CPU : N3150 4core / Braswall
RAM : 4GB
테스트 영상 정보
CPU 사용량 (SW 트랜스코딩 / HW 트랜스코딩)
그래픽 사용량 (SW 트랜스코딩 / HW 트랜스코딩)
인코딩 프레임 속도 (SW 트랜스코딩 / HW 트랜스코딩)
상기와 같은 결과를 보였으며 SW 일때는 끊김이 8초 정도 나오고 10초 끊기고 그래서 볼 수가 없습니다. 프레임 수로 비교하면 HW 시 31프레임이 나오는데요. 자원을 자 끌어다 쓰지 않는걸로 보아 속도 조절을 하는 것 같습니다.
간단 메모 겸 리뷰 여기서 마치도록 하겠습니다.
감사합니다.
'서버 > 리눅스 서버' 카테고리의 다른 글
데비안 / 우분투 PPTP VPN 서버 설치하기 (0) | 2018.03.28 |
---|---|
카비레이크 계열 (아폴로레이크 포함) VAAPI 트랜스코딩 (데비안8) (3) | 2018.02.04 |
리눅스에서 2TB 이상 하드디스크 포맷하기 (2) | 2018.01.13 |
데비안/우분투 Shadowsocks 프록시 서버 설치 및 활용하기 (2) | 2018.01.05 |
SeaFile Server 간단 설치 후기 (1) | 2017.12.25 |
댓글