Best Practices for Developing on Android TV (Google I/O'19)




Be successful building on Android TV with insight into integrations, streaming best practices, UHD support and key libraries to increase velocity, success metrics, and lessons learned along the way. Reach more people on a platform that has grown 2x year over year and has over 4,000 apps in its ecosystem.


Rockchip은 어제 자신의 연례 행사를 통해 과거 업적을 볼 수 있었을뿐만 아니라 새로운 제품 발표로 미래를 엿볼 수있었습니다. 이 회사는 Cortex-A76 및 Cortex-A55 코어, 8K 비디오 디코딩 지원, 4K 사용자 인터페이스 지원, 8nm LP 프로세스를 사용하여 제조 된 NPU 2.0 (Neural Processing Unit)을 특징으로하는 Rockchip RK3588로 다음 단계로 나아갈 준비가되어 있습니다.

프로세서는 "coldfish"의 팁에 따라 4 + 4 다이나믹 IQ 구성에서 8 개의 코어를 가져야하며 새로운 8nm 프로세스는 전력 소비를 40 % 줄이면서 성능을 20 ~ 30 % 증가시킬 것으로 예상됩니다. 대량 생산은 2020 년 1 분기로 예정되어 있습니다.

이 회사는 또한 비디오 인코더 / 디코더 IP로 슬라이드를 보여 주었고 Gen3는 AVS3 또는 H.266 (VVC)을 사용하는 8K 60fps 디코더가있는 유일한 제품이기 때문에 RK3588에 있어야합니다. AV1 구현을 보여주기 때문에 Gen1 디코더와 혼동스럽고 새로운 것도 있어야합니다. 8K 60fps 비디오 인코더도 작동합니다.

Mali-G52 GPU, 4K HDR, USB 3.0, SATA 및 기가비트 이더넷이 장착 된 RK3530 쿼드 코어 Cortex-A55 프로세서는 RK3588이 분명히 이번 쇼의 하이라이트 였지만 Rockchip SoC 포트폴리오를 보완하는 유일한 제품은 아니 었습니다. 2019 년 3 분기에 계획되었습니다.

다른 주목할만한 발표로는 RK2108 Arm Cortex-M4 오디오 칩과 NPU 2.0 AI 가속기가 장착 된 RV1109 듀얼 코어 4K H.264 / H.265 카메라 SoC가 올해 하반기에 출시 될 예정이다.

이 회사는 또한 Internet of Things 애플리케이션을 목표로하고 2019 년 3 분기에 샘플을 제공 할 예정인 802.11 b / g / n WiFi를 갖춘 RK2206 Arm Cortex-M4F 마이크로 컨트롤러를 갖춘 최초의 무선 MCU를 발표했다.


RK3588 8K Arm Cortex-A76/A55 SoC, Rockchip Roadmap to 2020

Rockchip had their annual event yesterday offering a view of past achievements, as well as a glimpse into the future with new products announcements. The



며칠 전에 S905X3, S905Y3 및 S905D3 SoC를 갖춘 Amlogic의 쿼드 코어 Cortex-A55 프로세서 에 대해 썼습니다 . 오늘, 주요 기능과 블록 다이어그램을 포함한 제품 요약을 통해 좀 더 많은 정보를 얻었습니다.

Amlogic S905X3은 하이브리드 OTT / IP 셋톱 박스 (STB) 및 하이 엔드 미디어 박스 애플리케이션 용으로 설계된 고급 애플리케이션 프로세서로 설명됩니다.


Amlogic S905X3 제품 사양 :

  • CPU Sub-system
    • Quad core Arm Cortex-A55 CPU with Armv8-A Neon and Crypto extension, 8-stage in-order full dual issue pipeline, unified system L3 cache
    • Arm Cortex-M3 core for system control processing
    • Optional Arm Cortex-M4 core for always-on processing
    • TrustZone
    • Internal QoS based switching fabrics
  • Optional Neural Network Accelerator – 1.2 TOPS NN inference accelerator supporting TensorFlow and Caffe
  • 3D Graphics Processing Unit – Arm Mali G31MP2 GPU with support for OpenGL ES 3.2, Vulkan 1.0 and OpenCL 2.0 support
  • 2.5D Graphics Processor
    • Fast bitblt engine with dual inputs and single output
    • Programmable raster operations (ROP)
    • Programmable polyphase scaling filter
    • Support for 4:2:0, 4:2:2, and 4:4:4 video formats, and multiple pixel formats (8/16/24/32 bits graphic layer)
    • Fast color space conversion
    • Advanced anti-flickering filter
  • Crypto Engine
    • AES block cipher with 128/265 bits keys
    • TDES block cipher with ECB and CDC modes
    • SM4 block cipher with ECB, CBC, CTR modes
    • Hardware crypto key-ladder operation and DVB-CSA for transport stream encryption
    • TRNG, CRC and SHA-1/SHA-2/HMAC SHA engine
  • Video/Picture CODEC
    • Amlogic Video Engine (AVE) with dedicated hardware decoders and encoders
    • Support multi-video decoder up to 4x 1080p60
    • Support multiple secured video decoding sessions and simultaneous decoding and encoding
    • Video/Picture Decoding
      • VP9 Profile-2 up to 4Kx2K @ 60 fps
      • H.265 HEVC MP-10 @ L5.1 up to 4Kx2K @ 60 fps
      • AVS2-P2 Profile up to 4Kx2K @ 60 fps
      • H.264 AVC HP @ L5.1 up to 4Kx2K @ 30 fps
      • MPEG-4 ASP @ L5, WMV/VC-1, AVS-R16/AVS-R2 JiZhun Profile, MPEG-2, MPEG-1, and RealVideo 8/9/10 up to 1080p60
      • Multiple language and multiple format sub-title video support
      • MJPEG and JPEG unlimited pixel resolution decoding (ISO/IEC-10918)
      • Support JPEG thumbnail, scaling, rotation and transition effects
      • Supports mkv, wmv, mpg, mpeg, dat, avi, mov, iso, mp4, rm, and jpg file formats
    • Video/Picture Encoding
      • Independent JPEG and H.264 encoder with configurable performance/bitrate
      • JPEG image encoding
      • H.265/H.264 video encoding up to 1080p60 with low latency
  • 8th Generation Advanced Amlogic TruLife Image Engine
    • Supports Dolby Vision (optional), HDR10+, HDR10, HLD and Technicolor HDR processing
    • Motion compensated noise reduction, and 3D digital noise reduction for random noise
    • Block noise, mosquito noise, spatial noise, contour noise reduction
    • Motion compensated and motion adaptive de-interlacer
    • Edge interpolation with low angle protection and processing
    • Smart sharpness with Superscalar technology including de-contouring, de-ring, LTI, CTI, de-jaggy, peaking
    • Dynamic non-linear contrast enhancement
    • All dimension multiple regions smart color management including blue/green extension, flesh-tone correction, wider gamut for video
    • 2 video planes and 3 graphics planes hardware composer
    • Independent HDR re-mapping of video and graphic layer
  • Video Input/Output Interface
    • Built-in HDMI 2.1 transmitter including both controller and PHY supporting CEC, Dynamic HDR and HDCP 2.2, 4Kx2K @ 60 Hz max resolution output, ALLM (Auto Low Latency Mode)
    • CVBS 480i/576i standard definition output
    • Support all standard video output formats: 480i/p, 576i/p,. 720p, 1080i/p, 4Kx2K
  • Audio Decoder and Input/Output
    • Supports MP3, AAC, WMA, RM, FLAC, Ogg and programmable with 7.1/5.1 down-mixing
    • Low-power VAD (Voice Activity Detection)
    • Built-in serial digital audio SPDIF/IEC958 input/output and PCM input/output
    • 3x TDM/PCM/I2S ports with TDM/PCM mode up to 384 KHz x 32 bits x 16ch or 96 KHz x 32 bits x 32 ch, and I2S mode up to 384 KHz x 32 bits x 16 ch
    • Digital microphone PDM input with programmable CIC, LPF & HPF, support up to 8 DMICs
    • Built-in Stereo audio DAC
    • Supports concurrent dual audio stereo channel output with combination of analog+PCM or I2S + PCM
  • Memory & Storage Interface
    • 32-bit DRAM memory interface with dual ranks and max 4GB total address space
    • Compatible with JEDEC standard DDR3-2133 / DDR3L-2133 / DDR4-3200 / LPDDR3-2133 / LPDDR4-3200 SDRAM
    • Support SLC/LMC/TLC NAND flash with 60-bit ECC
    • SDSC/SDHC/SDXC card and SDIO interface with 1-bit and 4-bit data bus width supporting up to UHS-I SDR104 mode
    • eMMC and MMC card interface with 1/4/8-bit data bus width supporting spec version 5.0 HS400
    • Support serial 1, 2 or 4-bit NOR flash via SPI
    • Built-in 4k bits One-Time-Programming memory for key storage
  • Network
    • Integrated 10/100/1000M Ethernet MAC with RGMII interface
    • Integrated 10/100M Ethernet PHY interface
    • WiFi & Bluetooth supported via PCIe, SDIO, USB, UART, or PCM
    • Network interface optimized for mixed WiFi and Bluetooth traffic
  • Digital Television Interface
    • One serial and one parallel Transport Stream (TS) input interface with built-in demux processor for connecting to external digital TV tuner/demodulator
    • Built-in PWM, I2C and SPI interfaces to control tuner and demodulator
    • Integrated ISO7816 smart card controller
  • Integrated I/O controllers and interfaces
    • 1x USB XHCI OTG 2.0 port
    • One USB SS and PCIe 2.0 combo port up to 5 Gbps configurable with either:
      • 1x USB 2.0 host port + PCIe
      • 1x USB 3.0 without PCIe
    • Multiple PWM, UART, I2C and SPI interfaces with slave select
    • Programmable IR remote input/output controllers
    • Built-in 10-bit SAR ADC with 4 input channels
    • GPIOs with built-in pull up and pull down
  • System, Peripherals and Misc. Interfaces
    • Integrated general purpose timers, counters, DMA controllers
    • 24 MHz crystal input
    • Embedded debug interface using ICE/JTAG
    • Integrated Power On Reset (POR) module
  • Power Management
    • Multiple internal power domains controlled by software
    • Multiple sleep modes for CPU, system, DRAM, etc..
    • Multiple internal PLLs for DVFS operation
    • Multi-voltage I/O design for 1.8V and 3.3V
    • Power management auxiliary processor in a dedicated always-on (AO) power domain that communicate with an external PMIC
  • Security
    • TrustZone based Trusted Execution Environment (TEE)
    • Secured boot, encrypted OTP, encrypted DRAM with memory integrity checker, hardware key ladder and internal control buses and storage
    • Separated secure/non-secure Entropy true RNG
    • Pre-region/ID memory security control and electric fence
    • Hardware based Trusted Video Path (TVP), video watermarking and secured contents (needs SecureOS software)
    • Secured IO and secured clock
  • Package – FCBGA, 14 x 14mm, RoHS compliant


Cortex-A55 코어는 메모리 벤치 마크에서 Cortex-A53과 비교하여 최대 2 배의 성능 을 제공 하며 동일한 주파수에서 일반적인 작업에 대해 20 ~ 30 %의 성능 향상을 이룬다.

Amlogic S905X3에는 Neural Network Accelerator와 Cortex-M4 코어와 같은 몇 가지 옵션 기능이 있으므로 항상 부품 번호를 알고 있어야하지만 제품 개요에 자세히 나와 있지 않습니다.

Amlogic S905X3 Specifications & Block Diagram

A few days ago, we wrote about upcoming quad core Cortex-A55 processors from Amlogic with S905X3, S905Y3, and S905D3 SoCs. Today, we got a little more

안드로이드8 상태에서 리눅스 펌웨어 구동 성공하고 커널 버전이 올라 개선점을 찾고 있습니다.


차후에 배포하도록 하겠습니다.




미드 레인지 전문 전문 브랜드 인 XGIMI 프로젝터 는 새로운 XGIMI MoGo Pro 를위한 기금 마련을위한 캠페인 인 Microgomance 포털 인 IndieGogo 를 통해 막 시작했습니다 . 또한이 새로운 프로젝터 는 구글 어시스턴트와 Chromecast가 포함 된 구글의 인증을받은 안드로이드 TV 9.0 을 포함함으로써 디자인의 우수성을 입증 했다. 이 프로젝터의 디자인은 매우 신중합니다. 우리가 익숙한 대로이 브랜드에는 3W Harman Kardon 스피커 와 내부 배터리가있어 최대 3 시간의 재생이 가능합니다.


프로젝터 사양 

XGIMI MoGo 프로  프로젝터 포함 DLP 의 해상도가 1920 × 1080  픽셀 의 밝기  250-300 ANSI 루멘을 그동안  XGIMI MoGo의 해상도를 유지 720 × 540 픽셀 210 ANSI의 밝기. 사다리꼴 보정으로 초점 조절이 자동으로 이루어지며 30 " 에서 100" 사이의 화면을 얻을 수 있습니다 .

이 프로젝터는 146x105x94 mm 크기로 무게는 900g 이며 상단에 터치 컨트롤이 있습니다.

연결, 멀티미디어 및 기타  기능

연결 인터페이스 XGIMI MoGo 프로 인  USB 포트, 3.5mm의 오디오 잭 및 콘솔 또는 다른 장치를 연결할 수있는 HDMI 커넥터. 

온칩 프로세서로서 가질 Amlogic T950X2 (S905X2 현재 버전) , 쿼드 코어 ARM 코어 텍스 A53은 1.8GHz의 GPU와 말리 G31 프로세서 도달. RAM은 2GB 이고 내부 저장 장치는 16GB 입니다. 현재 우리는 모든 사양을 가지고 있지는 않지만 WiFi 및 Bluetooth도 포함합니다.

가격 및 가용성

  • 프로젝터 XGIMI MoGo / 프로는 웹 사이트에 예약 할 수 에서 € 266 의 가장 기본적인 버전의 해상도에서 ($ 299) 540 개및 출하 될 예정입니다 2019년 10월 .


XGIMI MoGo Pro un proyector FHD con Android TV 9 certificado por Google

La conocida marca China de proyectores XGIMI especializada en la gama media acaba de lanzar via el portal de microfinaciación IndieGogo una campaña para recaudar fondos para su nuevo XGIMI MoGo Pro…


Android TV 채널 만들기

생방송 TV 프로그램 및 기타 연속 채널 기반 콘텐츠를 보는 것은 TV 경험의 중요한 부분입니다. 사용자는 채널 탐색을 통해 TV에서 프로그램을 선택하고 시청하는 데 익숙합니다. TV 입력 프레임 워크는 TV 프로그래밍 가이드에서 비디오 또는 음악 컨텐트를 게시하기위한 채널을 만듭니다.

참고 : TV 입력 프레임 워크는 Android 시스템 TV 앱의 채널을 만드는 데 OEM에서 사용하기위한 것입니다. Android 5.0 (API 레벨 21)에서 Android 7.1 (API 레벨 25)을 통해서만 지원됩니다. 타사 앱은 Android TV 홈 화면 API를 사용하여 콘텐츠 채널을 구축해야합니다. 자세한 내용  TV 콘텐츠 추천 을 참조하십시오.

TV 입력 프레임 워크는 HDMI 포트 및 내장 튜너와 같은 하드웨어 소스 및 인터넷을 통해 스트리밍 된 비디오와 같은 소프트웨어 소스에서 라이브 비디오 컨텐츠를 수신하고 재생하는 통일 된 방법을 제공합니다.

이 프레임 워크를 통해 개발자는 TV 입력 서비스를 구현하여 라이브 TV 입력 소스를 정의 할 수 있습니다. 이 서비스는 TV 공급자에게 채널 및 프로그램 목록을 게시합니다. TV 장치의 라이브 TV 앱은 TV 공급자로부터 사용 가능한 채널 및 프로그램 목록을 가져 와서 사용자에게 표시합니다. 사용자가 특정 채널을 선택하면, 라이브 TV 앱은 TV 입력 관리자를 통해 연관된 TV 입력 서비스에 대한 세션을 생성하고, TV 입력 서비스에 요청 된 채널을 튜닝하고, 사용자가 제공 한 디스플레이 표면으로 콘텐츠를 재생하도록 지시한다 TV 앱.

그림 1. TV 입력 프레임 워크의 기능적 다이어그램

TV 입력 프레임 워크는 다양한 라이브 TV 입력 소스에 대한 액세스를 제공하고 사용자가 콘텐츠를 검색,보고 및 감상 할 수 있도록 단일 사용자 인터페이스에서 함께 가져올 수 있도록 설계되었습니다. 콘텐츠 용 TV 입력 서비스를 구축하면 TV 장치에서 더 쉽게 액세스 할 수 있습니다.

TV 입력 서비스 샘플 앱을 사용해보십시오 .


TV 입력 서비스 개발시스템 TV 앱과 함께 작동하는 TV 입력 서비스를 개발하는 방법에 대해 알아보십시오.채널 데이터로 작업시스템의 채널 및 프로그램 데이터를 설명하는 방법을 익히십시오.사용자 상호 작용 관리오버레이를 표시하고, 콘텐츠 가용성을 관리하고, 콘텐츠 선택을 처리하는 방법에 대해 알아보십시오.시간 이동 지원TV 입력 서비스에서 시간 이동을 지원하는 방법에 대해 알아보십시오.콘텐츠 레코딩 지원TV 입력 서비스에서 콘텐츠 레코딩을 지원하는 방법에 대해 알아보십시오.


TIF를 사용한 샘플 Android TV 채널 앱 (TV 입력)

이 앱은 TIF (TV Input Framework)를 사용하여 Android TV 용 라이브 TV 채널 앱을 제작하는 방법을 보여줍니다. 샘플은 일단 설치되면 기본 TV 앱 (예 : 라이브 채널 앱)에서 인식되고 실행되는 서비스입니다.


샘플 앱은 하나의 TV 입력으로 구성됩니다. MP4 동영상, HLS 스트림 및 MPEG-DASH 스트림으로 구성된 4 개 채널로 다양한 장르로 구성됩니다. 동영상 파일은 Google Cloud Storage에서 제공됩니다.

참조 및 개발자 가이드

TIF 도우미 라이브러리

이 응용 프로그램은 TIF 도우미 라이브러리를 사용합니다 . 라이브러리의 소스 코드가 library디렉토리에 있습니다. 프로젝트에서이 라이브러리를 사용하려면 디렉토리를 복사하거나 다음과 같은 Gradle 종속성을 사용하십시오.

compile ''

사전 요구 사항


하나 이상의 TV 입력 서비스 또는 HDMI1과 같은 실제 입력이 없으면 라이브 채널 앱이 집 화면의 앱에 표시되지 않습니다.

TV 입력을 설정하려면,

  • 라이브 채널 앱 시작
  • 검색을 클릭하여 채널을 검색하고 추가하십시오.
  • 또는 라이브 채널 앱에서,
    • 최근 채널을 가져 오려면 ENTER를 클릭하십시오.
    • TV 옵션을 입력하려면 아래쪽을 클릭하십시오.
    • 채널 소스를 오른쪽 클릭하고 선택하십시오.
    • 서식있는 입력을 선택하려면 아래쪽을 클릭하고 선택하려면 Enter를 클릭하십시오.
    • 채널 추가를 클릭하여 MP4 동영상, HLS 스트림 및 MPEG-DASH 스트림의 채널을 추가하십시오.
  • 샘플 채널을 시청하려면 간단히 UP과 DOWN을 전환하여 채널을 전환하십시오
  • 채널 소스 -> 서식있는 입력 -> 설정을 방문하여 입력 설정에 대한 모의 옵션을 확인하십시오.

스크린 샷




Apache 2.0 라이센스에 따른 라이센스. 자세한 내용은 LICENSE 파일을 참조하십시오.

기부금을 어떻게 내는가?

CONTRIBUTING.md의 단계를 읽고 따르십시오.


이 샘플에서 사용 된 이미지 / 비디오는 블렌더 재단이 저작권이나 크리에이티브 커먼즈 라이센스하에 공유 한 것입니다.

  • 코끼리의 꿈 : (c) 저작권 2006, 블렌더 재단 / 네덜란드 미디어 아트 인스티튜트 /
  • Sintel : (c) 저작권 Blender Foundation |
  • 눈물의 강철 : (CC) 블렌더 파운데이션 |
  • Big Buck Bunny : (c) copyright 2008, 블렌더 파운데이션 /



Sample Channel App (TV Input Service) on Android TV using TIF - googlesamples/androidtv-sample-inputs  |  Android Developers

Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates.

Develop a TV input service

A TV input service represents a media stream source, and lets you present your media content in a linear, broadcast TV fashion as channels and programs. With a TV input service, you can provide parental controls, program guide information, and content ratings. The TV input service works with the Android system TV app. This app ultimately controls and presents channel content on the TV. The system TV app is developed specifically for the device and immutable by third-party apps. For more information about the TV Input Framework (TIF) architecture and its components, see TV Input Framework.

Create a TV input service using the TIF Companion Library

The TIF Companion Library is a framework that provides extensible implementations of common TV input service features. Use the TIF Companion Library to quickly and easily create your own TV input service that follows best practices for Android TV.

Update your project

To get started using the TIF Companion Library, add the following to your app’s build.gradle file:

compile ''


The TIF Companion Library is not currently part of the Android framework. It is distributed as a Gradle dependency through jcenter, not with the Android SDK. Check jcenter to find the latest version of the tif-companion library.

Declare your TV input service in the manifest

Your app must provide a TvInputService-compatible service that the system uses to access your app. The TIF Companion Library provides the BaseTvInputService class, which provides a default implementation of TvInputService that you can customize. Create a subclass of BaseTvInputService, and declare the subclass in your manifest as a service.

Within the manifest declaration, specify the BIND_TV_INPUT permission to allow the service to connect the TV input to the system. A system service performs the binding and has the BIND_TV_INPUT permission. The system TV app sends requests to TV input services via the TvInputManager interface.

In your service declaration, include an intent filter that specifies TvInputService as the action to perform with the intent. Also declare the service metadata as a separate XML resource. The service declaration, intent filter, and service metadata declaration are shown in the following example:

<service android:name=".rich.RichTvInputService"
<!-- Required filter used by the system to launch our account service. -->
<action android:name="" />
<!-- An XML file which describes this input. This provides pointers to
    the RichTvInputSetupActivity to the system/TV app. -->

android:resource="@xml/richtvinputservice" />


Define the service metadata in a separate XML file. The service metadata XML file must include a setup interface that describes the TV input's initial configuration and channel scan. The metadata file should also contain a flag stating whether or not users are able to record content. For more information on how to support recording content in your app, see TV recording.

The service metadata file is located in the XML resources directory for your app and must match the name of the resource you declared in the manifest. Using the manifest entries from the previous example, you would create the XML file at res/xml/richtvinputservice.xml, with the following contents:

<?xml version="1.0" encoding="utf-8"?>
<tv-input xmlns:android=""
android:setupActivity="" />


Define channels and create your setup activity

Your TV input service must define at least one channel that users access via the system TV app. You should register your channels in the system database, and provide a setup activity that the system invokes when it cannot find a channel for your app.

First, enable your app to read from and write to the system Electronic Programming Guide (EPG), whose data includes channels and programs available to the user. To enable your app to perform these actions, and sync with the EPG after device restart, add the following elements to your app manifest:

<uses-permission android:name="" />
<uses-permission android:name="" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED "/>


Add the following element to ensure that your app shows up in the Google Play Store as an app that provides content channels in Android TV:

android:required="true" />


Next, create a class which extends the EpgSyncJobService class. This abstract class makes it easy to create a job service that creates and updates channels in the system database.

In your subclass, create and return your full list of channels in getChannels(). If your channels come from an XMLTV file, use the XmlTvParser class. Otherwise generate channels programmatically using the Channel.Builder class.

For each channel, the system calls getProgramsForChannel() when it needs a list of programs that can be viewed within a given time window on the channel. Return a list of Program objects for the channel. Use the XmlTvParserclass to obtain programs from an XMLTV file, or generate them programmatically using the Program.Builder class.

For each Program object, use an InternalProviderData object to set program information such as the program's video type. If you only have a limited number of programs that you want the channel to repeat in a loop, use theInternalProviderData.setRepeatable() method with a value of true when setting information about your program.

After you've implemented the job service, add it to your app manifest:

android:exported="true" />


Finally, create a setup activity. Your setup activity should provide a way to sync channel and program data. One way to do this is for the user to do it via the UI in the activity. You might also have the app do it automatically when the activity starts. When the setup activity needs to sync channel and program info, the app should start the job service:


val inputId = getActivity().intent.getStringExtra(TvInputInfo.EXTRA_INPUT_ID)


Use the requestImmediateSync() method to sync the job service. The user must wait for the sync to finish, so you should keep your request period relatively short.

Use the setUpPeriodicSync() method to have the job service periodically sync channel and program data in the background:




The TIF Companion Library provides an additional overloaded method of requestImmediateSync() that lets you specify the duration of channel data to sync in milliseconds. The default method syncs one hour's worth of channel data.

The TIF Companion Library also provides an additional overloaded method of setUpPeriodicSync() that lets you specify the duration of channel data to sync, and how often the periodic sync should occur. The default method syncs 48 hours of channel data every 12 hours.

For more details about channel data and the EPG, see Work with channel data.

Handle tuning requests and media playback

When a user selects a specific channel, the system TV app uses a Session, created by your app, to tune to the requested channel and play content. The TIF Companion Library provides several classes you can extend to handle channel and session calls from the system.

Your BaseTvInputService subclass creates sessions which handle tuning requests. Override theonCreateSession() method, create a session extended from the BaseTvInputService.Session class, and callsuper.sessionCreated() with your new session. In the following example, onCreateSession() returns aRichTvInputSessionImpl object that extends BaseTvInputService.Session:


override fun onCreateSession(inputId: String): Session =
RichTvInputSessionImpl(this, inputId).apply {


When the user uses the system TV app to start viewing one of your channels, the system calls your session's onPlayChannel() method. Override this method if you need to do any special channel initialization before the program starts playing.

The system then obtains the currently scheduled program and calls your session's onPlayProgram() method, specifying the program information and start time in milliseconds. Use the TvPlayer interface to start playing the program.

Your media player code should implement TvPlayer to handle specific playback events. The TvPlayer class handles features like time-shifting controls without adding complexity to your BaseTvInputService implementation.

In your session's getTvPlayer() method, return your media player that implements TvPlayer. The TV Input Service sample app implements a media player that uses ExoPlayer.

Create a TV input service using the TV input framework

If your TV input service can't use the TIF Companion Library, you need to implement the following components:

  • TvInputService provides long-running and background availability for the TV input
  • TvInputService.Session maintains the TV input state and communicates with the hosting app
  • TvContract describes the channels and programs available to the TV input
  • TvContract.Channels represents information about a TV channel
  • TvContract.Programs describes a TV program with data such as program title and start time
  • TvTrackInfo represents an audio, video, or subtitle track
  • TvContentRating describes a content rating, allows for custom content rating schemes
  • TvInputManager provides an API to the system TV app and manages the interaction with TV inputs and apps

You also need to do the following:

  1. Declare your TV input service in the manifest, as described in Declare your TV input service in the manifest.
  2. Create the service metadata file.
  3. Create and register your channel and program information.
  4. Create your setup activity.

Define your TV input service

Figure 1.TvInputService lifecycle.

For your service, you extend the TvInputService class. A TvInputServiceimplementation is a bound service where the system service is the client that binds to it. The service life cycle methods you need to implement are illustrated in figure 1.

The onCreate() method initializes and starts the HandlerThread which provides a process thread separate from the UI thread to handle system-driven actions. In the following example, the onCreate() method initializes the CaptioningManager and prepares to handle the ACTION_BLOCKED_RATINGS_CHANGED and ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED actions. These actions describe system intents fired when the user changes the parental control settings, and when there is a change on the list of blocked ratings.


override fun onCreate() {
= HandlerThread(javaClass.simpleName).apply {
= Handler(handlerThread.looper)
= Handler()
= getSystemService(Context.CAPTIONING_SERVICE) as CaptioningManager


= mutableListOf<BaseTvInputSessionImpl>()
val intentFilter = IntentFilter().apply {
(broadcastReceiver, intentFilter)


See Control content for more information about working with blocked content and providing parental control. See TvInputManager for more system-driven actions that you may want to handle in your TV input service.

The TvInputService creates a TvInputService.Session that implements Handler.Callback to handle player state changes. With onSetSurface(), the TvInputService.Session sets the Surface with the video content. See Integrate player with surface for more information about working with Surface to render video.

The TvInputService.Session handles the onTune() event when the user selects a channel, and notifies the system TV app for changes in the content and content metadata. These notify() methods are described in Control Contentand Handle track selection further in this training.

Define your setup activity

The system TV app works with the setup activity you define for your TV input. The setup activity is required and must provide at least one channel record for the system database. The system TV app invokes the setup activity when it cannot find a channel for the TV input.

The setup activity describes to the system TV app the channels made available through the TV input, as demonstrated in the next lesson, Create and update channel data.

Additional references


Develop a TV input service  |  Android Developers

A TV input service represents a media stream source, and lets you present your media content in a linear, broadcast TV fashion as channels and programs. With a TV input service, you can provide parental controls, program guide information, and content rati


Amlogic S922 프로세서는 2018 년 초 로드맵에 처음 선보였습니다. 그 이후로 Amlogic S922X  S922D 프로세서에 Cortex A73 및 A53 코어와 Arm Mali-G52MP GPU 가 적어도 두 가지 변종이 있음을 알 수 있습니다. 신경망 코 프로세서 지금까지 Amlogic S922X로 발표 된 유일한 하드웨어는 ODROID-N2 SBC 였지만, 대부분의 Amlogic 프로세서는 주로 TV 용으로 설계 되었기 때문에 Amlogic S922X TV 박스가 출시되기 전에는 시간 문제였습니다. 첫 번째 모델 표면은 Android 9.0 OS를 실행하는 Beelink GT1-K "King"TV 상자입니다.

Beelink GT1-K 사양 :

  • SoC - Amlogic S922X hexa-core big.LITTLE 프로세서, 4x Arm Cortex A73 코어 @ 최대 1.8GHz, 2x Arm Cortex A53 코어 @ 1.9GHz, Arm Mali-G52MP GPU @ 846MHz; 12nm 제조 공정
  • 시스템 메모리 - 4GB LPDDR4 RAM
  • 저장 장치 - 64GB eMMC 플래시, 마이크로 SD 카드 슬롯
  • 비디오 출력 - HDMI 2.1 ~ 4K @ 75Hz
  • 비디오 - 최대 60fps의 4K UHD H.265 / VP9 / AVS2 비디오 디코딩을 지원하는 AVE-10 엔진, Dolby Vision, 고급 HDR10, HDR10 +, HLG 및 PRIME HDR 고 동적 범위 지원
  • 오디오 - HDMI, 3.5mm 오디오 잭, 광학 S / PDIF를 통한 디지털 오디오
  • 연결성 - 기가비트 이더넷, 802.11 b / g / n / ac WiFi 5, Bluetooth 4.2
  • USB - 2x USB 3.0 포트, 1x USB 2.0 OTG 포트
  • 전원 공급 장치 - DC 전원 배럴 잭
  • 치수 - TBC

TV 박스에는 전원 어댑터와 HDMI 케이블이 함께 제공되며 자이로 스코프가 달린 에어 마우스 (TBC)가 포함될 수 있습니다.

가격은 아직 작성 시점에 알려지지 않았지만, Beelink GT1-K는 4 월 중순에 출시 될 것으로 예상됩니다.


Beelink GT1-K TV Box Features Amlogic S922X SoC, Android 9.0 OS

Amlogic S922 processor was first shown in roadmaps in early 2018, and since then we know there are at least two variants with Amlogic S922X and S922D


Phicomm N1 안드로이드 7.1 TV 박스는 여러 리눅스 배포판을 지원합니다

필자는 Linux 메인 라인이 지원하는 새로운 하드웨어 플랫폼을보고 싶습니다. 최근 Linux 5.0 changelog 에서 찾은 MapleBoard MP130 SBC 를 다루었 습니다 . 오늘 저는 다른 장치를 살펴 보았습니다. Phicomm N1은 중국 시장을 겨냥한 사용자 인터페이스를 갖춘 안드로이드 7.1을 구동하는 Amlogic S905D 구동 TV 박스이다.

그다지 흥미로운 것은 없지만 Armbian 포럼 의 주제는 다른 저렴한 TV 상자보다 큰 히트 싱크와 여러 개의 USB 하드 드라이브를 연결할 수있는 12V / 2A 전원 공급 장치가 포함되어있어 더 흥미롭게 만들었습니다. 더 중요한 것은 CoreELEC, LibreELEC, Alpine Linux, CentOS, Debian, Deepin, ArchLinux Arm 등을 포함하여 여러 리눅스 기반 배포판 을 배포 하는 중국 사용자들 사이에서 인기 를 얻었습니다.

피컴 N1Phicomm N1 하드웨어 사양 :

  • SoC - ARM Mali-450 GPU를 탑재 한 Amlogic S905D 쿼드 코어 Arm Cortex-A53 프로세서 (1.5GHz)
  • 시스템 메모리 - 2GB DDR3-1866MHz
  • 저장 장치 - 8GB eMMC 플래시 ( KLM8G1GEME )
  • 비디오 출력 - 1x HDMI 2.0a 포트 - 최대 4K @ 60Hz
  • 연결 - 1x 기가비트 이더넷 (RTL8211F), 듀얼 밴드 802.11ac WiFi 5 및 블루투스 4.1 (Raspberry Pi 3B +에서 사용되는 것과 유사한 CYW43455 모듈을 통해)
  • USB - USB 2.0 포트 2 개
  • 전원 공급 장치 - 110-240V - 50 / 60Hz AC 입력, 12V / 2A DC 출력
  • 크기 - 11 x 11 x 4 cm

Phicomm N1 리눅스 TV 박스이론 상으로는 리눅스 배포판을 다른 Amlogic TV 박스로 포팅 할 수 있어야하지만 Phicomm N1을 사용하면 펌웨어 이미지가 제공되므로 설치가 더 쉬워야합니다. 이러한 이미지가 얼마나 잘 지원되는지, 4K 비디오 재생과 같은 모든 기능이 해당 이미지에서 작동하는지 여부는 알 수 없습니다. 에는 중국어를 읽을 수있는 한 몇 가지 실마리가 있어야 하는 긴 토론 스레드가있습니다.

소프트웨어 지원과 힘을 소모하는 전원 공급 장치 옆에는 구성 요소가 다른 TV 상자와 비교하여 적절한 차폐 및 큰 방열판으로 덮여 있습니다.

TV 박스 대형 방열판

파이컴 N1 티 다운

Armbian 포럼에서 장치에 대해 논의한 Armliian 포럼 사용자 인 Bangliang Shen은 상자 당 30 달러와 그의 eBay 상점에서의 Phicomm N1을 판매 할 수 있다고 언급했으나 그곳에서 찾을 수는 없었습니다 . Phicomm "mall"에 1099 RMB . 그것은 대략 $ 164로 개조합니다. 와우! 무슨 일이야? 오, 알았어 ... 제품 페이지 - 영어로! -이 박스는 실제로 "최신 블록 체인 기술을 기반으로 한 스마트 네트워크 연결 스토리지"이며 "유휴 저장 장치 또는 대역폭을 공유하여 Bitcoin으로 교환 할 수있는 DayDay Win (DDW) 디지털 통화를 확보 할 수 있습니다"라고 설명합니다. 이 상자는 2018 년 1 분기에 출시되었으며 당시 Bitcoin 또는 cryptocurrency와 관련된 모든 것이 프리미엄으로 판매 될 수있었습니다 ...

그러나 상점에서 좀 더 살펴보면 파이컴 P1이 똑같은 하드웨어 사양, 리모컨 및 디지털 통화가 전혀없는 것을 발견 할 수있었습니다. 그것은 299 RMB, 또는 약 44.5 미국 달러에 판매 됩니다 . 내가 예상했던 $ 30은 아니지만 그렇게 나쁘지는 않다. 문제는 해외에서 상자를 구입할 수 없을 수도 있다는 것입니다. 업데이트 : Phicomm N1은 중국에서 100 위안 (~ $ 15)에 구입할 수 있습니다. 고정 코멘트보기]

저렴한 10.5 인치 AMOLED 디스플레이 탑재 태블릿 'Alldocube X'를 시도

Alldocube X

 중국 심천 Alldocube는 작년 (2018 년) 8 월에 10.5 인치의 AMOLED 디스플레이를 탑재 한 Android 타블렛 「Alldocube X "를 크라우드 펀딩 사이트 Indiegogo에서 출자를 모집한다고 발표했다. 원래는 같은 해 10 월에 출시 예정 이었지만, Google의 인증 및 후면 커버의 공작 정밀도의 문제로 배송이 지연, 2019 년 1 월 초순에 간신히 출하에 도달했다.

 이번 Alldocube보다 평가 샘플을 보내 왔기 때문에 간단한 평가 보고서를 전달하고 싶다. 본 제품은 일본 국내 무선 관련 기능을 합법적으로 사용하기위한 技適은 받고 있지 않다. 따라서 제품의 테스트는 필자가 1 월 말에 중국에 방문한 오에 행하고있다. 크라우드 펀딩 종료 후 현재는 해외의 EC 사이트에서 판매되며, 가격은 약 300 달러 전후와 스펙으로 저렴한 축에 속했다.

 지금부터 약 5 년 전 소니와 ASUS 등 메이저를 포함한 많은 업체에서 출시되어 큰 성황을 보였다 Android 태블릿이지만, 최근에는 대기업이 수익 중시의 제품 (즉 2in1)에 주력하기 시작했다 관계에서 일본 국내에서 볼 수있는 것은 상당히 적어졌다. 유일하게 열심히하고 있다고 말할 업체는 화웨이와 Amazon (Google Play는 사용할 수 없지만) 정도일 것이다.

 한편 중국 국내에서는 아직 수요가있는 것 같고, 따라서 심천 중소기업은 저렴한 태블릿을 조용하게 제조를 계속 판매를하고있다. 그 중에서도 Alldocube는 중국의 제품 정보 를 보면 알 수 있듯이 태블릿 제조 외곬으로 상당한 실적이있는 업체라고 할 수있다.

 이번 평가 기 때문에 패키지에는 USB AC 어댑터와 USB 케이블, 본체의 3 점 밖에 들어 있지 않고,이 설명은 생략한다. AC 어댑터는 MediaTek 자신의 급속 충전 기술 "Pump Express」에 대응 한 것으로, Shenzhen ACT Industrial 제의"APS-KI018WU-G " 출력은 5V뿐만 아니라 7V / 9V @ 2A 및 12V@1.5A에도 대응하고있다.

 본체가 대응하는 급속 충전은 Pump Express 만 같고, 5V의 USB는 최대 1.5A 남아 (라고해도 USB 표준보다 빠른 것이지만)가된다. Quick Charge 3.0 AC 어댑터는 0.5A의 전류 밖에 충전되지 않고 USB PD 2.0 AC 어댑터에 연결하면 전압 초과 경고했다.

AC 어댑터와 USB Type-A → Type-C 케이블
AC 어댑터는 드물게 MediaTek의 Pump Express

 뒷면 커버는 일체 성형에 이음새가 아니지만, 디스플레이 측의 패널과는 약간의 틈이있는 것이 궁금했다. 대부분은 분사 가공으로 매트 한 질감이지만 가장자리는 반짝 반사하는 경사 컷이 들어가있어 분위기는 꽤 좋다. 덧붙여서 디스플레이의 테두리 색상은 화이트 만이지만, 이것은 Samsung 화이트의 것 밖에 생산하지 않기 때문이다. 시각적으로는 역시 블랙이 望ましかっ했다.

 채용되는 AMOLED 디스플레이는 2,560 × 1,600 (WUXGA)의 것으로, 287dpi의 높은 세밀도를 자랑한다. 또한 색 재현율은 NTSC 커버 율 105 %, DCI-P3 커버율 100 %가 선전하고있는만큼, RGB 어떤 색깔도 발색이 매우 화려하고 밝은. 높은 해상도와 함께 깨어 같은 느낌을 준다. 특히 동영상 콘텐츠의 시청은 전례없는 경험이었다.

 덧붙여서 10.5 인치 AMOLED를 탑재 한 태블릿 제품이 두 번째. 첫 탑재 태블릿은 이제없는 BungBungame의 "KALOS2 '이다. 디스플레이 측은 공통 때문에 본체 크기도 비슷하고 KALOS2의 246.6 × 176 × 6.4mm (폭 × 깊이 × 높이)에 대해 Alldocube X는 244 × 173 × 6.9mm (동). Alldocube X의 폭과 깊이가 2 ~ 3mm이 축소되고있는 것은 뒷면 커버가 일체형이기 때문에 두께가 증가하고있는 것은 지문 센서를 탑재하고 있기 때문일 것이다.

 본체를 옆으로하면 상하 가장자리가 넓고 좌우는 좁다. 양손으로 좌우를 잡고 옆 화면에서 사용하십시오 손바닥이나 손가락이 화면에 닿아 버려, 실수 한 경우가 많았다. 본체 잡는 방법을 궁리하거나 스탠드에 세워 사용하는 것이 바람직하다고 느꼈다.

금속 유니 바디 매끄러운 느낌을 받는다
가장자리는 잘라있어 빛을 강하게 반사하는
좌측면에는 볼륨 버튼과 전원 버튼을 갖춘다
하부에는 아무것도 갖추지 못한
무게는 실측 488g과 공칭 값의 500g보다 약간 가벼웠다
10.5 인치 AMOLED 디스플레이는 KALOS2에 이어 채용
어쨌든 발색이 선명하고 아름다운

 본 기기가 또 다른 특징으로 들고있는 사운드면에서 아사히 전자의 D / A 컨버터 "AK4376A"를 채용하고있다. 이 칩은 32bit / 384kHz 무손실 재생을 지원하며, 총 고조파 왜곡 (THD + N)는 -106dB로되어있다. 실제로 이어폰 (KZ ZSR)를 연결해 보았는데, 불필요한 양념이 전혀되어 있지 않고, 저음에서 고음까지 실수없이 평평한 느낌. 그냥 조용한 환경에서는 아무것도 재생하지 않아도 작은 툭툭가 확인할 수 있었다.

 본 제품은 카메라를 위로하는 일반적인 잡는 방법은 스피커 유닛이 상단에 오는 점이 독특합니다. 스피커 볼륨 너무 충분한 정도인데 최소로 좁혀도 꽤 볼륨이 나오는 것이 걱정되었다. 아마 소프트웨어 튜닝 부족 또는 버그 또는 것이지만, 개선 되었으면하는 곳이다.

 본체 측면의 지문 센서는 홈이 반응은 잘 중지시에서도 거의 순간적으로 복귀한다. 전면 카메라와 후면 카메라는 제공하고 있지만, 화질은 칭찬 할만한 것이 아니라 덤으로 결론 짓는한다.

본체 상단에 스피커가 r 우노는 독특한 것이다
우측면에는 USB Type-C 포트와 3.5mm 스테레오 미니 잭, 지문 센서

 채용되는 프로세서는 MediaTek의 MT8176의 Cortex-A72 듀얼 코어 + Cortex-A53 쿼드 코어 최대 동작 클럭은 2.1GHz. 내장 GPU는 PowerVR GX6250에서 600MHz로 구동한다. 사양으로는 Amazon의 'Fire HD 10 "(2017 년 모델)에 채용되는 MT8173 (Cortex-A72 2 코어 + Cortex-A53 × 2,1.8GHz)의 상위 모델이라고해도 무방하다. 실제 사용감해도 Fire HD 10보다 조금 빠른 정도 다.

 Antutu Benchmark v7.1.4으로 측정 한 결과, 107,148이라는 점수를 기록했다. 성능 적으로는 중급이지만, GPU의 점수가 낮다. 하이 엔드 3D 게임을 실행하려면 다소 역부족 느낌은 부정 할 수 없지만, Web 브라우징이나 동영상 시청 등 평상시라면 문제 없을 것이다. 참고로 메모리는 4GB 스토리지는 64GB와 이것도 평상시 사용하는 태블릿으로는 합격점이다. 참고로 OS는 거의 素の 채의 Android 8.1이되고, 작업에 당황 할 것은 없었다.

Antutu Benchmark v7.1.4 결과는 10 만 개 이상의
거의 소에 Android 8.1이되어 당황하지 않을 것이다

 배터리는 최대 8 시간으로되어있어 다소 부족한 느낌이다. 시도 밝기 50 %에서 2 시간 강의 오프라인 비디오 재생했는데 잔량이 50 %로 나타났다. Web 브라우징이나 동영상 시청도 본체 왼쪽을 살짝 따뜻해 때문에 SoC를 포함하여 약간 소비 전력이 높다는 것을 알 수있다. 그렇지만, 집에 항상두고 사용 분에 불만은 없을 것이다.

 현재 일본 국내에서 정식 판매되고 있지 않지만, Alldocube 일본에 정식 진출을 생각하고있는 것 같고, 미래에 技適과 PSE를 얻을 수도있다. 일본에서 태블릿의 요구는 확실히 존재하기 때문에, 꼭 실현 해 주었으면한다.

바나나 파이 BPI-M4 보드에는 RTD1395 프로세서, M.2 소켓, Raspberry Pi 3B + 폼 팩터가 함께 제공됩니다.

Realtek RTD1395 프로세서는 Zidoo X9 또는 LAKE I Home Cloud 와 같은 HDMI 입력 및 출력을 포함하여 미드 레인지 TV 상자 에있는 RTD1295 / RTD1296 프로세서 의 저가 버전입니다 이 새로운 프로세서는 저가형 Mali-470MP4 GPU와 함께 제공되며 HDMI 입력 및 기본 SATA와 같은 인터페이스를 제거했습니다.

지금까지 우리는 프로세서 주변에 구축 된 하드웨어 플랫폼을 거의 보지 못했지만 SinoVoIP는 Raspberry Pi 3B + 폼 팩터에 이어 Realtek RTD1395 프로세서를 탑재 한 최신 바나나 파이 BPI-M4 보드를 발표했으며 M.2 키 E 소켓 PCIe 2.0 및 USB 2.0 신호를 지원합니다.

바나나 파이 BPI-M4바나나 파이 BPI-M4 사양 :

  • SoC - Mali-470 MP4 GPU가 탑재 된 Realtek RTD1395 쿼드 코어 Arm Cortex-A53 프로세서
  • 시스템 메모리 - 1 GB DDR4 (옵션 2 GB)
  • 스토리지 - 8G eMMC 플래시 (최대 64GB), 최대 256GB의 마이크로 SD 슬롯
  • 비디오 출력 - 최대 1080p (TBC)의 HDMI 2.0 포트 1 개
  • 오디오 - HDMI 포트, 3.5mm 오디오 잭
  • 연결성 - 100 Mbps 이더넷 및 802.11 b / g / n / ac WiFi 5 + Bluetooth 4.2 (RTL8821 모듈을 통해)
  • USB - 4x USB 2.0 호스트 포트, 1x USB 2.0 유형 C 포트
  • 확장
    • PCIe 2.0 및 USB 2.0이있는 M.2 키 E 슬롯
    • UART, I2C, SPI, PWM 또는 전원 공급 장치가있는 40 핀 Raspberry Pi 호환 GPIO 헤더
  • 기타 - 부팅 선택 스위치; 전원 및 활동 LED; 전원, 재설정, Uboot 및 설치 누름 버튼
  • 디버깅 - 직렬 콘솔 액세스를위한 3 핀 디버그 UART 헤더
  • 전원 공급 장치 - USB type-C 포트를 통한 5V / 2A 또는 공식 Raspberry Pi PoE HAT를 사용하는 PoE .
  • 크기 - 92x60mm; 참고 : Raspberry Pi 3B +는 85 x 56mm를 측정하지만 SinoVoIP는 커넥터의 치수를 포함하고있는 것으로 보입니다.
  • 무게 - 48 그램

Realtek RTD1395 SBC이 회사는 이제 Android 8.1을 사용하여 게시판을 전시 하지만 사용 된 실제 배포판의 이름을 지정하지 않고도 Linux OS가 사양에 나열됩니다. 위키 과정에서 여전히 아주 많이, 만 소프트웨어 부분에 대한 일부 하드웨어에 대한 정보 만 자리가 포함되어 있습니다.

여러분 중 일부는 SinoVoIP가 고속 이더넷만을 포함하기로 결정한 이유에 대해 궁금해 할 것입니다. 이에 대한 답은 아래의 RTD1395 블록 다이어그램에서 확인할 수 있습니다.이 칩에는 패스트 이더넷 PHY 및 MAC이있는 IP 블록과 기가비트 이더넷 MAC이있는 IP 블록이 포함되어있어 패스트 이더넷 경로를 통해 하나의 이더넷 트랜시버 칩을 저장합니다.

Realtek RTD1395 블록 다이어그램

보드 사양의 또 다른 이상한 점은 HDMI 포트가 최대 1080p 만 지원한다는 것입니다. RTD1395 프로세서에는 4K @ 60Hz 출력이 가능한 HDMI 2.0 트랜스미터와 4K H.264 / 30fps, H.265 / 75fps 및 VP9 / 60fps 비디오 프로세싱 유닛이 함께 제공되므로 실수 일 수 있습니다.

보드가 언제 나올지는 불투명하지만, BPI-M4 가격은 다음 주까지 알려질 것이라고 Banana Pi에게 알려 주었다.

+ Recent posts