U5PVR Torrent 앱 설정방법 (1) - tTorrent

Android Mini PC 2018.01.07 22:03 Posted by 뮤리찌



U5PVR Torrent 앱 설정방법 (1) - tTorrent

 

안녕하십니까 ?  EddyLab입니다.


안드로이드 셋탑을 쓰시면서 컨텐츠 입수관련을 다른 PC에서 받아서 시청하시는 경우가 있습니다.  이 경우 PC를 계속 켜 놓아야 한다는 부담감이 있습니다.

PC의 경우는 소비전력이 높기 때문에, 가정에서 전기 소비량도 증가하게 됩니다.

PC보다는 다운로드 속도가 느리지만,
항시 On 상태에서 소비전력이 낮은 안드로이드셋탑은 상대적으로 유리합니다.


U5PVR은 기본적으로 방송녹화 기능을 사용하시면서
토랜트 서버 기능으로 사용하시면 더욱 효과적일 수 있습니다.


하기 내용은 컨텐츠 라이프 사이클 프로세스 입니다.
U5PVR은 하기와 같은 기능을 모두 수행할 수 있도록 만들어져 있습니다.


영화나 TV재생 및 녹화 기능은 1/3정도의 기능이고,
그밖의 미디어NAS기능을 구현할 수 있도록 만들어져 있습니다.

시놀로지 NAS (DS218Play급) + 4K Blu-ray Navigation 미디어플레이어 라고 이해하시면 될 것 같습니다. 



U5PVR에서는 2가지 방법으로 torrent 서버 기능을 사용 하실 수 있습니다.

A. U5PVR 리눅스기반의 트랜스미션 서버

1) U5PVR 리눅스 첫단추 : 토렌트(torrent)서버 설정 및 사용방법 (1)
http://cafe.naver.com/mk802/23361

2) U5PVR 사용자 초심레벨 서포터 지원 (1) 17년7월 3주차 - 기초 리눅스 접근방법(SSH)과 Torrent & FTP
http://cafe.naver.com/mk802/22070

B. U5PVR 토렌트 안드로이드 앱 서버 



이전에 U5PVR 리눅스기반의 트랜스미션 설정 관련 내용을 올려드렸습니다만,
리눅스 접근에 어려움을 겪으신 분들께서는 아직 사용에 어려움이 있으신 것 같습니다.   

그래서, 오늘은  이전에 한번 소개드린 tTorrent 앱 활용을 중심으로 설명을 드리고자 합니다.


(1) tTorrent 앱 설정 및 활용

(2) Transdroid 앱 설정 및 활용

2가지 내용으로 설명을 드리게 됩니다.

여기서 "
Transdroid 앱"은 스마트폰을 이용하여,
손쉽게 토렌트 시드를 올릴 수 있는 방법이므로, 꼭 활용하시기 바랍니다.


토렌트는 CPU의 속도와 네트워크 속도, 그리고 다운로도 저장소 읽기 쓰기 속도가 빠르면 빠를 수록 다운로드 속도는 증가하게 됩니다.

U5PVR의 CPU는 인텔 컴퓨터 CPU에 비해서 그리 빠르지 않습니다.
네트워크 속도는 해외망을 많이 이용하는 컨텐츠인지, 국내망을 많이 이용하는지에 따라서 달라지겠고, 다운로드 저장소의 읽기 쓰기가 빠른 SSD를 쓰면 빠르게 됩니다.  

그러므로, U5PVR에서 고속 토렌트 다운로드를 기대하시기는 어렵습니다. ^^
U5PVR는 저 소비전력기기이므로, 장시간 다운로드를 받으셔도 부담없이 활용 하실 수 있습니다.


빠른 다운로드를 위해서는 U5PVR에서 LAN연결은 필수입니다. ^^
가급적 무선은 꺼 주시고 사용하시기 바랍니다. 

대략 다운로드 속도는 8~10M정도로 예상하시면 되겠습니다.



간단설명 

1. tTorrent 
앱(no ads)을 설치 해 봅니다.


tTorrent (no ads)-1.5.12.apk


2. 설정 >> 디렉토리 >> "토렌트 파일이 다운로드 되는 디렉토리" 설정


3. 외장 USB메모리를 다운로드 경로로 설정 "mnt/media_rw/sda1/torrent"

** NAS의 경우, "mnt/smb/mountpoint_01/torrent"


4. 설정 >> 웹 인터페이스 >> 웹 인터페이스 ==> ON

포트 주소 "http://192.168.x.x:1080 (메모필수)


5. 설정 >> 웹 인터페이스 >> Transdroid 지원 >> 

- SSL 사용 ==> ON

인증 ==> ON

사용자명(ID) 입력

비밀번호 입력


6. 설정 >> 전원관리 ==> 필요로 되는 설정을 선택 하여 활성화 



==================


이제 안드로이드 앱을 U5PVR 앱을 설치합니다.



소개드리는 앱은 tTorrent앱입니다.
하기 앱은 tTorrent Lite앱입니다.  




tTorrent Lite




그러나 앱에 광고가 있기 때문에, 광고가 보이지 않는 앱을 설치 해 봅니다.


tTorrent (no ads)-1.5.12.apk



이 앱은 리모콘으로 콘트롤이 불가능 하므로,

유무선 마우스 키보드를 반드시 활용하셔야 합니다.



앱을 설치를 하면, 하기와 같이 심플한 UI를 보실 수 있습니다.




왼쪽의 햄버거바(세줄 아이콘)을 누르면, 여러가지 메뉴를 보실 수 있습니다. 

먼저 설정을 선택합니다.



설정 >> 디렉토리 



설정 >> 디렉토리 >> "토렌트 파일이 다운로드 되는 디렉토리" 설정을 변경합니다.




"토렌트 파일이 다운로드 되는 디렉토리" 화면에서 경로 목록을 선택합니다.



"토렌트 파일이 다운로드 되는 디렉토리"에서 여러가지 경로가 보여질 수도 있고,

아닌 경우도 있을 수 있습니다.


제 경우에는 슬림에 외장 USB메모리를 꼽아 놓고 사용하고 있고,

이 USB메모리는 sda1으로 설정 되어져 있습니다.


외장 USB메모리를 다운로드 경로로 설정하겠습니다.

"mnt/media_rw/sda1"을 선택합니다.



"mnt/media_rw/sda1" 안에 있는 폴더 목록이 보여집니다.



"mnt/media_rw/sda1"에서 torrent폴더를 다운로드 폴더로 "선택"하였습니다.







"토렌트 파일이 다운로드 되는 디렉토리" 아래의 경로를 최종 확인합니다.


하기 경로는 U5PVR에 연결되어 있는 HDD 경로입니다.

"mnt/media_rw/sda1/torrent"

만일 네트워크에 있는 NAS에 연결하면

"mnt/smb/mountpoint_01/torrent" 과 같은 형식의 경로로 만들어집니다.



설정 >> 웹 인터페이스



설정 >> 웹 인터페이스 >> 웹 인터페이스 ==> ON

이 기능은 댁내 PC의 웹브라우저에서 tTorrent를 원격콘트롤 하기 위한 기능입니다. 



PC의 웹브라우저에서 tTorrent를 원격콘트롤를 하기 위해서는

포트 주소 "http://192.168.x.x:1080 으로 접속하시면 됩니다.


설정 >> 웹 인터페이스 >> Transdroid 지원




설정 >> 웹 인터페이스 >> Transdroid 지원 >> SSL 사용 ==> ON




설정 >> 웹 인터페이스 >> Transdroid 지원 >> 인증 ==> ON



설정 >> 웹 인터페이스 >> Transdroid 지원 >> 사용자명(ID) 입력





설정 >> 웹 인터페이스 >> Transdroid 지원 >> 비밀번호 입력






설정 >> 전원관리



설정 >> 전원관리

필요로 되는 설정을 선택 하여 활성화 하시기 바랍니다.






토렌트 다운로드를 위해서 U5PVR의 크롬웹브라우저에서

토렌트 시드를 다운로드 받습니다. 



하기의 마그넷은 지원이 되지 않고 있네요




이제 U5PVR에 다운로드 받은 토랜트 시드를 이용하여 다운로드를 실행하여 보겠습니다.
왼쪽의 햄버거바(세줄 아이콘) >> 파일탐색기를 이용하여,

다운로드 받은 경로로 들어갑니다.




다운로드 받은 토랜트 시드를 마우스로 선택을 하여 누르면,



하기와 같이 토렌트 추가 메뉴가 나타납니다.

체크 하실 내용은 "저장 위치:"가 맞는지 확인을 하시기 바랍니다. 

하단의 "다운로드"를 선택하시면 실행됩니다.










다른 방법으로 X-plore 앱을 이용하는 방법입니다.




다운로드 받은 토렌트 시드가 있는 폴더를 엽니다.



원하시는 토렌트 시드를 누르면 실행이 됩니다.



토렌트 시드의 연결 앱을 선택하게 되는데,

tTorrent앱을 선택합니다.



토렌트 추가 메뉴는 동일하게 보여집니다.






위의 방법으로 마우스로 콘트롤 하시려면, 여러가지로 불편한 점이 많습니다.


그래서, 스마트폰앱으로 콘트롤 하는 방법을 활용하게 됩니다.


(2) Transdroid 앱 설정 및 활용



스마트폰 앱 Transdroid를 이용하시게 되면,

원하시는 토렌트 사이트에서 마그넷으로 다운로드를 실시하면,

U5PVR에서 자동으로 다운로드가 실시되게 됩니다.


물론 스마트폰과 U5PVR의 서버설정관련 내용이 꼭 필요로 되게 됩니다.


그러나, 한번 해 보시면 더 이상 편리한 방법은 없다고 생각하시게 될 것입니다. ^^





향후에는 

- 다운로드 받은 영상파일명 자동변환, 

- 자막 SRT 자동 변환, 

- 지정폴더로 자동 이동, 

- TV 썸네일, 영화 포스터 자동 생성 

- 영상 줄거리 자동 업데이트 

- 라이브러리 자동 업데이트


등의 자동화 방법론도 있습니다.


관련으로 많은 개발자 분들이 개발 중에 있습니다만, 

아직 체계적으로 정리되어 있지는 않고, 

관련 많은 프로그램들의 복잡한 설정등이 필요로 됩니다.


그러나, 개발자 분들의 노력으로 점차 사용하기 쉬운 방법론등이 나오고 있으므로,

이후에 천천히 소개를 해 드리도록 하겠습니다.


감사합니다.




EddyLab Naver 쇼핑몰 : 

http://smartstore.naver.com/eddylab







자세한 사항은 "EddyLab - UHD 미니PC포럼"에서 자료를 참조 하시기 바랍니다.

http://www.eddylab.co.kr  /  http://cafe.naver.com/mk802






U5PVR 노래방 환경 구축 (1) - 블루투스 마이크 음질 문제로 실패 (작성중)

 

안녕하십니까 ?  EddyLab입니다.

U5PVR로 여러가지 응용 방법을 많이 찾아보고 있습니다.
이전에는 주로 해피칙관련 게임 내용을 주로 이야기 드렸습니다.




금번에는 가족과 같이 노래방을 열 수 있는 방법을 찾아 보겠습니다.


최근에 스마트폰과 블루투스 노래방 마이크를 연결하여 

노래방 역활을 해 주는 마이크가 인기를 끌고 있네요 ^^


가족단위로 즐길 수 있는 것이라서 괜찮은 것 같습니다.



간단 정리 내용)


1. 나홀로 노래방 앱을 U5PVR에 설치 하였습니다만, 유튜부 앱 연결 문제가 있어서 사용이 불가능하네요...   일단 스마트폰에 설치를 해서 최신 노래방 목록으로 참조 하시기 바랍니다.


2. U5PVR 유투브에 들어가셔서, 음성마이크 인식으로 명령을 합니다.


가수 + 노래곡명 + 노래방 이라고 음성 명령을 합니다.


즉, "임창정의 소주한잔 노래방" 또는 " 윤정신의 좋니 노래방"으로 음성명령을 합니다.


그러면 유투브에 있는 노래방(MR + 가사) 목록이 보여집니다.

이 중 선택하셔서 재생을 하시면 됩니다.


가수나 노래제목을 모르시면, 위의 1번 나홀로 노래방 앱을 노래방책 처럼 생각하시고 찾으시면 됩니다. ^^


3. 이제는 노래방 블루투스 마이크가 필요하겠지요 ?


노래방 블루투스 마이크는 U5PVR에서 나오는 오디오 출력을 받아서 스피커로 들려 줍니다.

그리고 내가 부르는 목소리를 믹싱해서 오디오 출력을 해 주게 됩니다..


간단하지요 ? ^^


제가 가지고 있던 오래된 노래방 BT마이크는 BT페어링은 되었지만,

음질이 끊겨서 사용 불가 이네요...



국내에서 저렴한 녀석을 하나 추가 구입해서 test를 해 보도록 하겠습니다..



이후 괜찮으면 중국에서 구입할 수 있는지도 알아 보고요 ㅎㅎㅎ




구정때에 가족모임에서 사용하시면 좋을 것 같습니다.



======================== 


 



Cover art


나홀로 노래방(쉽게 찾아 무료로 이용하는 노래방, 노래방책 즐겨찾기 지원, 가라오케)

https://play.google.com/store/apps/details?id=com.pump.noraebang&hl=ko
























































오디오 포커스 이해 (1 부 / 3 부)

일반적인 오디오 포커스 사용 사례

Android 휴대 전화의 많은 앱이 동시에 오디오를 재생할 수 있습니다. 안드로이드 운영 체제는 모든 오디오 스트림을 함께 믹싱하는 반면, 여러 애플 리케이션이 동시에 오디오를 재생할 때 사용자에게 매우 혼란을 줄 수 있습니다. 이로 인해 사용자는 휴대 전화에서 불만족스러워집니다. 좋은 UX를 제공하기 위해 안드로이드가 제공하는 API 응용 프로그램을 공유 할 수 있습니다 오디오 포커스를 하나의 응용 프로그램은 한 번에 오디오 초점을 저장할 수있는 곳을.

이 기사 시리즈의 목적은 오디오 포커스가 무엇인지, 좋은 미디어 UX를 제공하는 것이 중요한 이유 및 사용 방법을 심층적으로 이해하는 것입니다. 이것은 다음 세 가지 시리즈의 첫 번째 부분입니다.

  1. 훌륭한 미디어 시민이되는 것의 중요성과 가장 일반적인 Audio Focus 사용 사례 ( 이 기사 )
  2. Audio Focus가 미디어 앱의 UX에 중요한 다른 사용 사례
  3. 앱에서 Audio Focus를 구현하는 세 단계

오디오 포커스는 협업적이고 앱에 의존하여 오디오 포커스 가이드 라인을 준수합니다. 시스템은 규칙을 시행하지 않습니다. 앱이 오디오 포커스를 잃은 후에도 계속 큰 소리로 재생하고 싶다면 아무 것도이를 방지 할 수 없습니다. 그러나 사용자가 휴대 전화에서 사용하기에 좋지 않은 환경에 빠지게되고 이러한 방식으로 오작동하는 앱을 제거 할 수있는 좋은 기회가 생깁니다.

다음은 오디오 포커스가 작용하는 몇 가지 시나리오입니다. 사용자가 앱을 실행하고 오디오를 재생한다고 가정합니다.

앱에서 오디오를 출력해야하는 경우 오디오 포커스를 요청해야합니다. 포커스가 부여 된 후에 만 ​​사운드가 재생되어야합니다.

사용 사례 1 - 앱에서 오디오를 재생하는 동안 사용자가 다른 미디어 플레이어 앱을 시작하고 해당 앱에서 재생을 시작합니다.

앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?

다른 미디어 앱이 오디오 재생을 시작하면 오디오를 재생하는 앱과 겹칩니다. 사용자가 어느 앱에서든 오디오를 제대로들을 수 없기 때문에 결과적으로 UX가 좋지 않습니다.

오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?

다른 미디어 앱이 재생을 시작하면 영구적 인 오디오 포커스를 요청합니다. 시스템에서 승인하면 재생이 시작됩니다. 사용자가 오디오를 다른 미디어 앱에서만들을 수 있도록 재생을 중지하여 앱에서 영구적 인 오디오 포커스 손실에 응답해야합니다.

이제 사용자가 앱에서 재생을 시작하면 앱에서 영구적 인 오디오 포커스를 다시 요청합니다. 앱이 오디오 재생을 시작하면이 포커스가 부여됩니다. 다른 앱은 재생을 중지하여 영구적 인 오디오 포커스 손실에 응답해야합니다.

사용 사례 2 - 앱이 오디오를 재생하는 동안 수신 전화가 도착합니다.

앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?

휴대 전화가 울리기 시작하면 사용자는 벨소리 장치 외에도 앱의 오디오를 듣게됩니다. 이는 좋은 UX가 아닙니다. 통화 거부를 선택하면 오디오가 계속 재생됩니다. 통화를 수락하기로 선택하면 오디오가 전화기 오디오와 함께 재생됩니다. 호출이 끝나면 앱이 자동으로 재생을 재개하지 않으며 이는 좋은 UX가 아닙니다.

오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?

전화벨이 울리면 (사용자가 아직 응답하지 않은 경우) 앱은 오리 옵션 (전화 앱에서 요청하기 때문에)과 일시적인 오디오 포커스 손실에 응답해야합니다. 볼륨을 약 20 % ( 더킹 이라고 함 )로 줄이거 나 재생을 모두 일시 중지 하여 응답해야 합니다 (Podcast 또는 다른 음성 단어 유형의 앱인 경우).

  • 사용자가 통화를 거절하면 앱에서 볼륨을 복원하거나 재생을 다시 시작하여 오디오 포커스의 이득에 반응해야합니다.
  • 사용자가 전화를 수락하면 시스템에서 오디오 포커스 손실을 보냅니다 ( 오리 옵션 없음 ). 앱에서 응답으로 재생을 일시 중지해야합니다. 통화가 끝나면 앱은 최대 볼륨으로 오디오 재생을 다시 시작하여 오디오 포커스를 얻을 수 있습니다.

개요

앱에서 오디오를 출력해야하는 경우 오디오 포커스를 요청해야합니다. 포커스가 부여 된 후에 만 ​​사운드가 재생되어야합니다. 그러나 오디오 포커스를 얻은 후에는 앱에서 오디오 재생을 완료해야 오디오 포커스를 유지할 수 있습니다. 다른 앱에서 오디오 포커스를 유지하기 위해 포커스를 요청할 수 있습니다. 이 경우 앱에서 재생을 일시 중지하거나 볼륨을 낮추어 사용자가 새로운 오디오 소스를 더 쉽게들을 수있게해야합니다.

앱에서 오디오 포커스가 작용하는 다른 사용 사례에 대해 자세히 알아 보려면 이 연재 의 두 번째 기사를 읽어보세요 .

앱에서 오디오 포커스를 구현하는 방법에 대해 자세히 알아 보려면 이 연재 의 마지막 기사를 읽으십시오 .

Android 미디어 리소스



https://medium.com/google-developers/audio-focus-1-6b32689e4380



오디오 포커스 이해 (2/3 부)

기타 오디오 포커스 사용 사례

이 기사 시리즈의 목적은 오디오 포커스가 무엇인지, 좋은 미디어 UX를 제공하는 것이 중요한 이유 및 사용 방법에 대해 깊이있게 이해하는 것입니다. 이 시리즈의 두 번째 파트는 다음과 같습니다.

  1. 훌륭한 미디어 시민이되는 것의 중요성과 가장 일반적인 Audio Focus 사용 사례
  2. Audio Focus가 미디어 앱의 UX ( 이 기사 ) 에서 중요한 다른 사용 사례
  3. 앱에서 Audio Focus를 구현하는 세 단계

이 시리즈의 첫 번째 기사에서는 미디어 앱의 UX에 오디오 포커스가 중요한 경우에 발생할 수있는 가장 일반적인 사용 사례 두 가지를 다루었습니다. 이 기사에서는 오디오 앱의 동작을 세부적으로 조정할 수 있도록 앱에서 요청할 수있는 오디오 포커스 유형에 대한 개념을 소개합니다.

사용 사례 1 - 다른 앱이 오디오를 재생하는 동안 백그라운드에서 실행되는 탐색 앱이 단계별 안내를 제공합니다.

앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?

네비게이션 방향과 음악이 겹쳐서 사용자에게 혼란을줍니다.

오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?

내비게이션 앱이 다음 방향을 말할 때 앱이 일시적인 오디오 포커스 손실 (덕킹 앱에 의해 요청되기 때문에)에 응답해야합니다.

이 일시적인 오디오 포커스 손실에 응답하기 위해 앱을 오리 (또는 볼륨을 약 20 %로 낮추어야 함)해야합니다. 앱에서 오디오 북, Podcast 또는 음성 단어를 재생하는 경우는 예외입니다.이 경우 재생을 일시 중지해야합니다.

길 찾기가 끝나면 내비게이션 앱이 오디오 포커스를 포기하고 앱에서 다시 얻게됩니다. 또한이 포커스 획득에 대한 응답으로 볼륨을 원래 수준으로 복원해야합니다.

사용 사례 2 - 사용자가 전화 통화 도중 게임을 실행합니다 (오디오를 재생 함).

앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?

사용자는 음악과 전화 대화가 겹쳐서 좋지 않은 경험을하게됩니다.

오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?

Android O에는 지연된 오디오 포커스 게인 이라는 오디오 포커스 기능이 있습니다.이 기능 은 바로 그런 시나리오를 위해 만들어졌습니다. 예를 들어, 사용자가 전화 통화 중 시작하고, 오디오를 듣지 않고 계속 놀고 싶어하는 게임이 있지만 통화가 끝나면 게임에서 오디오를 듣고 싶습니다.

앱이 이것을 지원하고 사용자가 전화 통화 중 (일시적인 오디오 포커스를 획득 한 상태)에 오디오를 재생하려고하면 다음 두 가지 일이 발생합니다.

  1. 앱에서 영구적 인 오디오 포커스를 요청하면 고정되어있어 포커스 부여가 거부됩니다. 휴대 전화 앱은 이미 일시적인 오디오 포커스를 획득했습니다. 앱이 재생을 시작하면 안됩니다 (실제로는 나중에 오디오 포커스가 부여됩니다). 그러나 앱이 게임 인 경우 오디오없이 계속 작동 할 수 있습니다.
  2. 통화가 끝나면 앱에 오디오 포커스 게인 이 부여됩니다 이 보조금은 초기 요청이 이루어진 후 (사용자가 전화 통화를하는 동안) 일정 기간 지연됩니다. 과도기적 손실 후에 오디오 포커스를 얻은 후에도 같은 방식으로 처리 할 수 ​​있습니다. 이 경우 오디오 재생이 시작됩니다.

Oreo 이전의 Android 버전은 지연된 오디오 포커스 게인을 지원하지 않습니다 이 버전에서 사용자가 전화 통화 중에 오디오 재생을 시작하려고하면 오디오 포커스 요청이 허용되지 않고 전화가 끊긴 후에도 재생이 시작되지 않습니다.

사례 3 - 탐색 앱 또는 오디오 알림 또는 알림을 생성하는 앱

짧은 기간 동안 오디오를 버스트로 생성하는 앱을 제작하는 경우 좋은 UX를 사용자에게 제공하기 위해서는 오디오 포커스가 매우 중요합니다. 이를 수행하는 앱의 예로 알림 소리 또는 미리 알림 소리가 생성됩니다. 또는 백그라운드에서 방향을 전환하여 음성 회선을 생성하는 앱.

앱이 백그라운드에서 실행 중이며 오디오를 생성하려고한다고 가정 해 보겠습니다. 사용자가 음악이나 Podcast를 듣고 있으며 앱에서 짧은 시간 동안 오디오를 생성합니다.

앱에서 오디오를 생성하기 전에 일시적인 오디오 포커스 (오리 옵션 포함)를 요청해야합니다. 오디오를 재생할 때만 포커스가 부여되었을 때만. 그리고 잘 작동하는 음악 앱은 오디오 포커스와 오리의 일시적인 손실을 존중해야합니다. 다른 앱이 팟 캐스트 앱인 경우 재생을 다시 시작하기 위해 오디오 포커스가 회복 될 때까지 일시 중지하는 것이 좋습니다. 오디오 포커스를 요청하지 않으면 사용자는 자신의 음악이나 Podcast 및 앱의 오디오를 동시에 듣게됩니다.

유스 케이스 4 - 음성 녹음기 앱 또는 음성 인식 앱

시스템 또는 다른 앱이 소리 (알림 또는 기타 미디어 재생)를하지 않아야하는 일정 기간 동안 오디오를 녹음해야하는 앱을 제작하는 경우 좋은 UX를 제공하려면 오디오 포커스를 처리하는 것이 중요합니다. 이를 수행하는 앱의 예로는 음성 메모 녹음 앱 또는 음성 인식 앱이 있습니다.

앱에서 일시적이고 독점적 인 오디오 포커스를 요청해야합니다. 시스템에서이 권한을 부여한 경우 시스템에서 생성 된 다른 소리가 녹음을 오염시키지 않는다는 것을 알면서 오디오 녹음을 시작할 수 있습니다. 이 녹음 기간 동안 다른 앱이 오디오 포커스를 요청하면 거부 될 것입니다. 사용자가 녹음을 마쳤 으면 시스템에서 소리를 정상적으로 재생할 수 있도록 오디오 포커스를 포기해야합니다.

개요

앱에서 오디오를 출력해야하는 경우 오디오 포커스를 요청해야하며 요청할 수있는 다양한 유형의 포커스가 있어야합니다.

포커스가 부여 된 후에 만 ​​사운드가 재생되어야합니다. 그러나 오디오 포커스를 얻은 후에는 앱에서 오디오 재생을 완료해야 오디오 포커스를 유지할 수 있습니다.

다른 앱에서 오디오 포커스를 유지하기 위해 포커스를 요청할 수 있습니다. 이 경우 앱에서 재생을 일시 중지하거나 볼륨을 낮추어 (더킹) 사용자가 새로운 오디오 소스를 더 쉽게들을 수있게해야합니다.

Android O에서 앱이 요청할 때 오디오 포커스를 얻을 수없는 경우 시스템에서 앱을 사용할 수있게되면 (지연된 포커스) 앱에 제공 할 수 있습니다.

앱에서 오디오 포커스를 구현하는 방법에 대해 자세히 알아 보려면 이 연재 의 마지막 기사를 읽으십시오 .

https://medium.com/google-developers/audio-focus-2-42244043863a


오디오 포커스 이해 (3/3 부)

앱에서 Audio Focus를 구현하는 3 단계

이 기사 시리즈의 목적은 오디오 포커스가 무엇인지, 좋은 미디어 UX를 제공하는 것이 중요한 이유 및 사용 방법에 대해 깊이있게 이해하는 것입니다. 이 시리즈의 마지막 부분은 다음과 같습니다.

  1. 훌륭한 미디어 시민이되는 것의 중요성과 가장 일반적인 Audio Focus 사용 사례
  2. Audio Focus가 미디어 앱의 UX에 중요한 다른 사용 사례
  3. 앱에서 Audio Focus를 구현하는 세 단계 ( 이 기사 )

오디오 포커스를 올바르게 처리하지 못하면 다음 다이어그램은 사용자가 전화기에서 겪을 수있는 영향을 보여줍니다.

이제 사용자가 휴대 전화에서 좋은 미디어 경험을 얻으려면 좋은 미디어 시민이되는 앱의 중요성을 알게되었으므로 앱에서 오디오 포커스를 올바르게 처리 할 수있는 단계를 수행해 보겠습니다.

코드로 들어가기 전에 다음 다이어그램은 앱에서 오디오 포커스를 구현하기 위해 수행 할 단계를 요약 한 것입니다.

1 단계 : 포커스 요청하기

오디오 포커스를 얻는 첫 번째 단계는 안드로이드 시스템이 그것을 얻기 위해 요청하는 것입니다. 요청을했기 때문에 그것이 부여된다는 것을 의미하지는 않습니다. 오디오 포커스를 얻으려는 요청을하려면 시스템에 "의도"를 선언해야합니다. 여기 몇 가지 예가 있어요.

  • 앱이 사용자가 앱에서 오디오를 재생하도록 선택하는 한 오디오 포커스를 무기한 일정으로 유지할 미디어 플레이어 또는 Podcast 플레이어입니까?  This is AUDIOFOCUS_GAIN.
  • 또는 오디오 알림 또는 음성 방향 전환으로 재생해야하거나 짧은 시간 동안 사용자의 오디오를 녹음해야하기 때문에 일시적으로 오디오 포커스 (오리 옵션 포함)가 필요합니까? 
  • This is AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK.
  • 통화가 연결되면 휴대 전화 앱처럼 일시적으로 오디오 포커스가 필요합니까 (그러나 알 수없는 지속 시간, 오리 옵션 없음)?  
  • This is AUDIOFOCUS_GAIN_TRANSIENT.
  • 음성 메모 앱과 같은 오디오를 녹음해야하기 때문에 일시적으로 오디오 포커스가 필요합니까 (다른 소리는 생성되지 않는 알 수없는 기간 동안)?  This is AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE.

Android O 이상에서는 AudioFocusRequest객체 를 만들어야 합니다 (a 사용 builder). 그리고이 객체에서 앱이 오디오 포커스를 획득하는 데 필요한 기간을 지정해야합니다. 다음 코드 스 니펫은 시스템에서 오디오 포커스를 영구적으로 획득 할 의사를 선언합니다.

AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
AudioAttributes mAudioAttributes =
new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
AudioFocusRequest mAudioFocusRequest =
new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(mAudioAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(...) // Need to implement listener
.build();
int focusRequest = mAudioManager.requestAudioFocus(mAudioFocusRequest);
switch (focusRequest) {
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
// don’t start playback
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
// actually start playback
}

코드에 대한 참고 사항 :

  1. AudioManager.AUDIOFOCUS_GAIN시스템에서 영원한 오디오 포커스를 요청 하는 것이 무엇입니까. 당신은 또한 같은 다른 INT 값을, 그것을 전달할 수 있습니다 AUDIOFOCUS_GAIN_TRANSIENT, 또는 AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK당신은 단지 일시적인 오디오 사용을 원하는 경우.
  2. 메소드에 AudioManager.OnAudioFocusChangeListener구현 을 전달해야합니다 setOnAudioFocusChangeListener()이것은 시스템에서 발생하는 이벤트에 의해 구동되는 오디오 포커스 변경 사항을 처리 할 코드 부분입니다. 다른 앱의 사용자 상호 작용에서 시작될 수 있습니다. 예를 들어, 앱이 영구적 인 오디오 포커스를 얻었지만 사용자가 다른 앱을 실행하면 앱이 사라집니다. 이 수신기는 앱이이 초점 손실을 처리해야하는 곳입니다.
  3. 일단 AudioFocusRequest객체를 만들었 으면 객체 AudioManager를 호출하여 오디오 포커스 를 요청할 수 있습니다 requestAudioFocus(…)이렇게하면 오디오 포커스 요청의 허용 여부를 나타내는 정수 값이 반환됩니다. 해당 값이있는 경우에만 AUDIOFOCUS_REQUEST_GRANTED즉시 재생을 시작해야합니다. 그리고 만약 AUDIOFOCUS_REQUEST_FAILED그렇다면, 시스템은 그 순간에 오디오 포커스의 앱 획득을 거부했습니다.

Android N 및 이전 버전 AudioFocusRequest에서는 아래와 같이 객체를 사용하지 않고이 의도를 선언 할 수 있습니다. 여전히 구현해야합니다 AudioManager.OnAudioFocusChangeListener위의 스 니펫과 동일한 코드가 있습니다.

AudioManager mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
int focusRequest = mAudioManager.requestAudioFocus(
..., // Need to implement listener
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
switch (focusRequest) {
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
// don't start playback
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
// actually start playback
}

다음으로 우리는 AudioManager.OnAudioFocusChangeListener앱이 오디오 포커스 게인과 손실의 변화에 ​​반응 할 수 있도록 구현해야합니다 .

2 단계 : 오디오 포커스 상태 변경에 응답

앱에 오디오 포커스가 부여되면 (일시적이든 영구적이든) 언제든지 변경 될 수 있습니다. 그리고 앱은이 변화에 반응해야합니다. 이것이 OnAudioFocusChangeListener구현 에서 일어나는 일입니다 .

다음 코드 스 니펫에는 오디오를 재생하는 앱에 대한이 인터페이스의 구현이 포함되어 있습니다. 또한 일시적인 오디오 포커스 손실을 방지하기 위해 더킹을 처리합니다. 또한 사용자가 재생을 일시 중지하여 오디오 포커스 변경을 처리합니다. 다른 애플리케이션 ( 예 : Google Assistant )이 일시적인 오디오 포커스 손실을 유발합니다.

private final class AudioFocusHelper
implements AudioManager.OnAudioFocusChangeListener {
private void abandonAudioFocus() {
mAudioManager.abandonAudioFocus(this);
}
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (mPlayOnAudioFocus && !isPlaying()) {
play();
} else if (isPlaying()) {
setVolume(MEDIA_VOLUME_DEFAULT);
}
mPlayOnAudioFocus = false;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
setVolume(MEDIA_VOLUME_DUCK);
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (isPlaying()) {
mPlayOnAudioFocus = true;
pause();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
mAudioManager.abandonAudioFocus(this);
mPlayOnAudioFocus = false;
stop();
break;
}
}
}

다른 앱이 일시적인 오디오 포커스를 요청하고 재생이 일시 중지되는 대신 (일시 중지하는 대신) 사용자가 재생 일시 중지를 시작하면 앱이 다르게 작동해야합니다. 사용자가 재생 일시 중지를 시작하면 앱에서 오디오 포커스를 포기해야합니다. 그러나 일시적인 오디오 포커스 손실에 대한 응답으로 앱이 일시 중지 된 경우 오디오 포커스를 포기해서는 안됩니다. 이것을 설명하기위한 몇 가지 유스 케이스가 있습니다.

백그라운드에서 오디오를 재생하는 오디오 재생 앱이 있다고 가정 해 보겠습니다.

  1. 사용자가 재생을 누르면 앱에서 영구적 인 오디오 포커스를 요구합니다. 시스템에서 오디오 포커스를 부여 받았다고 가정 해 봅시다.
  2. 이제는 홈 버튼을 길게 누르면 Google 길잡이가 시작됩니다. Assistant는 일시적인 오디오 포커스를 요청합니다.
  3. 시스템이 지원이 부여되면, 당신의 OnAudioFocusChangeListener얻을 것이다 AUDIOFOCUS_LOSS_TRANSIENT이벤트를. Assistant에서는 오디오를 녹음해야하므로 여기에서 재생을 일시 중지합니다.
  4. 길잡이가 완료되면, 그것의 오디오 사용을 포기합니다, 당신의 응용 프로그램은 부여됩니다 AUDIOFOCUS_GAIN에 OnAudioFocusChangeListener여기서 재생을 재개할지 여부를 결정해야합니다. 그리고 mPlayOnAudioFocus위의 코드 스 니펫에서 플래그가 수행하는 작업입니다.

다음 코드 스 니펫은 사용자가 시작한 일시 중지 방법이이 오디오 플레이어 앱에서와 같이 보일 수 있습니다.

public final void pause() {
if (!mPlayOnAudioFocus) {
mAudioFocusHelper.abandonAudioFocus();
}
onPause();
}

보시다시피 사용자가 재생을 일시 중지 할 때 오디오 포커스를 포기하고 다른 앱이 포착 할 때 오디오 포커스를 포기하지는 않습니다 AUDIOFOCUS_GAIN_TRANSIENT.

일시적인 오디오 포커스 손실시 일시 중지 대 더킹

재생을 일시 중지할지 또는 일시적으로 OnAudioFocusChangeListener앱에서 제공해야하는 UX에 따라 오디오 재생 볼륨을 줄일 수 있습니다 Android O는 자동 더킹을 지원하며 시스템에서 추가 코드를 작성하지 않아도 자동으로 앱 볼륨을 줄입니다. 당신의에서 OnAudioFocusChangeListener그냥 무시AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK이벤트를.

Android N 및 이전 버전에서는 위의 코드 스 니펫과 같이 직접 더킹을 구현해야합니다.

지연된 이득

Android O는 지연된 오디오 포커스 게인 개념을 도입했습니다. 이를 구현하기 위해 오디오 포커스를 요청하면 AUDIOFOCUS_REQUEST_DELAYED아래와 같이 결과를 얻을 수 있습니다.

public void requestPlayback() {
int audioFocus = mAudioManager.requestAudioFocus(mAudioFocusRequest);
switch (audioFocus) {
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
...
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
...
case AudioManager.AUDIOFOCUS_REQUEST_DELAYED:
mAudioFocusPlaybackDelayed = true;
}
}

당신에 OnAudioFocusChangeListener구현, 당신은 다음을 확인해야합니다 mAudioFocusPlaybackDelayed당신이 응답 할 때 변수를 AUDIOFOCUS_GAIN다음과 같이.

private void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
logToUI("Audio Focus: Gained");
if (mAudioFocusPlaybackDelayed || mAudioFocusResumeOnFocusGained) {
mAudioFocusPlaybackDelayed = false;
mAudioFocusResumeOnFocusGained = false;
start();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
mAudioFocusResumeOnFocusGained = false;
mAudioFocusPlaybackDelayed = false;
stop();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
mAudioFocusResumeOnFocusGained = true;
mAudioFocusPlaybackDelayed = false;
pause();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
pause();
break;
}
}

3 단계 : 오디오 포커스를 포기하는 것을 잊지 마십시오.

앱의 오디오 재생이 완료되면 전화로 오디오 포커스를 포기해야합니다 AudioManager.abandonAudioFocus(…)이전 단계에서는 사용자가 재생을 일시 중지했을 때 오디오 포커스를 포기하는 앱의 상황을 들었지만 다른 앱이 일시적으로 중단했을 때 오디오 포커스를 유지하는 앱이있었습니다.

코드 샘플

앱에서 사용할 수있는 요점

이 GitHub 요지 에는 앱에서 사용할 수있는 오디오 포커스 코드를 다루는 3 개의 클래스 가 있습니다.

  • AudioFocusRequestCompat -이 클래스를 사용하여 앱에 필요한 오디오 포커스 유형을 설명합니다.
  • AudioFocusHelper -이 클래스는 실제로 오디오 포커스를 처리합니다. 앱에 포함시킬 수 있지만 오디오 재생 서비스에서 아래 인터페이스를 사용해야합니다.
  • AudioFocusAwarePlayer -이 인터페이스는 미디어 플레이어 ( MediaPlayer또는 ExoPlayer를 관리하는 서비스에 의해 구현되어야하며 AudioFocusHelper클래스가 오디오 포커스로 작동 하도록 허용합니다 .

완전한 코드 샘플

이 android-MediaBrowserService샘플에서는 MediaPlayer백그라운드에서 오디오를 실제로 재생 하는 Android 앱에서 오디오 포커스를 처리하는 방법을 보여줍니다 그것은 또한 사용합니다 MediaSession.

샘플에는 PlayerAdapter오디오 포커스 모범 사례를 보여주는 클래스가 있습니다. 상기에서 살펴 보시기 바랍니다 pause()및 onAudioFocusChange(int)방법을 구현한다.

코드 테스트

앱에 오디오 포커스를 구현 한 후에 Android Media Controller 도구를 사용하여 앱의 포커스 획득 및 손실에 대한 반응을 테스트 할 수 있습니다. 당신은 GitHub에서 그것을 얻을 수 있습니다 .

https://medium.com/google-developers/audio-focus-3-cdc09da9c122






CNX에서 선정한 2017/2018 가장 좋은 안드로이드 TV BOX에
U5PVR 디럭스 제품이 선정되었네요 ^^

선정된 U5PVR 디럭스 기준은 ATV5버젼입니다만,
현재 ATV7버젼의 Sample이 전달 되지 않아서 그렇습니다. 

1년동안 U5team과 같이 협업으로 좋은 결과가 있어서 보람이 있습니다.


아쉬운점은 U5PVR디럭스 제품이 추가 양산 일정이 없는관계로,
빈티지 제품이 되어 있는 점이 아쉽네요 ^^


가장 좋은 Android TV Box (2017/2018 Edition)는 무엇인가요?


구입할 TV 상자를 자주 묻는 순간부터 "나는 최고의 안드로이드 TV 상자는 무엇입니까? "라는 가이드를 썼습니다 . "라고 말합니다. 시간이 지났고 신제품이 출시되었습니다. 더 많은 기기를 테스트하고 더 많은 독자 의견을 얻었으므로 업데이트 할 시간입니다.

아직 모든 장치를 관리하는 장치가 없으며 모두가 서로 다른 요구 사항과 가격대를 갖고 있기 때문에 최상의 Android TV 상자는 한 사람에게만 제공 될 수 있습니다. 다른 사람에게 쓰레기가 될 수 있습니다. TV 박스를 구입하기 전에, TV 박스로 무엇을 할 계획인지 고려해야하며, 필요와 예산에 맞는 장치를 찾으십시오. 먼저, 주목할 가치가있는 대안뿐만 아니라 눈에 띄는 3 개의 TV 박스 (특정 순서 없음)를 선택하기 전에 SoC / RAM 선택 옆에서 찾을 항목 목록을 제공 할 것입니다.

찾을 물건

이 목록은 기본적으로 작년과 동일합니다. 단 운영 체제에 대한 두 개의 섹션과 추가 기능을 추가했습니다.

  • 운영체제 - "안드로이드 TV 상자"가 "안드로이드" "TV 박스"를 의미했을 때가 있었지만 구글의 TV 박스 운영체제가 보편화되고 일부 회사는 안드로이드 / 리눅스 운영체제로 듀얼 OS 버전을 제공하기 시작했습니다 동시에 대부분 서버 용도로 사용됩니다. 다음은 고려할 수있는 옵션입니다.
    • 공식 Android TV OS - 희박한 실행기로 원래의 경험을 원하면 Hulu, Netflix와 같은 스트리밍 서비스에 액세스하려는 경우 이러한 장치를 선택하십시오. 이 운영 체제에는 스트리밍에 필요한 모든 라이센스가 포함되어 있어야하며, 특히 대형 스크린 용으로 특별히 고안되었으며 IR 리모콘으로 잘 작동합니다. 그러나 TV 용으로 특별히 고안된 앱 (예 : 사이드로드하지 않는 한 Chrome 브라우저 없음) 만 설치하면 시스템이 에어 마우스 또는 무선 키보드 / 터치 패드와 항상 잘 작동하지 않을 수 있습니다.
    • 비공식 Android TV OS - 일부 라이선스가 누락 될 수 있다는 점을 제외하면 위와 동일하므로 일부 스트리밍 서비스가 제대로 작동하지 않거나 표준 해상도가 제한 될 수 있습니다.
    • 안드로이드 OS - 중국에서 발견 할 수있는 모든 것을 말하는 것은 아니지만, 대형 스크린에 대한 사용자 정의가 가능한 스마트 폰 용 안드로이드 운영 체제를 실행하고 있습니다. 이러한 기기는 Google Play 스토어에서 모든 앱을 설치할 수 있으므로 큰 유연성을 제공하며 대형 화면 용 런처가 제공됩니다. 단점은 인터페이스 또는 일부 앱의 일부만 IR 리모콘과 함께 사용할 수 있으므로 기기를 잘 제어하려면 무선 마우스, 무선 키보드 또는 스마트 폰 앱을 사용해야합니다. 또한 대부분의 상자에는 적절한 DRM 및 기타 라이센스가 없으므로 액세스 할 수있는 스트리밍 서비스 또는 적어도 재생 해상도를 제한 할 수 있습니다.
    • Android + Linux - 듀얼 부팅 시스템은 오래 동안 사용되어 왔으며 IMHO는별로 유용하지 않습니다. 그래서 여기서는 미디어 재생을 위해 Android와 동시에 두 개의 운영 체제가 실행되는 시스템과 NAS / 서버 기능. 지금까지 OpenWrt 또는 Debian으로 장치를 보았습니다.
  • 정기적 인 펌웨어 업데이트 내역 - 회사에서 정기적으로 OTA (무선) 펌웨어 업데이트를 제공하는 경우 장치가 더 좋아지고 초과 근무를하게 될 것입니다. 가장 저렴한 TV 박스는 보통 ship-and-forget 모델을 따르므로 일부 커뮤니티 회원이 맞춤 펌웨어를 제공하지 않는 한 개선을 기대할 수 없습니다.
  • 지원 포럼 - 최종 사용자에게 판매하는 평판 좋은 회사는 지원 포럼을 제공합니다. 싸구려 박스의 경우 Freaktab 과 같은 커뮤니티를 통하는 경우를 제외하고는 지원을받지 못합니다 .
  • 4K 및 HDR 지원 - 4K 비디오 및 최신 HDR (High Dynamic Range 기능)을 지원할 장치를 구입하려면 HDMI 2.0a (3840 × 2160 또는 4096 × 2160 출력, 최대 60Hz)가있는 장치를 찾아야합니다 및 HDR. 4K 비디오 코덱 (10 비트 HEVC / H.265, VP9, ​​H.264)을 두 번 확인하고 비디오에 사용 된 프레임 속도를 디코딩 할 수 있는지 확인하십시오. 후자는 일반적으로 H.265에는 문제가되지 않지만 일부 시스템에서는 30fps 또는 24fps 만 처리 할 수 ​​있기 때문에 VP9 또는 H.264가 될 수 있습니다.
  • 5.1 또는 7.1 HD 오디오 패스 스루 지원 - Dolby TrueHD, Dolby Atmos, DTS HD Master, DTS HD 고해상도 또는 DTS : X를 처리 할 수있는 앰프 또는 A / V 수신기를 소유하고있는 경우, 이 사이트 또는 다른 사용자에 대한 리뷰는 많은 기기가 지원 요청에도 불구하고 부족합니다.
  • 자동 프레임 속도 전환 - 모니터 화면 재생 빈도를 비디오 프레임 속도와 일치시켜 마이크로 스터 터 (micro stutter)라는 현상을 피할 수있는 기능으로, 일정한 간격으로 비디오를 부드럽게 만들지 못하게합니다. 특히 비디오가 패닝됩니다. 24fps 비디오가 모니터에서 24Hz를 사용하여 재생 된 경우와 같이 제대로 구현되면 마이크로 셔터가 사라집니다.
  • HD 및 UHD 비디오 스트리밍을위한 DRM 지원 - Netflix와 같은 비디오 스트리밍 서비스에 비용을 지불하는 경우 Widewine Level 1 DRM이 필요하지만 HD에서 비디오를 재생하기에 충분하지 않은 조건을 지원해야합니다 또는 UHD (4K) 해상도. 대부분의 장치는 적절한 DRM  없고 "Netflix 라이센스"를 얻지 못 하기 때문에 SD 해상도의 비디오 만 스트리밍 할 수 있습니다 .
  • 열 디자인 및 저장 성능 - 많은 안드로이드 TV 박스는 비슷한 사양을 가지고 있지만, IMHO의 두 가지 중요한 디자인 선택은 외관상으로 유사한 장치 간의 성능에 특히 영향을 미칩니다. 일부 TV 상자는 시간이 지남에 따라 과열되어 몇 분 후에 성능이 저하되고 적절한 냉각 기능을 갖춘 TV 상자는 몇 시간 동안 동일한 성능을 보입니다. 빠른 저장 장치를 사용하면 기기가 빠르게 부팅되고 앱이 빠르게로드되며 앱이 백그라운드에서 설치 또는 업데이트되는 동안 기기의 속도가 느려지지 않습니다.
  • 추가 기능 - 당신이 원하는 것은 스트리밍을 원한다면 일반적으로 신경 쓰지 않겠지 만, TV 박스를 더 원하면 디지털 TV 튜너 (DVB-T / T2 / C, DVB-S2, ATSC ..), 내부 SATA 베이, 다른 장치에서 비디오를 녹화 또는 방송하기위한 HDMI 입력 등이 있습니다.

MINIX NEO U9-H 미디어 허브

확대하려면 클릭하십시오.

기준 :

  • 운영체제 - 안드로이드 6.0.1 OS
  • 정기적 인 펌웨어 업데이트 내역 - MINIX는 일반적으로 약 1 년 정도 장치를 업데이트합니다.
  • 지원 포럼 - MINIX 포럼 은 상당히 활동적이므로, MINIX 또는 사용자 커뮤니티로부터 적절한 지원을받을 수 있어야합니다.
  • 4K 및 HDR 지원 - 4K @ 60Hz의 HDMI 2.0a가 지원되며 4K 10 비트 H.265, VP9 및 H.264 비디오를 매우 잘 지원합니다.
  • 5.1 또는 7.1 HD 오디오 패스 스루 지원 - Dolby TrueHD 및 DTS HD 오디오 패스 스루가 모두 작동합니다.
  • 자동 프레임 속도 전환 - OK (Kodi 17.x)
  • HD 및 UHD 비디오 스트리밍을위한 DRM 지원 - Widewine Level 1 및 Microsoft PlayReady가 구현되었습니다. 그러나 Netflix는 별도의 계약이 필요하기 때문에 최대 SD 해상도 또는 최대 HD (720p)까지만 재생할 수 있습니다.하지만 풀 HD는 물론 UHD도 재생할 수 없습니다.
  • 열 설계 및 보관 성능 - 대형 방열판 덕분에 냉각이 잘되고 내부 저장 공간이 매우 빠릅니다.
  • 추가 기능 - 별도의 마이크 잭, 켄싱턴 잠금 장치

작년에 추천 한 MINIX NEO U1 과 마찬가지로 Netflix Full HD 또는 4K UHD 재생이 필요하지 않으며 사용자 지정 런처와 에어 마우스를 사용하면 행복합니다. MINIX NEO U9-H는 확실히 귀하의 목록에 있어야합니다. 고려해야 할 장치. MINIX NEO U9-H 리뷰  읽으십시오 . 2017 년 3 월에 검토 한 이후 버그가 수정되었을 수도 있습니다.

가격 : 아마존 미국 , GearBest , GeekBuying 및 기타 판매 업체의 NEO A3 Lite 에어 마우스로 $ 149.90 이상 . 약 $ 139.90에 대해서만 상자를 (에어 마우스없이) 찾을 수 있습니다.

U5PVR 디럭스 셋톱 박스 및 NAS

확대하려면 클릭하십시오.

U5PVR Deluxe는 튜너 및 3.5 "SATA 드라이브와 같은 모든 추가 기능과 Android TV OS (비공식) 및 Debian 모두를 실행한다는 사실 때문에 상위 3 개 목록에 포함되었습니다.

기준 :

  • 운영체제 - 비공식 Android TV 5.1 OS 및 데비안이 동시에 실행됩니다. Android TV 7.1 베타도 제공됩니다.
  • 정기적 인 펌웨어 업데이트 내역 - 회사는 검토 이후 여러 가지 펌웨어 업데이트를 발표 했습니다 . 이전 모델은 U4 쿼드 하이브리드 - 출시 : 2016 년 1 월 , 마지막으로 펌웨어 업데이트 : 2016 11월 . 따라서 펌웨어 업데이트가 1 년 미만입니다.
  • 지원 포럼 - SmartSTB 포럼 (다소 활발한 활동) 또는 Google+ (활발하지 않은 활동)에서 제공됩니다. 이 장치는 MINIX 모델만큼 대중적이지 않으므로 관련 사용자가 적습니다.
  • 4K 및 HDR 지원 - Media Center 앱에서 4K 10 비트 H.265, VP9 및 H.264 비디오를 매우 잘 지원하면서 최대 4K @ 60Hz의 HDMI 2.0a가 지원됩니다 (단, Kodi 17.x 지원은 약간의 작업이 필요함). )
  • 5.1 또는 7.1 HD 오디오 패스 스루 지원 - Media Center 앱에서 작동하는 Dolby TrueHD 및 DTS HD 오디오 패스 스루.
  • 자동 프레임 속도 전환 - OK (Media Center 앱)
  • HD 및 UHD 비디오 스트리밍을위한 DRM 지원  DRM 지원 없음
  • 열 설계 및 보관 성능 - 뛰어난 내부 보관 성능 및 냉각시 눈에 띄는 문제가 없음 ( 설계시 분해 참조 )
  • 추가 기능 - 2.5 "또는 3.5"드라이브, 듀얼 DVB-T / T2 튜너 용 SATA 베이

DVB-T / T2가 지원되는 국가 (또는 튜너 보드를 추가로 구입하면 DVB-T / T2 / C, ATSC, DVB-S2)에 거주 하고 Linux NAS 기능을 사용할 계획 인 경우, U5PVR Deluxe는 확실히 좋은 후보자로 보입니다. 그러나 Netflix, Hulu 및 기타 프리미엄 서비스의 비디오 스트림을 주로보고 Kodi를 사용하려는 경우 사용자의 요구에 더 잘 맞는 다른 장치가 있어야합니다.

가격 : Aliexpress에서 배송비를 포함하여 $ 229.99 .

엔비디아 쉴드 안드로이드 TV (2017 판)

엔비디아는 올해 초 인기있는 쉴드 안드로이드 TV의 더 작은 버전을 출시했다. 나는이 기기를 직접 리뷰하지는 않았지만 가장 인기있는 안드로이드 TV 박스 중 하나 다.

기준 :

  • 운영 체제 - 공식 Android TV 7.0 (Oreo로 업그레이드 예정)
  • 정기적 인 펌웨어 업데이트의 역사 - Nvidia는 2015 년부터 원래 모델 (연간 6 회 정도)
  • 지원 포럼 - Nvidia Geforce 포럼의 Active SHIELD Android TV 게시판
  • 4K 지원 - 최대 4K @ 60Hz의 HDMI 2.0a는 10 비트 H.265, VP9 및 H.264 비디오 재생 (60fps)을 지원합니다.
  • 5.1 또는 7.1 HD 오디오 패스 스루 지원 - Dolby TrueHD 및 DTS HD 오디오 패스 스루 지원
  • 자동 프레임 속도 전환 - 적어도 Kodi와 Plex는 괜찮습니다.
  • HD 및 UHD 비디오 스트리밍을위한 DRM 지원 - 공식적으로 지원되는 Netflix HD 및 4K, Amazon Video
  • 열 설계 및 스토리지 성능 - 좋은 스토리지 성능, 난 단지 과열에 고립 된 문제의 보고서를 읽고 (즉 아닌 설계 문제).
  • 추가 기능 - N / A

NVIDIA TV 상자는 모든 TV 박스 중에서 가장 강력한 GPU 기능을 갖추고있어 뛰어난 3D 게임 콘솔이기도합니다. 회사는 올해 더 많은 국가에서이 모델을 출시했지만 가용성은 여전히 ​​문제입니다. 이것은 또한 기기가 공식적으로 출시되지 않은 국가에서 구매할 경우 배송비, 관세 및 기타 수수료 (예 : 배송료)를 고려하면 기기가 꽤 비쌀 수 있음을 의미합니다. Android TV OS를 실행하는 다른 기기와 마찬가지로 모든 앱을 Play 스토어에서 사용할 수있는 것은 아닙니다.

가격 : Amazon 미국에서  200 달러 .

기타 대안

세 가지 장치 만 고려할 수있는 것은 아니며 다른 대안이 일부 사람들의 요구 사항을 충족시킬 수 있습니다.

  • $ 100 이상
  • $ 100 이하
    • Xiaomi Mi Box US - Vudu +, Hulu, YouTube, Netflix와 같은 서비스에서 동영상을 스트리밍하고 게임을 즐기는 데 신경 쓰지 않고 다른 작업을 위해 매우 높은 성능을 제공하는 경우 공식적으로 Android TV 옵션이 좋습니다.
    • Mecool M8S PRO + - 비공식 Android TV 7.1 펌웨어 , 최대 1080p의 Netflix 를 지원하는 2GB RAM / 16GB 저장 용량의 Amlogic S905X SoC 기반 보조 40 달러 박스 . [링크 된 게시물의 eMMC 플래시 버전에 대한주의 사항]
    • LibreELEC (Kodi Linux 배포판) 과 호환되는 다양한 저가의 Amlogic S905 / S905X TV 상자 . 이 상자의 재고 안드로이드 펌웨어는 그리 좋지 않을 수 있으므로 커뮤니티에서 지원하는 LibreELEC을 실행하는 것이 좋습니다.

이 가이드가 어떤 모델을 구매할 것인지 결정하는 데 도움이되기를 바랍니다. 다른 모델이 상위 3 개 또는 대안 목록에 포함되어야한다고 생각한다면 자유롭게 의견을 말하십시오.


https://www.cnx-software.com/2017/12/26/whats-the-best-android-tv-box-2017-2018-edition/





Posted by Benjamin Baxter, Developer Programs Engineer

How to integrate the Google Assistant in a TV app

Earlier this year, we announced that the Google Assistant will be coming to Android TV and it has arrived. The Google Assistant on Android TV will allow users to discover, launch and control media content, control smart devices like light bulbs, and much more. Your Assistant also understands that you're interacting on a TV, so you'll get the best experience possible while watching your favorite movies and TV shows.

The Google Assistant has a built-in capability to understand commands like "Watch The Incredibles", and media controls, like pause, fast forward, etc. This article will walk through how to integrate the Google Assistant into your application.

There are no new APIs needed to integrate with the Google Assistant. You just need to follow the pattern that the Google Assistant expects from your app. If you want to experiment and play with the APIs and the Assistant, you can download this sample from github.

Discovery

The Google Assistant has made some changes to improve finding information on Android TV.

There are a few ways to expose your content to users through the Google Assisant.

Server side integration. (Requires registration and onboarding)

You need to provide your content catalog to Google. This data is ingested and available to the Google Assistant outside of your app.

This is not specific for Google Assistant. It will also enable other Google services such as search and discovery on Google Search, Google Play, Google Home App, and Android TV.

Client side integration. (Available to all apps)

If your app is already searchable, then you only need to handle the EXTRA_START_PLAYBACKflag, which we go into more detail later. Content will auto-play if the app name is explicitly specified in the search results or if the user is already in your app.

Once your app is searchable, you can test by asking the Assistant or, if you are in a loud area, test quietly by running the following adb command:

adb shell am start -a "android.search.action.GLOBAL_SEARCH" --es query \"The Incredibles\" 

Each app that responds to the search query will have a row displaying their search results. Notice that YouTube and the sample app, Assistant Playback, each receive their own rows for content that match the search query.

For specific searches such as "Play Big Buck Bunny", the Assistant will present a card with a button for each app that exactly matched the search query. In the screenshot below, you can see the sample app, Assistant Playback, shows up as an option to watch Big Buck Bunny.

There are times when the Google Assistant will launch an app directly to start playing content. An example of when this occurs is when content is exclusive to the app; "Play the Netflix original House of Cards".

Launching

When the user selects a video from search results, an intent is sent to your app. The priority order for the intent actions are as follows:

  1. Intent specified in the cursor returned from the search (SUGGEST_COLUMN_INTENT_ACTION).
  2. Intent specific in the searchable.xml file with the searchSuggestIntentAction value.
  3. Defaults to ACTION_VIEW.

In addition, the Assistant will also pass an extra to signal if playback should begin immediately. You app should be able to handle the intent and expect a boolean extra called EXTRA_START_PLAYBACK.

import static android.support.v4.content.IntentCompat.EXTRA_START_PLAYBACK;

public class SearchableActivity extends Activity {

   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       if (getIntent() != null) {
           // Retrieve video from getIntent().getData().

           boolean startPlayback = getIntent().getBooleanExtra(EXTRA_START_PLAYBACK, false);
           Log.d(TAG, "Should start playback? " + (startPlayback ? "yes" : "no"));

           if (startPlayback) {
               // Start playback.
               startActivity(...);
           } else {
               // Show details for movie.
               startActivity(...);
           }
       }
       finish();
   }
}

You can test this by modifying and running the following adb command. If your app has a custom action, then replace android.intent.action.VIEW with the custom action. Replace the value of the -d argument with the URI you return from the Assistant's query.

adb shell 'am start -a android.intent.action.VIEW --ez
android.intent.extra.START_PLAYBACK true -d <URI> -f 0x14000000'

The -f argument is the logical OR value from FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP. This will force your activity to be freshly launched.

For example, in the sample app, you can run the following command to launch playback of "Big Buck Bunny" as if the assistant had launched it.

adb shell 'am start -a android.intent.action.VIEW --ez
android.intent.extra.START_PLAYBACK true -d 
content://com.example.android.assistantplayback/video/2 -n
com.example.android.assistantplayback/.SearchableActivity -f 0x14000000'

The URI above is defined by the value of android:searchSuggestIntentData in searchable.xml(content://com.example.android.assistantplayback/video/) in addition to the value of SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID (2) returned from the query.

Note that intents may be cached by the Google Assistant up to 7 days. Your app could receive a request to play content that is no longer available. The intent handler should be designed to be stateless and not rely on any previously knowledge to handle the deep link. Your app should gracefully handle this situation. One solution would be to show an error message and let the user land on your main activity or another relevant activity.

Playback

If your app implements MediaSession correctly, then your app should work right away with no changes.

The Google Assistant assumes that your app handles transport controls. The Assistant uses the TransportControls to send media commands to your app's MediaSession. Video apps must support the following controls wherever possible:

  • Play/Pause/Stop
  • Previous/Next
  • Rewind/Fast Forward (implemented with seekTo())

You can easily get a hook for these controls by implementing a MediaSession.Callback. If you play videos using PlaybackTransportControlGlue, then all your callback needs to do it sync the glue and the MediaSession. Otherwise use this callback to sync your player.

public class MyMediaSessionCallback extends MediaSessionCompat.Callback {

   private final PlaybackTransportControlGlue<?> mGlue;

   public MediaSessionCallback(PlaybackTransportControlGlue<?> glue) {
       mGlue = glue;
   }

   @Override
   public void onPlay() {
       Log.d(TAG, "MediaSessionCallback: onPlay()");
       mGlue.play();
       updateMediaSessionState(...);
   }

   @Override
   public void onPause() {
       Log.d(TAG, "MediaSessionCallback: onPause()");
       mGlue.pause();
       updateMediaSessionState(...);
   }

   @Override
   public void onSeekTo(long position) {
       Log.d(TAG, "MediaSessionCallback: onSeekTo()");
       mGlue.seekTo(position);
       updateMediaSessionState(...);
   }

   @Override
   public void onStop() {
       Log.d(TAG, "MediaSessionCallback: onStop()");
       // Handle differently based on your use case.
   }

   @Override
   public void onSkipToNext() {
       Log.d(TAG, "MediaSessionCallback: onSkipToNext()");
       playAndUpdateMediaSession(...);
   }

   @Override
   public void onSkipToPrevious() {
       Log.d(TAG, "MediaSessionCallback: onSkipToPrevious()");
       playAndUpdateMediaSession(...);
   }
}

Continue learning

Check out the following articles and training documents to continue learning about MediaSession and Video apps.

To play around with the Google Assistant on Android TV, download the sample app and run it on Nvidia Shield running Android M or above.

If you would like to continue the discussion, leave a response or talk to me on Twitter.

https://android-developers.googleblog.com/2017/10/video-playback-with-google-assistant-on.html

Android TV 추천 채널에 콘텐츠 표시

Android Mini PC 2017.12.28 12:47 Posted by 뮤리찌



추천 채널에 콘텐츠 표시

Android TV 홈 화면 또는 홈 화면 은 권장 콘텐츠를 채널 및 프로그램 테이블로 표시하는 UI를 제공 합니다 . 각 행은 채널입니다. 채널에는 해당 채널에서 사용할 수있는 모든 프로그램의 카드가 있습니다.


TV 홈 화면

이 문서는 홈 화면에 채널과 프로그램을 추가하고, 콘텐츠를 업데이트하고, 사용자 작업을 처리하고, 사용자에게 최상의 경험을 제공하는 방법을 보여줍니다. (API에 대해 더 자세히 알고 싶다면 홈 화면 코드 랩을 시도 하고 I / O 2017 Android TV 세션을 시청하십시오 .)

참고 : 추천 채널은 Android 8.0 (API 레벨 26) 이상에서만 사용할 수 있습니다. Android 8.0 (API 레벨 26) 이상에서 실행되는 앱에 대한 권장 사항을 제공하려면이 코드를 사용해야합니다. 이전 버전의 Android에서 실행되는 앱에 대한 권장 사항을 제공하려면 앱에서 추천 행을 대신 사용해야합니다 .

홈 스크린 UI


앱은 새로운 채널을 만들고 채널에서 프로그램을 추가, 제거 및 업데이트하고 채널에서 프로그램의 순서를 제어 할 수 있습니다. 예를 들어 앱은 '새로운 기능'이라는 채널을 만들고 새로 사용 가능한 프로그램에 대한 카드를 보여줄 수 있습니다.

앱은 채널이 홈 화면에 표시되는 순서를 제어 할 수 없습니다. 앱이 새 채널을 만들면 홈 스크린이 채널 목록의 맨 아래에 채널을 추가합니다. 사용자는 채널을 재정렬, 숨기기 및 표시 할 수 있습니다.

다음 채널보기

홈 화면에 나타나는 첫 번째 채널에는 '다음보기'라는 라벨이 지정됩니다. 시스템은이 채널을 생성하고 유지 관리합니다. 앱에서이 채널을 이동, 제거 또는 숨길 수 없습니다. 이 채널에 프로그램을 추가 할 수 있습니다. 예를 들어 사용자가 재미 있다고 표시하거나 중간에 시청을 중단 한 프로그램 또는 사용자가보고있는 콘텐츠와 관련된 프로그램 (예 : 프로그램의 다음 시즌 또는 다음 에피소드) .

앱 채널

앱에서 만드는 채널은 모두 다음 라이프 사이클을 따릅니다.

  1. 사용자가 앱의 채널을 검색하여 홈 화면에 추가하도록 요청합니다.
  2. 앱이 채널을 생성하고 채널에 추가합니다 TvProvider(이 시점에서는 채널이 표시되지 않음).
  3. 앱이 시스템에 채널을 표시하도록 요청합니다.
  4. 시스템에서 사용자에게 새 채널을 승인하도록 요청합니다.
  5. 새 채널이 홈 화면의 마지막 행에 나타납니다.

기본 채널

앱에서 사용자가 홈 화면에 추가 할 수있는 모든 채널을 제공 할 수 있습니다. 사용자는 일반적으로 홈 스크린에 나타나기 전에 각 채널을 선택하고 승인해야합니다. 모든 앱에는 하나의 기본 채널 을 만들 수있는 옵션이 있습니다. 기본 채널은 홈 화면에 자동으로 나타나기 때문에 특별합니다. 사용자는 명시 적으로 요청할 필요가 없습니다.

선결 요건


Android TV 홈 화면은 Android TvProviderAPI를 사용하여 앱에서 만드는 채널과 프로그램을 관리합니다. 공급자의 데이터에 액세스하려면 앱의 매니페스트에 다음 권한을 추가하십시오.

<uses-permission android:name="com.android.providers.tv.permission.READ_EPG_DATA" />
<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />

TvProvider지원 라이브러리는 쉽게 공급자를 사용 할 수 있습니다. build.gradle파일 의 종속성에 추가 하십시오.

compile 'com.android.support:support-tv-provider:27.0.0'

채널과 프로그램을 사용하려면 프로그램에 다음과 같은 지원 라이브러리 가져 오기를 포함해야합니다.

import android.support.media.tv.Channel;
import android.support.media.tv.TvContractCompat;
import android.support.media.tv.ChannelLogoUtils;
import android.support.media.tv.PreviewProgram;
import android.support.media.tv.WatchNextProgram;

채널


앱에서 만드는 첫 번째 채널이 기본 채널이됩니다. 기본 채널이 홈 화면에 자동으로 나타납니다. 사용자가 만든 다른 모든 채널은 홈 화면에 나타나기 전에 사용자가 선택하고 수락해야합니다.

채널 만들기

앱이 포 그라운드에서 실행될 때만 새로 추가 된 채널을 표시하도록 시스템에 요청해야합니다. 이렇게하면 사용자가 다른 앱을 실행하는 동안 채널 추가 승인 대화 상자가 앱에 표시되지 않습니다. 백그라운드에서 실행 중일 때 채널을 추가하려고하면 활동의 onActivityResult()메소드가 상태 코드를 반환합니다 RESULT_CANCELED.

채널을 만들려면 다음 단계를 따르십시오.

  1. 채널 빌더를 만들고 속성을 설정하십시오.

    Channel.Builder builder = new Channel.Builder();
    // Every channel you create must have the type `TYPE_PREVIEW`
    builder
    .setType(TvContractCompat.Channels.TYPE_PREVIEW)
           
    .setDisplayName("Channel Name")
           
    .setAppLinkIntentUri(uri);

    채널 유형은이어야합니다 TYPE_PREVIEW필요에 따라 더 많은 속성 을 추가하십시오 .

  2. 제공자에게 채널을 삽입하십시오.

    Uri channelUri = context.getContentResolver().insert(
     
    TvContractCompat.Channels.CONTENT_URI, builder.build().toContentValues());

    채널에 프로그램을 나중에 추가하려면 채널 ID를 저장해야합니다. 반환 된 URI에서 채널 ID를 추출합니다.

    long channelId = ContentUris.parseId(channelUri);

  3. 채널 로고를 추가해야합니다. 용도 Uri또는 Bitmap:

    // Choose one or the other
    storeChannelLogo
    (Context context, long channelId, Uri logoUri); // also works if logoUri is a URL
    storeChannelLogo
    (Context context, long channelId, Bitmap logo);

    로고 아이콘은 80dp x 80dp 여야하며 불투명해야합니다. 원형 마스크 아래에 표시됩니다.

    TV 홈 화면 아이콘 마스크

  4. 기본 채널 만들기 (선택 사항) :

    앱이 첫 번째 채널을 만들면 기본 채널로 만들어 사용자 작업없이 바로 홈 화면에 나타낼 수 있습니다 .

    TvContractCompat.requestChannelBrowsable(context, channelId);

    사용자가 만든 다른 모든 채널은 사용자가 명시 적으로 선택 하지 않으면 표시되지 않습니다 .

채널 업데이트 중

채널을 업데이트하는 것은 채널을 만드는 것과 매우 유사합니다.

다른 Channel.Builder속성을 사용 하여 변경할 속성을 설정하십시오.

를 사용하여 ContentResolver채널을 업데이트하십시오. 채널을 처음 추가 할 때 저장 한 채널 ID를 사용하십시오.

context.getContentResolver().update(TvContractCompat.buildChannelUri(channelId),
    builder
.build().toContentValues(), null, null);

채널의 로고를 업데이트하려면를 사용하십시오 storeChannelLogo().

채널 삭제하기

context.getContentResolver().delete(TvContractCompat.buildChannelUri(channelId), null, null);

프로그램


앱 채널에 프로그램 추가하기

만들기 PreviewProgram.Builder및 해당 특성을 설정 하십시오 .

PreviewProgram.Builder builder = new PreviewProgram.Builder();
builder
.setChannelId(channelId)  
       
.setType(TvContractCompat.PreviewPrograms.TYPE_CLIP)
       
.setTitle("Title")
       
.setDescription("Program description")
       
.setPosterArtUri(uri)
       
.setIntentUri(uri)
       
.setInternalProviderId(appProgramId);

프로그램 유형에 따라 더 많은 특성을 추가하십시오. (각 유형의 프로그램에서 사용할 수있는 속성을 보려면 아래 표를 참조하십시오 .)

공급자를 프로그램에 삽입하십시오.

Uri programUri = context.getContentResolver().insert(TvContractCompat.PreviewPrograms.CONTENT_URI,
      builder
.build().toContentValues());

나중에 참조 할 수 있도록 프로그램 ID를 검색하십시오.

long programId = ContentUris.parseId(programUri);

다음 채널보기에 프로그램 추가

다음 채널보기에 프로그램을 삽입하는 것은 프로그램을 자신의 채널에 삽입하는 것과 같습니다. 4 종류의 프로그램이 있습니다. 적절한 유형을 선택하십시오.

유형노트
WATCH_NEXT_TYPE_CONTINUE사용자가 콘텐츠를 보는 중간에 앱을 중지 할 때 앱에 의해 삽입됩니다.
WATCH_NEXT_TYPE_NEXT사용자가보고있는 시리즈에서 다음 사용 가능한 프로그램을 제안하기 위해 앱에 삽입되었습니다. 예를 들어, 사용자가 시리즈의 에피소드 3을보고있는 경우 앱은 다음에 에피소드 4를 시청할 것을 제안 할 수 있습니다.
WATCH_NEXT_TYPE_NEW새 콘텐츠를 사용할 수있을 때 앱에 의해 삽입됩니다 (시리즈 또는 새 시즌의 새 에피소드). 예를 들어 사용자가 시리즈에서 5 번 에피소드를보고 있고 6 번을 시청할 수있게됩니다.
WATCH_NEXT_TYPE_WATCHLIST사용자가 특정 프로그램을 저장하겠다고 표시하면 시스템이나 앱에 의해 삽입됩니다.

다음을 사용하십시오 WatchNextProgram.Builder:

WatchNextProgram.Builder builder = new WatchNextProgram.Builder();
builder
.setType(TvContractCompat.WatchNextPrograms.TYPE_CLIP)
       
.setWatchNextType(TvContractCompat.WatchNextPrograms.WATCH_NEXT_TYPE_CONTINUE)
       
.setLastEngagementTimeUtcMillis(time)
       
.setTitle("Title")
       
.setDescription("Program description")
       
.setPosterArtUri(uri)
       
.setIntentUri(uri)
       
.setInternalProviderId(appProgramId);

Uri watchNextProgramUri = context.getContentResolver()
       
.insert(TvContractCompat.WatchNextPrograms.CONTENT_URI, builder.build().toContentValues());

사용 TvContractCompat.buildWatchNextProgramUri(long watchNextProgramId)만들기 위해 Uri당신이 시계 다음 프로그램을 업데이트해야합니다.

사용자가 Watch Next 채널에 프로그램을 추가하면 시스템은 채널에 프로그램을 복사합니다. 그것은 TvContractCompat.ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT프로그램이 추가되었음을 앱에 알리기 위한 의도 를 보냅니다 인 텐트에는 복사 된 프로그램 ID와 다음 채널보기 채널에서 프로그램 용으로 생성 된 프로그램 ID가 포함됩니다.

프로그램 업데이트

프로그램의 정보를 변경할 수 있습니다. 예를 들어 영화 대여 가격을 업데이트하거나 사용자가 시청 한 프로그램의 양을 보여주는 진행률 막대를 업데이트 할 수 있습니다.

를 사용하여 PreviewProgram.Builder변경해야하는 속성을 설정 한 다음 getContentResolver().update프로그램을 업데이트하기 위해 호출 하십시오. 프로그램을 처음 추가 할 때 저장 한 프로그램 ID를 지정하십시오.

context.getContentResolver().update(TvContractCompat.buildPreviewProgramUri(programId),
    builder
.build().toContentValues(), null, null);

프로그램 삭제하기

context.getContentResolver().delete(TvContractCompat.buildPreviewProgramUri(programId), null, null);

사용자 작업 처리


앱을 사용하면 채널을 표시하고 추가 할 수있는 UI를 제공하여 사용자가 콘텐츠를 쉽게 찾을 수 있습니다. 앱이 홈 화면에 표시된 후에도 채널과의 상호 작용을 처리해야합니다.

채널 발견 및 추가

앱에서 채널을 선택하고 추가 할 수있는 UI 요소 (예 : 채널 추가를 요청하는 버튼)를 제공 할 수 있습니다. 사용자가 특정 채널을 요청하면이 코드를 실행하여 홈 화면 UI에 추가 할 수있는 권한을 얻습니다.

Intent intent = new Intent(TvContractCompat.ACTION_REQUEST_CHANNEL_BROWSABLE);
intent
.putExtra(TvContractCompat.EXTRA_CHANNEL_ID, channelId);
try {
   activity
.startActivityForResult(intent, 0);
} catch (ActivityNotFoundException e) {
 
// handle error
}

시스템은 사용자에게 채널 승인을 요청하는 대화 상자를 표시합니다. onActivityResult활동 의 방법 ( Activity.RESULT_CANCELED또는 Activity.RESULT_OK에서 요청의 결과를 처리하십시오 .

Android TV 홈 화면 이벤트

사용자가 앱에서 게시 한 프로그램 / 채널과 상호 작용하면 홈 화면에서 앱에 인 텐트를 전송합니다.

  • 홈 스크린은 Uri사용자가 채널의 로고를 선택할 때 채널의 APP_LINK_INTENT_URI 속성에 저장된 앱을 앱으로 보냅니다 앱은 기본 UI 또는 선택한 채널과 관련된보기를 시작해야합니다.
  • 홈 화면은 Uri사용자가 프로그램을 선택할 때 프로그램의 INTENT_URI 속성에 저장된 것을 앱에 보냅니다 앱에서 선택한 콘텐츠를 재생해야합니다.
  • 사용자는 더 이상 프로그램에 관심이없고 홈 화면의 UI에서 제거하려고 함을 나타낼 수 있습니다. 시스템은 UI에서 프로그램을 제거하고 프로그램의 ID와 함께 프로그램을 소유 한 앱에 인 텐트 (android.media.tv.ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED 또는 android.media.tv.ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED)를 보냅니다. 앱은 프로 바이더로부터 프로그램을 삭제해야하고 다시 삽입해서는 안됩니다.

Uris홈 화면이 사용자 상호 작용을 위해 보내는 모든 것에 대한 인 텐트 필터를 만들어야합니다 예 :

<receiver
   
android:name=".WatchNextProgramRemoved"
   
android:enabled="true"
   
android:exported="true">
   
<intent-filter>
       
<action android:name="android.media.tv.ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" />
   
</intent-filter>
</receiver>

모범 사례


  • 앱은 기본 채널을 삽입하고 가능한 한 빨리 사용자에게 콘텐츠를 제공해야합니다. 앱을 설치 한 후 시스템이 전송 BroadcastReceiver하는 android.media.tv.action.INITIALIZE_PROGRAMS"wakeup"인 텐트를 수신 하는 장치 를 추가하여이 작업을 수행 할 수 있습니다 드물 긴하지만 사용자가 앱을 시작하면 앱에서 '깨우기'브로드 캐스트를 수신 할 수 있습니다. 코드에서 기본 채널을 두 번 이상 추가하면 안됩니다.
  • 앱이 포 그라운드에 있지 않고 채널이나 프로그램을 업데이트해야하는 경우에는 JobScheduler을 사용 하여 작업을 예약하십시오 ( JobScheduler 및 JobService 참조 ).
  • 앱이 오작동하는 경우 시스템에서 앱의 제공자 권한을 취소 할 수 있습니다 (예 : 데이터로 제공자를 지속적으로 스팸하는 경우). 보안 예외를 처리하려면 try-catch 절을 사용하여 공급자에 액세스하는 코드를 래핑해야합니다.
  • 프로그램 및 채널을 업데이트하기 전에 공급자에게 데이터를 업데이트하고 조정해야하는 데이터를 쿼리하십시오. 예를 들어 사용자가 UI에서 제거하려는 프로그램을 업데이트 할 필요가 없습니다. 기존 데이터를 쿼리 한 다음 채널 승인을 요청한 후 공급자에 데이터를 삽입 / 업데이트하는 백그라운드 작업을 사용하십시오. 앱이 시작될 때와 앱이 데이터를 업데이트해야 할 때마다이 작업을 실행할 수 있습니다.

     try (Cursor cursor =
              context
    .getContentResolver()
                     
    .query(
                             
    TvContractCompat.buildChannelUri(channelId),
                             
    null,
                             
    null,
                             
    null,
                             
    null)) {
         
    if (cursor != null && cursor.moveToNext()) {
             
    Channel channel = Channel.fromCursor(cursor);
             
    if (channel.isBrowsable()) {
                 
    //update channel's programs
             
    }
         
    }
     
    }
  • 모든 이미지 (로고, 아이콘, 내용 이미지)에 대해 고유 한 Uris를 사용하십시오. 이미지를 업데이트 할 때 다른 Uri를 사용해야합니다. 모든 이미지가 캐싱됩니다. 이미지를 변경할 때 Uri를 변경하지 않으면 이전 이미지가 계속 나타납니다.

  • WHERE 절은 허용되지 않으며 WHERE 절을 사용하여 공급자에 대한 호출은 보안 예외를 throw합니다.

이전 버전과의 호환성


속성


이 절에서는 채널 및 프로그램 속성을 별도로 설명합니다.

채널 속성

모든 채널에 대해 다음 속성을 지정해야합니다.

속성노트
유형로 설정됩니다 TYPE_PREVIEW.
DISPLAY_NAME채널 이름으로 설정하십시오.
APP_LINK_INTENT_URI사용자가 채널의 로고를 선택하면 시스템은 채널과 관련된 컨텐츠를 제공하는 활동을 시작하기위한 의도를 보냅니다. 이 액티비티의 인 텐트 필터에 사용 된 Uri에이 애트리뷰트를 설정한다.

또한 채널에는 내부 앱 사용을 위해 예약 된 6 개의 입력란이 있습니다. 이 입력란은 앱이 채널을 내부 데이터 구조에 매핑하는 데 도움이되는 키 또는 기타 값을 저장하는 데 사용할 수 있습니다.

  • INTERNAL_PROVIDER_ID
  • INTERNAL_PROVIDER_DATA
  • INTERNAL_PROVIDER_FLAG1
  • INTERNAL_PROVIDER_FLAG2
  • INTERNAL_PROVIDER_FLAG3
  • INTERNAL_PROVIDER_FLAG4

프로그램 속성

비디오 프로그램 속성

비디오 프로그램의 속성은 프로그램 유형에 따라 다릅니다. 비디오 프로그램은 다음 유형 중 하나 일 수 있습니다.

  • TYPE_MOVIE
  • TYPE_TV_SERIES
  • TYPE_TV_SEASON
  • TYPE_TV_EPISODE
  • TYPE_CLIP
  • TYPE_EVENT
  • TYPE_CHANNEL

속성은 두 개의 그룹, 즉 필수 속성과 선택적 속성에 속합니다.

필수 동영상 속성

모든 유형의 비디오 프로그램에 대해 다음 속성을 지정해야합니다.

  • INTENT_URI
  • CHANNEL_ID
  • 표제
  • POSTER_ART_ASPECT_RATIO
  • POSTER_ART_URI

이러한 속성은 일부 유형의 비디오 프로그램에 필요하며 다른 속성에는 선택적입니다. 속성이 선택 사항 인 경우 괄호로 묶습니다.

속성영화TV 시리즈TV 시즌TV 에피소드클립행사채널
CONTENT_RATING(✔)(✔)(✔)
DURATION_MILLIS(✔)
EPISODE_DISPLAY_NUMBER
SEASON_DISPLAY_NUMBER
선택적 비디오 속성

이러한 선택적 속성은 프로그램 유형에 따라 사용할 수 있습니다.

속성영화TV 시리즈TV 시즌TV 에피소드클립행사채널
저자
유효성
CANONICAL_GENRE
EPISODE_TITLE
INTERACTION_COUNT
INTERACTION_TYPE
INTERNAL_PROVIDER_ID
ITEM_COUNT
살고 있다
LOGO_URI
가격을 제시하다
PREVIEW_VIDEO_URI
출시일
REVIEW_RATING
REVIEW_RATING_STYLE
간단한 설명
STARTING_PRICE
THUMBNAIL_ASPECT_RATIO
THUMBNAIL_URI
VIDEO_HEIGHT
VIDEO_WIDTH
무게
이미지 미리보기

미리보기 이미지에 권장되는 크기는 다음과 같습니다.

종횡비신장
16:9272dp153dp
3:2229.5dp153dp
4:3204dp153dp
1:1153dp153dp
2:3102dp153dp

최상의 품질을 얻으려면 미리보기 비디오가 16 : 9 또는 4 : 3이고 위의 표에 지정된 크기 이상이어야합니다. 로고는 또한 최상의 사용자 경험을 위해 불투명해야합니다.

VIDEO_WIDTH 및 VIDEO_HEIGHT를 사용하여 정확한 미리보기 비디오 크기를 지정할 수 있습니다.

오디오 프로그램 속성

오디오 프로그램의 속성은 프로그램 유형에 따라 다릅니다. 오디오 프로그램은 다음 유형 중 하나 일 수 있습니다.

  • TYPE_TRACK
  • TYPE_ALBUM
  • TYPE_ARTIST
  • TYPE_PLAYLIST
  • TYPE_STATION

속성은 두 개의 그룹, 즉 필수 속성과 선택적 속성에 속합니다.

필수 오디오 속성

모든 유형의 오디오 프로그램에 대해 다음 속성을 지정해야합니다.

  • INTENT_URI
  • CHANNEL_ID
  • POSTER_ART_URI
  • POSTER_ART_ASPECT_RATIO
  • 표제

또한 DURATION_MILLIS오디오 트랙에 필요합니다.

선택적 오디오 속성

이러한 선택적 속성은 프로그램 유형에 따라 사용할 수 있습니다.

속성선로앨범예술가재생 목록
저자
유효성
INTERACTION_COUNT
INTERACTION_TYPE
INTERNAL_PROVIDER_ID
살고 있다
LOGO_URI
가격을 제시하다
PREVIEW_VIDEO_URI
출시일
간단한 설명
STARTING_PRICE
THUMBNAIL_ASPECT_RATIO
THUMBNAIL_URI
VIDEO_HEIGHT
VIDEO_WIDTH
무게

다음 프로그램 속성보기

다음 비디오보기 채널에 오디오 또는 비디오 프로그램을 추가 할 때 오디오 / 비디오의 필수 및 선택 속성 외에도 다음 속성을 포함해야합니다.

속성노트
WATCH_NEXT_TYPE다음 채널보기 프로그램 유형 중 하나를 선택하십시오 .
LAST_ENGAGEMENT_TIME_UTC_MILLIS사용자 / 앱이 마지막으로 프로그램에 참여한 시간입니다.
LAST_PLAYBACK_POSITION_MILLISWATCH_NEXT_TYPE_CONTINUE에만 필요합니다.
DURATION_MILLISWATCH_NEXT_TYPE_CONTINUE에만 필요합니다.

https://developer.android.com/training/tv/discovery/recommendations-channel.html



안드로이드TV OS (ATV OS)에서 맨 상단의 추천 컨텐츠 라인이 없어질 것 이라고 합니다.

그러나, 안드로이드 TV 8 버젼에서 부터 지원됩니다.




Google, Android TV의 Oreo 레거시 권장 사항 행 폐지


2017 년 12 월 26 일 - John Anon 저


지난 주말 Google 은 Android TV 에서 기존 권장 사항을 단계적으로 중단한다고 발표했습니다 확인은 Android 개발자 블로그를 통해 이루어졌습니다. 발표는 주로 Android TV 앱 개발자에게 변경 사항을 알리기 위해 고안되었습니다. 변경 사항을 적용하기 전에 앱에 필요한 사항을 변경하고 설명을 위해 Android 8.0 (Oreo)을 실행하는 기기에만 영향을 미칩니다.

이것은 근본적으로 전통적인 '추천 행'이 더 이상 Android TV (leanback) 실행기 인터페이스에 표시되지 않음을 의미합니다. 이것은 안드로이드 TV가 시작된 이래로 필수품이었으며 따라서 상당히 제거되었습니다. 발표가 발표됨에 따라 Android TV 앱의 일반적인 권장 사항이 계속 표시되므로 앱을 완전히 삭제하지는 못합니다. 그들이 보관되어있는 행의 차이점은 전용 권장 사항 섹션 대신 '채널'양식을 채택한 행이있는 실행기 맨 위에서 맨 아래로 재배치됩니다.


사실, '채널'은 왜이 변화가 지금 예정되어 있는지에 대한 이유 중 하나입니다. Google이 Oreo 업데이트를 처음 발표했을 때Android TV의 경우 Android TV 채널의 개념을 도입했습니다. 이를 통해 Android TV 앱 개발자는 홈페이지에 전용 채널을 만드는 기능을 사용할 수 있습니다. 그러면 해당 앱의 여러 가지 추천 프로그램 / 클립이 강조 표시됩니다. 따라서 장치가 Oreo를 실행 중일 때 각 앱은 이전에 비해 출시 된 Leanback에서 볼 수있는 훨씬 더 많은 권장 컨텐츠를 볼 수 있습니다. 실제 권장 행을 요구 사항에 다소 과잉되게 만듭니다. 아직 새 채널 형식으로 전환하지 않은 앱의 경우 기울기 방지 실행 프로그램은 하단의 새 채널 섹션에 권장 사항을 표시합니다. 따라서 여전히 눈에 띄는 반면, 이전보다 더 많은 스크롤링이 필요합니다. Android TV (Android TV)의 이전 버전 (Nougat) 이하는 새로운 채널 기반 디자인을 사용하지 않기 때문에, 이 변경 사항은 적용되는 표준 권장 사항 행과 관련이 없습니다. 다음은 Google에서 제공하는 이미지의 예입니다 (아래쪽 아래쪽) "앱에서 추천 한 "채널은 앞으로 Android Oreo에서 보입니다.



https://www.androidheadlines.com/2017/12/google-phasing-out-android-tvs-oreo-legacy-recommendation-row.html





게시자 : Bejamin Baxter, 개발자 프로그램 엔지니어

Google I / O 2017 에서 Android TV 홈 화면의 재 설계를 발표 했습니다. 추천 행 개념을 확장하여 각 앱이 홈 화면에서 자체 행 (또는 여러 행)의 콘텐츠를 가질 수 있도록했습니다. 새로운 홈 화면이 출시 된 이후 Android Oreo에 대한 새로운 추천 채널이 다양한 앱에서 채택되었습니다.


새로운 채널을 사용하여 고품질 권장 사항이 부상하는 앱이 점점 더 많아지면서 Android O의 새로운 홈 화면에 있는 기존 권장 행 은 내년에 단계적으로 사라집니다.


현재 앱이 레거시 알림 기반 API로 추천을 만들면 해당 앱의 채널에 콘텐츠가 추가됩니다. Android N (또는 그 이하)에서 업그레이드 할 때 권장되는 콘텐츠가있는 경우 채널이 이미 존재할 수 있습니다. 앱 채널이없는 경우 자동으로 생성됩니다. 두 경우 모두 채널에서 프로그램을 추가하거나 제거 할 수는 없지만 채널을 이동, 숨기기 및 표시 할 수는 있습니다. 앱이 새 API를 사용하여 자체 채널을 추가하기 시작하면 시스템에서 자동 생성 채널을 삭제하고 앱이 콘텐츠 표시를 제어합니다.


내년에는 채널 자동 생성을 단계적으로 중단 할 예정입니다. 각 앱의 기존 권장 사항에 대해 하나씩 여러 채널을 생성하는 대신 모든 기존 권장 사항에 대해 하나의 채널을 삽입 합니다. 이 채널은 채널 목록 하단에 나타납니다. 사용자가 이동하거나 제거 할 수 있습니다. 사용자가 Android O로 업그레이드하면 Android N (및 그 이하)의 이전 추천 행이 홈 화면 하단의 채널이됩니다.

홈 화면의 새 채널에 콘텐츠를 게시하도록 앱을 업데이트하지 않은 경우 시작하려면 설명서 ,코드 랩 및 샘플 을 살펴보십시오.

우리는 홈 스크린의 새로운 변화를 이용하는 점점 더 많은 앱을 기대합니다. 의견을 보내 주시면 G + 의 Android TV 개발자 커뮤니티 를 방문하여 의견을 보내주세요 .


https://android-developers.googleblog.com/2017/12/phasing-out-legacy-recommendations-on.html


U5 SBC PCB 레이아웃 초안 171227

Android Mini PC 2017.12.27 11:38 Posted by 뮤리찌




U5 SBC PCB 레이아웃 초안 171227

 

안녕하십니까 ?  EddyLab입니다.

이전에 U5 SBC 제품 개발 관련 이야기를 드린 바 있습니다.


U5 SBC 제품발표 및 개발 비하인드 스토리 (1)




오늘은 후속 이야기로 실질적인 제품 개발 과정을 소개해 드립니다.


U5 SBC PCB 레이아웃 초안 171227 입니다.  ^^

아직 일부 부품 변경이 아직 있을 예정입니다만,
전체적인 레이아웃은 그대로 진행될 것 같습니다.

PCB사이즈는 100*100mm 입니다.

PCB 색상은 블랙으로 정하기로 하였습니다.



U5 SBC_Pcb 초안 171227.pdf






RPi 3 Model BU5 SBC (tentative Project name)
SOCBCM2837Hi3798CV200
CPUQuard core A53@1.2GHzQuad core A53 @1.6GHz
GPUVideocore IVMail T720
RAM1GB SDRAM DDR32GB SDRAM DDR4
Storagemicro-SD16G eMMC 5.0
OSNOOBS, RASPBIA
LIBEELEC, UBUNTU MATE etc

Commercial Android TV OS 7.x with AoL (Android over Linux)    Native Linux : Debian (2018 will support)

Ethernet10/100100/1000
Wireless802.11/n Bluetooth 4.0none
Video OutputHDMI / CompositHDMI 2.0a
Audio OutputHDMI / HeadphoneHDMI / I2S / Passthrouth ATMOS & DTS-X support
GPIO40pin (3.3V, 5V Support)40pin (3.3V, 5V, 12V Support)
Tuner Module 사용시, 40pin 중 I2C1, I2C2 핀 사용불가
DRMnoneWidevine Level 1
Video 
Resolution

1080P@60fps@MP4

3840 x 2160@60fps, HEVC Profile1, 
10bit, BT2020, HDR10 Suppoort
Codec 
License
none, 
MP2 / VC-1 (Purchase separately)
include MP2 / Dolby AC3
SATA portnone1EA with HDD power connector 
(2.5inch HDD / 3.5inch HDD support)
USB 2.0 Port4x USB 2.0 Ports2x USB 2.0 Ports
USB 3.0 Portnone1x USB 3.0 Ports
Media CenterBlu-ray ISO, File folder Direct to Play, PQ Engine,
3D Subtitle, Post wall, Blu-ray Navigation (Menu) support
InputnoneIR / Mic input support
Boradcast Tunernone

ATSC 2.0 Tuner Slot (ATSC 2tuner Support)

Support AppAndroid : Netflix HD(1080p) / 4K, Youtube 4K@60fps, 
Google Move, Google Music
AoL (Andorid over Linux) : Torrent server, tvheadend, MiniDLNA Server etc..
Power5V/2.5A12V 2A (2.5inch HDD) 
12V3A (3.5inch HDD)





WiFi / BT 동글은 Sample을 입수하여 test를 진행하고 있습니다.




아직 U5PVR에 Sample 동글을 꼽아서는 인식을 하지 않았고 (SW이슈),
PC에 꼽아서는 Realtek 8828U  WiFi와 BT인식은 성공하였습니다.


3. 개발 일정


2018년 구정전까지 알파 test 샘플보드 생산하여 기본동작 test를 진행 할 예정입니다.


이번 U5 SBC는 다양한 기능 추가보다는 

안정적으로 동작하는 SBC 보드를 개발 할 목적이고,

외부 인터페이스 연결 기능을 기초로 응용가능한 범위를 넓혀보고자 합니다.





TAG U5 SBC

U5PVR 2160P 비디오 설정관련 의견

Android Mini PC 2017.12.26 11:53 Posted by 뮤리찌



안녕하십니까 ?  EddyLab입니다.  

전주에 U5PVR 비디오 설정관련으로 하기 내용을 언급해 드린 것이 있었습니다. 


관련 내용을 U5team 사무실에 방문하여 LG OLED 기반에서 test를 해 보았습니다.

결론은 썩 좋은 결론은 아닙니다.  ^^

원본 UHD파일 자체가 아직은 4:2:0이고, 최대가 4:2:2 정도 입니다.

비디오 재생기의 환경설정을 4:4:4로 변경해도, 큰 변화는 느끼지 못하였습니다.

그리고 영화가 24fps 또는 30fps이기 때문에, 
해상도 설정값을 2160P@30fps로 설정하면서 4:4:4 10bit로 설정이 가능해 지지만,

오히려 U5PVR에서 4K@60fps 유투브 재생시에는 원인 모를 에러가 발생되고,
프레임드랍이 심하게 발생되는 내용이 확인이 되었습니다.


그러므로, U5PVR 비디오 설정관련으로는
2160P@60fps / 4:2:0 10bit를 권장 해 드립니다.

UHD영화 재생시에는 미디어센터(보라색)내에서 24Hz나 30Hz로 맞춰주는
Auto 프레임 기능을 활용하시는 것을 권장해 드립니다...
(아직 잘 동작하지 않을 수도 있습니다. ^^;;)


감사합니다.

 



[U5PVR] 2160P@30fps / 4:4:4 10bit 관련 test 요청

 

안녕하십니까 ?  EddyLab입니다.

옆집에서 U5PVR 해상도 설정관련 문의가 있어서 몇가지 test를 하고 있습니다.



통상적으로 U5PVR 해상도 설정은 

2160P@60fps 4:2:0 10bit HDR이 기준으로 test를 해 왔습니다.


여기서 영화 재생의 경우, 2160P@30fps 설정을 하게 됩니다

이유는 프레임 튀는 현상을 막기 위합니다. 

(정식 용어가 있는데 잊어 먹었네요 ㅎㅎㅎ)



다른 U5PVR 사용자 분께서 2160P@30fps 해상도 기준으로,

삼성 UN65JS9500F UHDTV에서 4:4:4 10bit 설정이 가능하다고 하시면서

화질 차이에 대한 궁금증을 질의 를 해 주신 내용이 있었습니다. ^^



HDMI 2.0기준으로 2160P@30fps 4:4:4 10bit 설정이 가능하다는 것은 이론적으로 알고 있었는데,

저도 실제 U5PVR에서는 실증 test를 해 본 적이 없었습니다.



지금 사무실에서 test를 하고 있는 LG OLED를 

U5team 사무실로 보내서, LG OLED에서 test는 불가능한 상황입니다.

그래서 스피드테크놀로지 티에나 40inch UHDTV에서 U5PVR을 연결하여 test를 해 보았는데, 

2160P@30fps 4:4:4 10bit  설정이 먹히네요 ^^;;  



기본적으로 티에나 40inch UHDTV는 8bit지원인지라, 

2160P에서는 10bit설정으로는 HDMI 동기화가 될 수가 없는데, 동기화가 되네요 ^^;; 

(물론 1080P 10bit설정은 동작됩니다.)



이는 모든 UHDTV가 이 2160P@30fps 4:4:4 10bit 설정이 가능하다고 보여지지는 않습니다.

기본적으로 UHDTV HDMI동기화에서 이 설정값이 없으면 동기화가 이루어 지지 않기 때문입니다.


또한 HDMI케이블에 따라서도 차이가 있을 수 있다고 판단됩니다.



일단  2160P@30fps 4:4:4 10bit 해상도가 설정이 되긴 했습니다만, 

이에 따라서 U5PVR에서 화질 개선이 있는지는 저도 잘 분간이 가지 않습니다. ^^;;


정확한 것은 2160P@30fps 4:4:4 10bit 영상으로 재생 비교를 해 봐야지,

구분이 가능합니다만, 현재로서는 이런 Demo 영상이 없기 때문에 실제 구분은 하기 어렵다고 판단됩니다.



즉, U5PVR 2160P@30fps 4:4:4 10bit 해상도 설정에서 

2160P@30fps 4:2:0 10bit 영상을 재생 해 보아도 차이의 변화를 느낄 수  없을 것이라는 판단입니다.



그래도 실증 test가 필요로 되는 내용일 것 같아서,

U5PVR을 사용하시는 분들께서는 비교 test를 해 보실 환경이 되시면

해 보시고 각자 의견을 나누어 보았으면 하는 바 입니다. 

 






 
Google+