안녕하세요.
나스당에 오늘 입당한 지니군입니다.
[결론] 214play 하드웨어 트랜스 코딩으로 모바일 트래픽 줄여서 TV보기가 가능하다!!
많은 분들이 tvheadend 를 사용하시는것 같은데요.
214play 등 play 붙은 모델에서 tvheadend 사용할때 자체 트랜스코딩시 하드웨어 트랜스코딩을 하지 않고,
CPU만 사용하게 되는 문제로 이리저리 TEST 해보고 결국 성공한 내용을 공유 드리려고 합니다.
[간략설명]
트랜스코딩하지 않고 pass 모드로 동작하는 http 주소를 pipe 를 통해 하드웨어 트랜스코딩을 지원하는 ffmpeg 로 보내 트랜스 코딩한후 그것을 tvheadend 에서 방송주소로 사용하게 합니다.
[약간 긴 설명]
1. 기본적으로 트랜스코딩하지 않고, vlc 등으로 TV 시청이 가능한 환경까지는 세팅해 놓아야 합니다.
(저는 pipe 로 service url 을 사용하기 때문에 channel 에는 등록하지 않고 service 까지만 등록하였습니다.)
2. NAS의 적당한 곳에 각 채널별 트랜스코딩용 파일을 만듭니다. 파일의 내용은 아래와 같습니다.
예를들어 저는 /volume1/nas/aaaa.sh 로 만들었다고 치겠습니다.
#!/bin/bash
sudo /var/packages/VideoStation/target/bin/ffmpeg -loglevel fatal -prefer_smd -i http://10.9.8.141:9981/stream/service/db9ba6320863d0a0d075e6fcede3ff38 -vcodec h264_smd -profile:v main -bf 0 -tune zerolatency -x264opts bitrate=660:vbv-maxrate=660:vbv-bufsize=22 -s 864x486 -acodec libfaac -ab 128K -ac 2 -f mpegts pipe:1
내용중 http://10.9.8.141:9981/stream/service/db9ba6320863d0a0d075e6fcede3ff38 는 제 tvheadend 의 서비스 주소중 하나 입니다.
때문에 저 주소를 사용하시는 서버의 서비스주소로 바꿔 주어야 합니다.
내부 주소로 하시길 추천드립니다. (설정 내용으로는 h264_smd 옵션이 하드웨어 가속하는 h264 코덱이고 해상도 864x486, bitrate 660 + 128 profile main 으로 하라는 내용입니다. 적당히 옵션은 바꾸시면 됩니다.)
** 추가 **
로컬에서 ffmpeg 가 tvheadend 서비스 주소로 접근을 하므로 접근시 id/pw 를 물어 보게 됩니다.
이걸 안 물어 보게 해야 합니다.
tvheadend 에 계정을 하나 생성합니다.
username = *
Allowed networks = 10.9.8.0/24
패스워드도 생성합니다.
username = *
password = 없음
위 설정으로 10.9.8.0 네트워크에서는 id pw 없이 접속이 가능합니다.
보안을 위해 꼭 네트워크 제한을 하길 바랍니다.
192.168.0.1/24 등 본인에게 맞게 설정하세요.
********************
3. SSH 등으로 접속하여 해당파일을 tvheadend 계정이 실행할수 있도록 권한을 주시면 됩니다.
chmod 755 /volume1/nas/aaaa.sh
4. 하드웨어 트랜스코딩은 오로지 root 권한이 있어야 사용이 가능했습니다. 위 명령줄을 보시면 맨 앞에 sudo 가 있는데, 이것이 root 권한으로 해당 명령을 실행하겠다는 의미입니다. 그러나 저렇게 실행하면 root 암호를 요구하게 됩니다. 그래서 암호 안물어 보게 /etc/sudoers 파일을 수정해야 합니다.
vi /etc/sudoers
# Allow root to execute any command
root ALL=(ALL) ALL 밑에 부분에
tvheadend-testing ALL=NOPASSWD:/var/packages/VideoStation/target/bin/ffmpeg
를 추가합니다.
저는 tvheadend 실행계정이 tvheadend-testing 라서 저렇게 하였고, 계정명이 다르면 바꾸어 주시면 됩니다.
5. tvheadend - configure - dvb input - network 에 iptv 형식으로 network 를 하나 추가합니다.(기존것 사용해도 됩니다.)
6. tvheadend - configure - dvb input -muxes 에 add 버튼으로 추가를 하는데, pipe로 위에 만들어 놓은것을 실행하게 해야합니다.
pipe:///volume1/nas/aaaa.sh
를 url 부분에 위 내용을 넣으시면 됩니다.(저는 아까 /volume1/nas/aaaa.sh 로 만들었으니 저렇게 넣습니다.)
pipe: 뒤에 / 가 3개인것에 주의하세요.
정상적으로 다 되었다면 muxes 메뉴에서 왼쪽에 play 누르면 트랜스코딩된 TV화면을 볼수 있어야 합니다.
그리고 정상적으라면 services 에도 정상등록되었을거구요.
channel 에 등록해서 사용하시면 됩니다.
[덧]
아쉽게도 이렇게 하면 만약에 해상도 별로 트랜스코딩을 원하신다면 같은 채널이 트랜스코딩별로 여러개 등록을 해야 합니다...
저는 위에 나온 bitrate 제한된 864x486 해상도와
녹화용으로 bitrate 제한되지 않은 1920x1080 해상도 두개를 운용하고 있습니다.
그래서 EPG 리스트에 두개씩 나오게 됩니다.
(APP 에서는 Tag 로 구분해 놓으면 한개씩 볼수 있으니 상관은 없네요.)
감사합니다~!
꿀팁 감사합니다
네 pc에 설정해서 사용하시면 vga 가속 사용가능할겁니다
#CLiOS
도움되셨다니 저도 감사합니다
#CLiOS
공유기 > 셋탑 > 나스 이렇게 되었은데요 IPTV 설정 다했는데 그다음부터는 삽질하고있네요 ㅠㅠ
도움좀 부탁드려요 ㅠ
주소는 인터넷 검색해 보시면 많이 나오는것 같습니다. 나스당 검색해봐도 나오고요.. 다만 직접 주소는 아니고 모두 따는 방법이구요. 좀더 연구해 주세요. 직접 언급은 어렵습니다...
#CLiOS
저는 그냥 plex로 해결 해서 봅니다..
저는 nas에서 plex 트랜스코딩이 불가능 해서요 ㅜㅜ
#CLiOS
from CV
2-3초 로딩 있는거 같습니다. 경우에 따라 max 5초 걸리는 경우도 있구요.. 저는 목적이 데이터 절감이라 만족하고 있습니다 ^^
#CLiOS
입력하고나면
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"/etc/sudoer" [New File]
이렇게만 나와서요...ㅠㅠ
*** 본문에 s가 하나 빠졌네요.
/etc/sudoers 파일입니다.
쉘스크립트로 파일 하나로 통합하는 방법도 될거 같기는 한데, 거기까진 안해봤네요...
pipe:///volume1/nas/aaaa.sh 를 muxes 로 등록하게 되는데요.
ssh 에서 만드신 /volume1/nas/aaaa.sh 를 직접 실행했을때 오류 없이
글자들이 주르르륵~~~ 나와야 합니다.
글자 주르르륵 나오는게 스트리밍 되는 데이터 들이구요. ctrl+c 로 중지 하면 됩니다.
주르륵 안나오면 에러 메세지가 나올텐데요... 그 메세지 보시고 뭐가 문제인지 찾아야 합니다.
실행했는데 바로 패스워드 물어보면 글내용중에 sudoer 부분 확인해 보시구요.
좀 있다가 auth 관련 에러나면 글 내용중에 * 계정을 확인해 주세요.
scan result부분에 fail에서 걸렸습니다.
마지막에 달아주신 댓글 보면 aaaa.sh 실행하면 오류 없이 글자들이 주르르륵~~ 나옵니다. (root로 로그인시)
그래서 다른 계정으로 접속해서 aaaa.sh 실행하면 패스워드를 물어 오네요;;;;
말씀 하신것 처럼 sudoers 부분에
tvheadend-testing ALL=NOPASSWD:/var/packages/VideoStation/target/bin/ffmpeg
을 추가하고 재부팅을 해도
다른계정에서 aaaa.sh실행 시켜도 비밀번호 물어 보고
scan result가 fail이 뜨는데 뭐가 문제일까요ㅗ??
참고로 tvheadend-testing으로 설치 하였습니다 .ㅠ.ㅠ
일단 저 부분을 설명 드리면
/var/packages/VideoStation/target/bin/ffmpeg 명령어를 sudo 로 실행할때 tvheadend-testing 계정에서 비밀번호를 묻지 않고 실행하라는 것입니다.
때문에 tvheadend-testing 계정이 아닌 다른 계정에서 실행하면 당연히 비밀번호를 물어보게 됩니다.
사용하시는 계정명을 앞에 넣어서 TEST 해보실수 있을듯 합니다.
사용계정명 ALL=NOPASSWD:/var/packages/VideoStation/target/bin/ffmpeg
설정 후 aaaa.sh 실행
-vcodec h264_smd 옵션이 214play 모델에 있는 하드웨어 엔진 사용하는거라 헤놀에서는 안될겁니다.
다만 지포스 vga가 있으신경우 ffmpeg 를 지포스 nvenc 가속을 지원하게 설치하여 h264_nvenc 코덱을 사용하시거나
인텔CPU 내장그래픽의 QSV 가속을 이용할수는 있을겁니다.
ffmpeg 가 해당 하드웨어 가속을 이용가능하게 해야 사용 가능하구요.
https://trac.ffmpeg.org/wiki/HWAccelIntro 를 참고하시면 될듯합니다.
먼저 좋은정보 정말 감사합니다 ㅠㅠ
배워도 배워도 정말 끝이 없군요;;;
저는 현재 216+ii 모델을 사용하고 있는데요.
알려주신 데로 조치하고 나서 scan result부분에 fail되고,
putty에서 aaaa.sh 실행하면
Error splitting the argument list: Option not found
이라고 나오는데요 ㅠ
혹시 뭐가 문제지 알 수 있을까요? ㅠ
헤놀6.0임니다 ㅜㅜ
그런데 tvheadend에서 muxes에서 등록이 안되네요..ㅠ pipe:///volume1/docker/tvh/config/test/test.sh
이런식으로 넣었는데도 안되고..
도커버젼이라 그런가 해서 pipe:///config/test.test.sh 이런식으로 넣어줘도 안되네요..
뭐가 문제일까요..흠..