KLive App 소개


KLive App

다운로드 :

klive와 별 상관이 없는데 딱히 명명할만게 생각나지 않아 KLive로 했습니다. klive-server를 설치 안 하시더라도 이 글을 보시고 앱만 설치하셔서 테스트 해보시면 흥미로운 점이 생기실겁니다.

이 앱은 구글이 제공하는 샘플 앱을 조금 수정한 수준으로 가급적 원 기능은 그대로 살리고 klive-server와의 연동을 위한 부분만 추가 작성되었습니다. (소개 해드리고 있긴 하지만 제가 안드로이드 코드는 처음이라 아무것도 모릅니다;;)

TV Input Service App

TV Input Service는 시스템 앱인 Live Channels에 Channel sources를 공급해주는 서비스 앱으로 TVHeadend에 등록한 채널을 Live Channels에서 보기 위한 TVHeadend Live Channel, TVIrl, CumulusTv 등이 있습니다.

Live Channels 메뉴에서 채널 더보기를 누르시면 나오는 앱들이 모두 TV Input Service App입니다. Live Channels 앱은 시스템 앱으로 Input Service App이 하나 이상 있어야지 앱목록에 나옵니다.

androidtv-sample-inputs

샘플답게 코드로 채널을 추가하는 방법과 xmltv를 이용하여 추가하는 방법이 작성되어 있고, exoplayer가 지원하는 스트리밍 타입에 따라 샘플을 제공합니다. 광고를 넣는 법과 영상 시청중 추가정보를 제공하는 방법 등등이 있는것 같네요. 제가 꽂힌거는 XMLTV 형식의 기존 EPG 포맷으로 채널을 생성하고 EPG를 구성하는 점입니다. 어짜피 klive도 EPG를 만들고 있었기에 이걸 보고 적용해보자라고 한게 여기까지 왔습니다.

테스트 방법

  • 두번째나 세번째 줄에 입력도 가능
  • klive app을 실행하여 http://soju6jan.iptime.org/work/test.xml 입력 혹은 http://commondatastorage.googleapis.com/android-tv/rich_tv_input_xmltv_feed.xml 입력
  • 텍스트 입력 오른쪽 switch에서 On
  • 저장한 후 Live Channes에서 채널 소스 재 스캔
  • 완료후 9999번 채널이 나오는지 확인

    9999~9996번 채널은 원래 샘플이 제공하는 xml에서 채널번호만 변경 한겁니다.

XML 형식

  <channel id="com.example.android.sampletvinput.2-1" repeat-programs="true">
       <display-name>Google</display-name>
       <display-number>9999</display-number>
       <icon src="http://storage.googleapis.com/android-tv/images/google.png" />
   </channel>

   <programme
            start="20150817000000 +0000"
            stop="20150817000147 +0000"
            channel="com.example.android.sampletvinput.2-1"
            video-src="http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Gmail%20Blue.mp4"
            video-type="HTTP_PROGRESSIVE">
        <title>Introducing Gmail Blue</title>
        <desc>Introducing Gmail Blue Introducing Gmail Blue Introducing Gmail Blue Introducing Gmail Blue.</desc>
        <icon src="http://storage.googleapis.com/android-tv/images/gmail.png" />
        <category>EDUCATION</category>
        <category>TECH_SCIENCE</category>
        <rating system="com.android.tv">
            <value>com.android.tv/US_TV/US_TV_14/US_TV_D/US_TV_L</value>
        </rating>
    </programme>

9999번 채널을 만드는 xml입니다. 직관적으로 파악되시리라 생각됩니다. channel태그는 채널정보를 programme태그는 프로그램 정보를 담고 있습니다. video-src만 변경하면 변경된 파일이 9999번 채널에서 재생됩니다. repeat-programs="true" 이면 EPG가 반복해서 생깁니다.

Live Channels 지원 스트리밍 타입

HTTP_PROGRESSIVE, HLS, Smooth Streaming, MPEG_DASH 타입을 지원하는데 각 타입은 검색하면서 XML과 같이 보면 대충 어떻게 사용하는지 파악될겁니다.

  • HTTP_PROGRESSIVE : 9999번 채널처럼 http로 영상파일을 전송하는 방식. 커스텀하기에도 가장 간편할 겁니다.
  • HLS : 국내 대부분의 서비스가 사용하는 타입입니다.

    고정된 .m3u8 manifest파일을 구해서 등록하면 되는데, 대부분 세션이나 쿠키등이 URL에 붙어야지만 재생됩니다. ffmpeg로 영상파일을 HLS로 변경하는 건 간단합니다.

XML 변경사항

  <channel id="KBS|11" video-src="http://soju6jan.iptime.org:9801/url?mode=url&amp;type=KBS&amp;id=11" video-type="HLS">
		<display-name>1TV</display-name>
		<display-number>1</display-number>
		<icon src="http://padmin.s3-website.ap-northeast-2.amazonaws.com/live/2018/10/11/1539237809933_114600.png" />
	</channel>

원 소스에는 video-src, video-type property가 programme에만 있었으나, channels 태그에서도 사용할 수 있게 변경했고, channels 태그에 해당 property가 있으면 programme 태그에는 없어도 되며 programme 태그 자체가 없어도 됩니다. (EPG 없이 제목 없음으로 방송되는 형태)

커스텀

이제 XML 파일로 채널과 EPG가 생성된다는 건 아셨을 겁니다. XML파일만 만들어서 등록하면 나만의 채널을 생성할 수가 있고 공유할 수도 있습니다. 제가 생각해 봤던 것들로

  • 클라우드 서비스 채널
  • 저는 와이프와 클라우드 공유로 사진와 영상을 보고 있습니다. 아이와 같이 영상을 봐야할 때 폰으로 보거나 크롬캐스트로 봅니다. 특정조건을 주고 자동으로 사진을 영상으로 변환하고, 영상 파일 목록을 xml로 만들어 TV에서 시청하면 번거롭지 않고 좋을 것 같습니다. 이 xml 채널은 부모님 집에도 등록하여, 언제든 보고 싶을 때 보실 수 있게 해드리면 더 좋겠죠.

  • CCTV
  • exoplayer가 아직 RTSP를 정식으로 지원하지 않습니다. 하지만 조만간 지원될 것 같습니다. (GIT Issue) 지원되면 URL로 바로 채널등록이 가능할테고, 지금도 ffmpeg로 RTSP to HLS하면 될 것 같습니다.

  • 동영상 공유
  • 티빙의 경우 CH로 시작하는 몰아보기 방송이 있습니다. 이와 같이 구성하려면 channel 태그 하나에, 전 회차를 programme 태그로 만들어 주면 됩니다. 이 경우 문제가 있는데 예를 들자면 방송시간상 10화를 보고 있을 경우 10화 처음부터 재생은 가능합니다. (탐색도 가능한지는 확인 필요) 하지만 9화 11화를 바로 볼수는 없습니다. 이를 피하기 위해 channel repeat-programs="true" 태그 하나에 , programme 하나만 넣어준 후 회차 만큼 채널을 만들면 VOD 탐색하듯이 채널로 바로 볼 수가 있을 겁니다.
  • 더 나아가 처음부터 아예 공유채널을 100개 정도 만들어 놓고 주기적으로 최신 영상을 채널에 하나씩 매칭시킨 xml을 작성해 놓으면 EPG로 VOD를 고르듯이 원하는 영상을 시청할 수 있을 것 같습니다.

    앱의 xml 재 로딩은 현재 1시간으로 되어 있고, 세팅으로 뺄 수 있습니다.

  • YouTube 영상 채널화
  • exoplayer가 MPEG_DASH 타입도 지원하고 YouTube도 API를 제공합니다.
  • YouTube 재생목록을 그대로 해준다면, 뮤직비디오 채널 같은 것도 가능해 보입니다.

모두 생각만 해봤던 것들입니다. 아이가 좋아 하는 영상만으로 채널을 만든다던지, 이 곳처럼 기기 설명 채널을 만든다던지 이것저것 해볼수 있을 겁니다.

물론 저런 기능 모두 이미 앱으로 가능하고, 저한테 꼭 필요한 기능도 아닙니다. 실제로 테스트 해보면 문제점들도 당연히 많이 생길테구요. 하지만 ATV에 익숙하지 않는 이들도 티비를 보다가 채널만 돌려서 원하는 콘텐츠를 바로 볼수 있다면 만족해 하지 않을까 생각됩니다. 게다가 Live Channels은 음성명령으로도 동작되니 할머니가 손녀 누구누구 보여줘라는 말에 채널이 변경되면서 아이 영상이 나오는 것도 가능해 보입니다. 시간적 여유가 있으면 하나씩 테스트 해볼려고 합니다.




© 2018. by soju6jan