Rockchip RK3399Pro SoC, 인공 지능 응용 분야에 2.4 TOPS 신경망 처리 장치 통합
Rockchip RK3399 (일명 OP1) SoC는 육각형 코어 Arm Cortex A72 / A53 프로세서, Mali-T860MP4 GPU, 4K 비디오 디코딩 지원, USB 3.0 및 PCIe와 같은 고속 인터페이스 및 기가비트 이더넷을 통해 2016 년에 출시되었습니다. 이 프로세서는 Chromebook , TV 박스 , 개발 보드 및 기타 장치에 있습니다.
이 회사 는 CES 2018에서 프로세서의 업그레이드 된 "프로"버전을 발표 했습니다. Rockchip RK3399Pro는 이전 모델과 거의 동일한 기능을 갖추고있는 것으로 보이지만 인공 지능 및 심층 기능을 위해 최대 2.4 TOPS를 제공하는 신경망 처리 장치 (NPU) 학습 애플리케이션.
RK3399Pro의 전형적인 Deep Neural Network Inception V3, ResNet34 및 VGG16 모델의 컴퓨팅 성능은 기존 솔루션에 비해 GPU 가속을 사용하여 구현 된 AI 솔루션보다 거의 1 백 배나 향상된 것으로 나타났습니다.
RK3399Pro NPU는 8 비트 및 16 비트 연산을 지원하며 OpenVX 및 TensorFlow Lite / AndroidNN API를 비롯한 다양한 AI 소프트웨어 프레임 워크 및 API와 호환되며 Caffe / TensorFlow 모델을 처리 할 수있는 인공 지능 소프트웨어 도구와 함께 제공됩니다. 개발 속도를 높이기 위해 RK3399Pro 하드웨어 레퍼런스 디자인을 제공 할 수도 있지만 세부 사항은 제공되지 않았다.
[ 업데이트 : 위의 표에서 RK3399Pro 번호를 확인하는 중국어로 된 몇 가지 세부 정보입니다. 출처 : China.com
Android 휴대 전화의 많은 앱이 동시에 오디오를 재생할 수 있습니다. 안드로이드 운영 체제는 모든 오디오 스트림을 함께 믹싱하는 반면, 여러 애플 리케이션이 동시에 오디오를 재생할 때 사용자에게 매우 혼란을 줄 수 있습니다. 이로 인해 사용자는 휴대 전화에서 불만족스러워집니다. 좋은 UX를 제공하기 위해 안드로이드가 제공하는 API 응용 프로그램을 공유 할 수 있습니다 오디오 포커스를 하나의 응용 프로그램은 한 번에 오디오 초점을 저장할 수있는 곳을.
이 기사 시리즈의 목적은 오디오 포커스가 무엇인지, 좋은 미디어 UX를 제공하는 것이 중요한 이유 및 사용 방법을 심층적으로 이해하는 것입니다. 이것은 다음 세 가지 시리즈의 첫 번째 부분입니다.
훌륭한 미디어 시민이되는 것의 중요성과 가장 일반적인 Audio Focus 사용 사례 ( 이 기사 )
오디오 포커스는 협업적이고 앱에 의존하여 오디오 포커스 가이드 라인을 준수합니다. 시스템은 규칙을 시행하지 않습니다. 앱이 오디오 포커스를 잃은 후에도 계속 큰 소리로 재생하고 싶다면 아무 것도이를 방지 할 수 없습니다. 그러나 사용자가 휴대 전화에서 사용하기에 좋지 않은 환경에 빠지게되고 이러한 방식으로 오작동하는 앱을 제거 할 수있는 좋은 기회가 생깁니다.
다음은 오디오 포커스가 작용하는 몇 가지 시나리오입니다. 사용자가 앱을 실행하고 오디오를 재생한다고 가정합니다.
앱에서 오디오를 출력해야하는 경우 오디오 포커스를 요청해야합니다. 포커스가 부여 된 후에 만 사운드가 재생되어야합니다.
사용 사례 1 - 앱에서 오디오를 재생하는 동안 사용자가 다른 미디어 플레이어 앱을 시작하고 해당 앱에서 재생을 시작합니다.
앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?
다른 미디어 앱이 오디오 재생을 시작하면 오디오를 재생하는 앱과 겹칩니다. 사용자가 어느 앱에서든 오디오를 제대로들을 수 없기 때문에 결과적으로 UX가 좋지 않습니다.
오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?
다른 미디어 앱이 재생을 시작하면 영구적 인 오디오 포커스를 요청합니다. 시스템에서 승인하면 재생이 시작됩니다. 사용자가 오디오를 다른 미디어 앱에서만들을 수 있도록 재생을 중지하여 앱에서 영구적 인 오디오 포커스 손실에 응답해야합니다.
이제 사용자가 앱에서 재생을 시작하면 앱에서 영구적 인 오디오 포커스를 다시 요청합니다. 앱이 오디오 재생을 시작하면이 포커스가 부여됩니다. 다른 앱은 재생을 중지하여 영구적 인 오디오 포커스 손실에 응답해야합니다.
사용 사례 2 - 앱이 오디오를 재생하는 동안 수신 전화가 도착합니다.
앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?
휴대 전화가 울리기 시작하면 사용자는 벨소리 장치 외에도 앱의 오디오를 듣게됩니다. 이는 좋은 UX가 아닙니다. 통화 거부를 선택하면 오디오가 계속 재생됩니다. 통화를 수락하기로 선택하면 오디오가 전화기 오디오와 함께 재생됩니다. 호출이 끝나면 앱이 자동으로 재생을 재개하지 않으며 이는 좋은 UX가 아닙니다.
오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?
전화벨이 울리면 (사용자가 아직 응답하지 않은 경우) 앱은 오리 옵션 (전화 앱에서 요청하기 때문에)과 일시적인 오디오 포커스 손실에 응답해야합니다. 볼륨을 약 20 % ( 더킹 이라고 함 )로 줄이거 나 재생을 모두 일시 중지 하여 응답해야 합니다 (Podcast 또는 다른 음성 단어 유형의 앱인 경우).
사용자가 통화를 거절하면 앱에서 볼륨을 복원하거나 재생을 다시 시작하여 오디오 포커스의 이득에 반응해야합니다.
사용자가 전화를 수락하면 시스템에서 오디오 포커스 손실을 보냅니다 ( 오리 옵션 없음 ). 앱에서 응답으로 재생을 일시 중지해야합니다. 통화가 끝나면 앱은 최대 볼륨으로 오디오 재생을 다시 시작하여 오디오 포커스를 얻을 수 있습니다.
개요
앱에서 오디오를 출력해야하는 경우 오디오 포커스를 요청해야합니다. 포커스가 부여 된 후에 만 사운드가 재생되어야합니다. 그러나 오디오 포커스를 얻은 후에는 앱에서 오디오 재생을 완료해야 오디오 포커스를 유지할 수 있습니다. 다른 앱에서 오디오 포커스를 유지하기 위해 포커스를 요청할 수 있습니다. 이 경우 앱에서 재생을 일시 중지하거나 볼륨을 낮추어 사용자가 새로운 오디오 소스를 더 쉽게들을 수있게해야합니다.
앱에서 오디오 포커스가 작용하는 다른 사용 사례에 대해 자세히 알아 보려면 이 연재 의 두 번째 기사를 읽어보세요 .
이 시리즈의 첫 번째 기사에서는 미디어 앱의 UX에 오디오 포커스가 중요한 경우에 발생할 수있는 가장 일반적인 사용 사례 두 가지를 다루었습니다. 이 기사에서는 오디오 앱의 동작을 세부적으로 조정할 수 있도록 앱에서 요청할 수있는 오디오 포커스 유형에 대한 개념을 소개합니다.
사용 사례 1 - 다른 앱이 오디오를 재생하는 동안 백그라운드에서 실행되는 탐색 앱이 단계별 안내를 제공합니다.
앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?
네비게이션 방향과 음악이 겹쳐서 사용자에게 혼란을줍니다.
오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?
내비게이션 앱이 다음 방향을 말할 때 앱이 일시적인 오디오 포커스 손실 (덕킹 앱에 의해 요청되기 때문에)에 응답해야합니다.
이 일시적인 오디오 포커스 손실에 응답하기 위해 앱을 오리 (또는 볼륨을 약 20 %로 낮추어야 함)해야합니다. 앱에서 오디오 북, Podcast 또는 음성 단어를 재생하는 경우는 예외입니다.이 경우 재생을 일시 중지해야합니다.
길 찾기가 끝나면 내비게이션 앱이 오디오 포커스를 포기하고 앱에서 다시 얻게됩니다. 또한이 포커스 획득에 대한 응답으로 볼륨을 원래 수준으로 복원해야합니다.
사용 사례 2 - 사용자가 전화 통화 도중 게임을 실행합니다 (오디오를 재생 함).
앱에서 오디오 포커스를 처리하지 않으면 어떻게됩니까?
사용자는 음악과 전화 대화가 겹쳐서 좋지 않은 경험을하게됩니다.
오디오 포커스를 처리하는 앱의 경우 어떻게해야합니까?
Android O에는 지연된 오디오 포커스 게인 이라는 오디오 포커스 기능이 있습니다.이 기능 은 바로 그런 시나리오를 위해 만들어졌습니다. 예를 들어, 사용자가 전화 통화 중 시작하고, 오디오를 듣지 않고 계속 놀고 싶어하는 게임이 있지만 통화가 끝나면 게임에서 오디오를 듣고 싶습니다.
앱이 이것을 지원하고 사용자가 전화 통화 중 (일시적인 오디오 포커스를 획득 한 상태)에 오디오를 재생하려고하면 다음 두 가지 일이 발생합니다.
앱에서 영구적 인 오디오 포커스를 요청하면 고정되어있어 포커스 부여가 거부됩니다. 휴대 전화 앱은 이미 일시적인 오디오 포커스를 획득했습니다. 앱이 재생을 시작하면 안됩니다 (실제로는 나중에 오디오 포커스가 부여됩니다). 그러나 앱이 게임 인 경우 오디오없이 계속 작동 할 수 있습니다.
통화가 끝나면 앱에 오디오 포커스 게인 이 부여됩니다 . 이 보조금은 초기 요청이 이루어진 후 (사용자가 전화 통화를하는 동안) 일정 기간 지연됩니다. 과도기적 손실 후에 오디오 포커스를 얻은 후에도 같은 방식으로 처리 할 수 있습니다. 이 경우 오디오 재생이 시작됩니다.
Oreo 이전의 Android 버전은 지연된 오디오 포커스 게인을 지원하지 않습니다 . 이 버전에서 사용자가 전화 통화 중에 오디오 재생을 시작하려고하면 오디오 포커스 요청이 허용되지 않고 전화가 끊긴 후에도 재생이 시작되지 않습니다.
사례 3 - 탐색 앱 또는 오디오 알림 또는 알림을 생성하는 앱
짧은 기간 동안 오디오를 버스트로 생성하는 앱을 제작하는 경우 좋은 UX를 사용자에게 제공하기 위해서는 오디오 포커스가 매우 중요합니다. 이를 수행하는 앱의 예로 알림 소리 또는 미리 알림 소리가 생성됩니다. 또는 백그라운드에서 방향을 전환하여 음성 회선을 생성하는 앱.
앱이 백그라운드에서 실행 중이며 오디오를 생성하려고한다고 가정 해 보겠습니다. 사용자가 음악이나 Podcast를 듣고 있으며 앱에서 짧은 시간 동안 오디오를 생성합니다.
앱에서 오디오를 생성하기 전에 일시적인 오디오 포커스 (오리 옵션 포함)를 요청해야합니다. 오디오를 재생할 때만 포커스가 부여되었을 때만. 그리고 잘 작동하는 음악 앱은 오디오 포커스와 오리의 일시적인 손실을 존중해야합니다. 다른 앱이 팟 캐스트 앱인 경우 재생을 다시 시작하기 위해 오디오 포커스가 회복 될 때까지 일시 중지하는 것이 좋습니다. 오디오 포커스를 요청하지 않으면 사용자는 자신의 음악이나 Podcast 및 앱의 오디오를 동시에 듣게됩니다.
유스 케이스 4 - 음성 녹음기 앱 또는 음성 인식 앱
시스템 또는 다른 앱이 소리 (알림 또는 기타 미디어 재생)를하지 않아야하는 일정 기간 동안 오디오를 녹음해야하는 앱을 제작하는 경우 좋은 UX를 제공하려면 오디오 포커스를 처리하는 것이 중요합니다. 이를 수행하는 앱의 예로는 음성 메모 녹음 앱 또는 음성 인식 앱이 있습니다.
앱에서 일시적이고 독점적 인 오디오 포커스를 요청해야합니다. 시스템에서이 권한을 부여한 경우 시스템에서 생성 된 다른 소리가 녹음을 오염시키지 않는다는 것을 알면서 오디오 녹음을 시작할 수 있습니다. 이 녹음 기간 동안 다른 앱이 오디오 포커스를 요청하면 거부 될 것입니다. 사용자가 녹음을 마쳤 으면 시스템에서 소리를 정상적으로 재생할 수 있도록 오디오 포커스를 포기해야합니다.
개요
앱에서 오디오를 출력해야하는 경우 오디오 포커스를 요청해야하며 요청할 수있는 다양한 유형의 포커스가 있어야합니다.
포커스가 부여 된 후에 만 사운드가 재생되어야합니다. 그러나 오디오 포커스를 얻은 후에는 앱에서 오디오 재생을 완료해야 오디오 포커스를 유지할 수 있습니다.
다른 앱에서 오디오 포커스를 유지하기 위해 포커스를 요청할 수 있습니다. 이 경우 앱에서 재생을 일시 중지하거나 볼륨을 낮추어 (더킹) 사용자가 새로운 오디오 소스를 더 쉽게들을 수있게해야합니다.
Android O에서 앱이 요청할 때 오디오 포커스를 얻을 수없는 경우 시스템에서 앱을 사용할 수있게되면 (지연된 포커스) 앱에 제공 할 수 있습니다.
앱에서 오디오 포커스를 구현하는 방법에 대해 자세히 알아 보려면 이 연재 의 마지막 기사를 읽으십시오 .
Android O 이상에서는 AudioFocusRequest객체 를 만들어야 합니다 (a 사용 builder). 그리고이 객체에서 앱이 오디오 포커스를 획득하는 데 필요한 기간을 지정해야합니다. 다음 코드 스 니펫은 시스템에서 오디오 포커스를 영구적으로 획득 할 의사를 선언합니다.
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 }
Android N 및 이전 버전 AudioFocusRequest에서는 아래와 같이 객체를 사용하지 않고이 의도를 선언 할 수 있습니다. 여전히 구현해야합니다 AudioManager.OnAudioFocusChangeListener. 위의 스 니펫과 동일한 코드가 있습니다.
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 {
@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; } } }
다른 앱이 일시적인 오디오 포커스를 요청하고 재생이 일시 중지되는 대신 (일시 중지하는 대신) 사용자가 재생 일시 중지를 시작하면 앱이 다르게 작동해야합니다. 사용자가 재생 일시 중지를 시작하면 앱에서 오디오 포커스를 포기해야합니다. 그러나 일시적인 오디오 포커스 손실에 대한 응답으로 앱이 일시 중지 된 경우 오디오 포커스를 포기해서는 안됩니다. 이것을 설명하기위한 몇 가지 유스 케이스가 있습니다.
백그라운드에서 오디오를 재생하는 오디오 재생 앱이 있다고 가정 해 보겠습니다.
사용자가 재생을 누르면 앱에서 영구적 인 오디오 포커스를 요구합니다. 시스템에서 오디오 포커스를 부여 받았다고 가정 해 봅시다.
이제는 홈 버튼을 길게 누르면 Google 길잡이가 시작됩니다. Assistant는 일시적인 오디오 포커스를 요청합니다.
시스템이 지원이 부여되면, 당신의 OnAudioFocusChangeListener얻을 것이다 AUDIOFOCUS_LOSS_TRANSIENT이벤트를. Assistant에서는 오디오를 녹음해야하므로 여기에서 재생을 일시 중지합니다.
길잡이가 완료되면, 그것의 오디오 사용을 포기합니다, 당신의 응용 프로그램은 부여됩니다 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다음과 같이.
앱의 오디오 재생이 완료되면 전화로 오디오 포커스를 포기해야합니다 AudioManager.abandonAudioFocus(…). 이전 단계에서는 사용자가 재생을 일시 중지했을 때 오디오 포커스를 포기하는 앱의 상황을 들었지만 다른 앱이 일시적으로 중단했을 때 오디오 포커스를 유지하는 앱이있었습니다.
코드 샘플
앱에서 사용할 수있는 요점
이 GitHub 요지 에는 앱에서 사용할 수있는 오디오 포커스 코드를 다루는 3 개의 클래스 가 있습니다.
구입할 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 베타도 제공됩니다.
지원 포럼-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를 사용하려는 경우 사용자의 요구에 더 잘 맞는 다른 장치가 있어야합니다.
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 스토어에서 사용할 수있는 것은 아닙니다.
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 개 또는 대안 목록에 포함되어야한다고 생각한다면 자유롭게 의견을 말하십시오.
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.
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 \"TheIncredibles\"
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:
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.
importstatic android.support.v4.content.IntentCompat.EXTRA_START_PLAYBACK;publicclassSearchableActivityextendsActivity{@Overrideprotectedvoid onCreate(@NullableBundle 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.
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:
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.
publicclassMyMediaSessionCallbackextendsMediaSessionCompat.Callback{privatefinalPlaybackTransportControlGlue<?> mGlue;publicMediaSessionCallback(PlaybackTransportControlGlue<?> glue){
mGlue = glue;}@Overridepublicvoid onPlay(){Log.d(TAG,"MediaSessionCallback: onPlay()");
mGlue.play();
updateMediaSessionState(...);}@Overridepublicvoid onPause(){Log.d(TAG,"MediaSessionCallback: onPause()");
mGlue.pause();
updateMediaSessionState(...);}@Overridepublicvoid onSeekTo(long position){Log.d(TAG,"MediaSessionCallback: onSeekTo()");
mGlue.seekTo(position);
updateMediaSessionState(...);}@Overridepublicvoid onStop(){Log.d(TAG,"MediaSessionCallback: onStop()");// Handle differently based on your use case.}@Overridepublicvoid onSkipToNext(){Log.d(TAG,"MediaSessionCallback: onSkipToNext()");
playAndUpdateMediaSession(...);}@Overridepublicvoid 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.
참고 : 추천 채널은 Android 8.0 (API 레벨 26) 이상에서만 사용할 수 있습니다. Android 8.0 (API 레벨 26) 이상에서 실행되는 앱에 대한 권장 사항을 제공하려면이 코드를 사용해야합니다. 이전 버전의 Android에서 실행되는 앱에 대한 권장 사항을 제공하려면 앱에서 추천 행을 대신 사용해야합니다 .
홈 스크린 UI
앱은 새로운 채널을 만들고 채널에서 프로그램을 추가, 제거 및 업데이트하고 채널에서 프로그램의 순서를 제어 할 수 있습니다. 예를 들어 앱은 '새로운 기능'이라는 채널을 만들고 새로 사용 가능한 프로그램에 대한 카드를 보여줄 수 있습니다.
앱은 채널이 홈 화면에 표시되는 순서를 제어 할 수 없습니다. 앱이 새 채널을 만들면 홈 스크린이 채널 목록의 맨 아래에 채널을 추가합니다. 사용자는 채널을 재정렬, 숨기기 및 표시 할 수 있습니다.
다음 채널보기
홈 화면에 나타나는 첫 번째 채널에는 '다음보기'라는 라벨이 지정됩니다. 시스템은이 채널을 생성하고 유지 관리합니다. 앱에서이 채널을 이동, 제거 또는 숨길 수 없습니다. 이 채널에 프로그램을 추가 할 수 있습니다. 예를 들어 사용자가 재미 있다고 표시하거나 중간에 시청을 중단 한 프로그램 또는 사용자가보고있는 콘텐츠와 관련된 프로그램 (예 : 프로그램의 다음 시즌 또는 다음 에피소드) .
앱 채널
앱에서 만드는 채널은 모두 다음 라이프 사이클을 따릅니다.
사용자가 앱의 채널을 검색하여 홈 화면에 추가하도록 요청합니다.
앱이 채널을 생성하고 채널에 추가합니다 TvProvider(이 시점에서는 채널이 표시되지 않음).
앱이 시스템에 채널을 표시하도록 요청합니다.
시스템에서 사용자에게 새 채널을 승인하도록 요청합니다.
새 채널이 홈 화면의 마지막 행에 나타납니다.
기본 채널
앱에서 사용자가 홈 화면에 추가 할 수있는 모든 채널을 제공 할 수 있습니다. 사용자는 일반적으로 홈 스크린에 나타나기 전에 각 채널을 선택하고 승인해야합니다. 모든 앱에는 하나의 기본 채널 을 만들 수있는 옵션이 있습니다. 기본 채널은 홈 화면에 자동으로 나타나기 때문에 특별합니다. 사용자는 명시 적으로 요청할 필요가 없습니다.
선결 요건
Android TV 홈 화면은 Android TvProviderAPI를 사용하여 앱에서 만드는 채널과 프로그램을 관리합니다. 공급자의 데이터에 액세스하려면 앱의 매니페스트에 다음 권한을 추가하십시오.
앱에서 만드는 첫 번째 채널이 기본 채널이됩니다. 기본 채널이 홈 화면에 자동으로 나타납니다. 사용자가 만든 다른 모든 채널은 홈 화면에 나타나기 전에 사용자가 선택하고 수락해야합니다.
채널 만들기
앱이 포 그라운드에서 실행될 때만 새로 추가 된 채널을 표시하도록 시스템에 요청해야합니다. 이렇게하면 사용자가 다른 앱을 실행하는 동안 채널 추가 승인 대화 상자가 앱에 표시되지 않습니다. 백그라운드에서 실행 중일 때 채널을 추가하려고하면 활동의 onActivityResult()메소드가 상태 코드를 반환합니다 RESULT_CANCELED.
채널을 만들려면 다음 단계를 따르십시오.
채널 빌더를 만들고 속성을 설정하십시오.
Channel.Builder builder =newChannel.Builder(); // Every channel you create must have the type `TYPE_PREVIEW` builder.setType(TvContractCompat.Channels.TYPE_PREVIEW) .setDisplayName("Channel Name") .setAppLinkIntentUri(uri);
채널 유형은이어야합니다 TYPE_PREVIEW. 필요에 따라 더 많은 속성 을 추가하십시오 .
제공자에게 채널을 삽입하십시오.
Uri channelUri = context.getContentResolver().insert( TvContractCompat.Channels.CONTENT_URI, builder.build().toContentValues());
채널에 프로그램을 나중에 추가하려면 채널 ID를 저장해야합니다. 반환 된 URI에서 채널 ID를 추출합니다.
long channelId =ContentUris.parseId(channelUri);
채널 로고를 추가해야합니다. 용도 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 여야하며 불투명해야합니다. 원형 마스크 아래에 표시됩니다.
기본 채널 만들기 (선택 사항) :
앱이 첫 번째 채널을 만들면 기본 채널로 만들어 사용자 작업없이 바로 홈 화면에 나타낼 수 있습니다 .
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를 지정하십시오.
시스템은 사용자에게 채널 승인을 요청하는 대화 상자를 표시합니다. 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홈 화면이 사용자 상호 작용을 위해 보내는 모든 것에 대한 인 텐트 필터를 만들어야합니다 . 예 :
앱은 기본 채널을 삽입하고 가능한 한 빨리 사용자에게 콘텐츠를 제공해야합니다. 앱을 설치 한 후 시스템이 전송 BroadcastReceiver하는 android.media.tv.action.INITIALIZE_PROGRAMS"wakeup"인 텐트를 수신 하는 장치 를 추가하여이 작업을 수행 할 수 있습니다 . 드물 긴하지만 사용자가 앱을 시작하면 앱에서 '깨우기'브로드 캐스트를 수신 할 수 있습니다. 코드에서 기본 채널을 두 번 이상 추가하면 안됩니다.
앱이 포 그라운드에 있지 않고 채널이나 프로그램을 업데이트해야하는 경우에는 JobScheduler을 사용 하여 작업을 예약하십시오 ( JobScheduler 및 JobService 참조 ).
앱이 오작동하는 경우 시스템에서 앱의 제공자 권한을 취소 할 수 있습니다 (예 : 데이터로 제공자를 지속적으로 스팸하는 경우). 보안 예외를 처리하려면 try-catch 절을 사용하여 공급자에 액세스하는 코드를 래핑해야합니다.
프로그램 및 채널을 업데이트하기 전에 공급자에게 데이터를 업데이트하고 조정해야하는 데이터를 쿼리하십시오. 예를 들어 사용자가 UI에서 제거하려는 프로그램을 업데이트 할 필요가 없습니다. 기존 데이터를 쿼리 한 다음 채널 승인을 요청한 후 공급자에 데이터를 삽입 / 업데이트하는 백그라운드 작업을 사용하십시오. 앱이 시작될 때와 앱이 데이터를 업데이트해야 할 때마다이 작업을 실행할 수 있습니다.
지난 주말 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에서 보입니다.
Google I / O 2017 에서 Android TV 홈 화면의 재 설계를 발표 했습니다. 추천 행 개념을 확장하여 각 앱이 홈 화면에서 자체 행 (또는 여러 행)의 콘텐츠를 가질 수 있도록했습니다. 새로운 홈 화면이 출시 된 이후 Android Oreo에 대한 새로운 추천 채널이 다양한 앱에서 채택되었습니다.
새로운 채널을 사용하여 고품질 권장 사항이 부상하는 앱이 점점 더 많아지면서 Android O의 새로운 홈 화면에 있는 기존 권장 행 은 내년에 단계적으로 사라집니다.
현재 앱이 레거시 알림 기반 API로 추천을 만들면 해당 앱의 채널에 콘텐츠가 추가됩니다. Android N (또는 그 이하)에서 업그레이드 할 때 권장되는 콘텐츠가있는 경우 채널이 이미 존재할 수 있습니다. 앱 채널이없는 경우 자동으로 생성됩니다. 두 경우 모두 채널에서 프로그램을 추가하거나 제거 할 수는 없지만 채널을 이동, 숨기기 및 표시 할 수는 있습니다. 앱이 새 API를 사용하여 자체 채널을 추가하기 시작하면 시스템에서 자동 생성 채널을 삭제하고 앱이 콘텐츠 표시를 제어합니다.
내년에는 채널 자동 생성을 단계적으로 중단 할 예정입니다. 각 앱의 기존 권장 사항에 대해 하나씩 여러 채널을 생성하는 대신 모든 기존 권장 사항에 대해 하나의 채널을 삽입 합니다. 이 채널은 채널 목록 하단에 나타납니다. 사용자가 이동하거나 제거 할 수 있습니다. 사용자가 Android O로 업그레이드하면 Android N (및 그 이하)의 이전 추천 행이 홈 화면 하단의 채널이됩니다.
홈 화면의 새 채널에 콘텐츠를 게시하도록 앱을 업데이트하지 않은 경우 시작하려면 설명서 ,코드 랩 및 샘플 을 살펴보십시오.
우리는 홈 스크린의 새로운 변화를 이용하는 점점 더 많은 앱을 기대합니다. 의견을 보내 주시면 G + 의 Android TV 개발자 커뮤니티 를 방문하여 의견을 보내주세요 .
3840 x 2160@60fps, HEVC Profile1, 10bit, BT2020, HDR10 Suppoort
Codec License
none, MP2 / VC-1 (Purchase separately)
include MP2 / Dolby AC3
SATA port
none
1EA with HDD power connector (2.5inch HDD / 3.5inch HDD support)
USB 2.0 Port
4x USB 2.0 Ports
2x USB 2.0 Ports
USB 3.0 Port
none
1x USB 3.0 Ports
Media Center
Blu-ray ISO, File folder Direct to Play, PQ Engine, 3D Subtitle, Post wall, Blu-ray Navigation (Menu) support
Input
none
IR / Mic input support
Boradcast Tuner
none
ATSC 2.0 Tuner Slot (ATSC 2tuner Support)
Support App
Android : Netflix HD(1080p) / 4K, Youtube 4K@60fps, Google Move, Google Music AoL (Andorid over Linux) : Torrent server, tvheadend, MiniDLNA Server etc..
Power
5V/2.5A
12V 2A (2.5inch HDD) 12V3A (3.5inch HDD)
WiFi / BT 동글은 Sample을 입수하여 test를 진행하고 있습니다.
아직 U5PVR에 Sample 동글을 꼽아서는 인식을 하지 않았고 (SW이슈),
PC에 꼽아서는 Realtek 8828U WiFi와 BT인식은 성공하였습니다.
3. 개발 일정
2018년 구정전까지 알파 test 샘플보드 생산하여 기본동작 test를 진행 할 예정입니다.