MCPcopy Index your code
hub / github.com/bertrandmartel/youtubetv

github.com/bertrandmartel/youtubetv @1.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.2 ↗ · + Follow
387 symbols 751 edges 40 files 143 documented · 37%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

YoutubeTV library

CircleCI Download Maven Central Codacy Badge Javadoc License

YouTube embedded player library for Android TV

Purpose

Download YoutubeTv library Showcase from Google Play :

Download YoutubeTv library Showcase from Google Play

Features

  • a custom view YoutubeTvView that embeds a Webview with Youtube iframe
  • a custom fragment YoutubeTvFragment that holds a YoutubeTvView with a media control bar (PlaybackOverlayFragment)
  • all Javascript API for iframe Embeds are available from YoutubeTvView
  • video autoplay
  • a video thumbnail is shown at the beginning waiting for the player to be ready
  • a loading progress bar is shown waiting for the PLAY status

Include in your project

with Gradle, from jcenter :

compile 'fr.bmartel:youtubetv:1.2'

Minimum SDK : 21

YoutubeTvView

YoutubeTvView is the custom view that holds Youtube iframe inside a Webview.

Layout

<fr.bmartel.youtubetv.YoutubeTvView
    android:id="@+id/youtube_video"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:yt_videoId="4a5m4qF1e6Q" />

Attribute list

attribute name format default value description
yt_videoId string Youtube video Id
yt_playlistId string playlist Id (if video is part of a playlist)
yt_videoQuality enum hd1080 suggested quality
yt_showNowPlayingCard boolean true define if now playing card must be shown or not
yt_showRelatedVideos boolean false display related video when video ends
yt_showVideoInfo boolean false show video info before playing video
yt_showControls enum none define if iframe control bar is shown (auto/always/none)
yt_autoHide enum alwaysVisible control iframe control bar visibility (auto/always/none)
yt_closedCaptions boolean false display closed captions
yt_closedCaptionLangPref string closed captions preference language
yt_playerLanguage string youtube player language
yt_videoAnnotation boolean false display video annotations
yt_debug boolean false active/disactive debug mode
yt_loadingBackgroundColor integer #00000000 set loading background color
yt_autoplay boolean true autoplay the video or initiate on click
yt_userAgentString string iphone(*) user agent string used for the Webview
yt_showBorder boolean false define if a thin border is shown when the View is selected
yt_borderWidth integer 2 selection border width in dp (no effect if showBorder not set)
yt_borderColor color Color.BLUE selection border color (no effect if showBorder not set)
yt_thumbnailQuality enum maxresdefault suggested quality for the thumbnail displayed before the video plays
yt_javascriptTimeout integer 1500 timeout value in ms for Javascript API that return values from JS side

(*) There is currently a bug on regular android user agent string that restricts video quality to large and below. The bug doesn't affect desktop, iphone or ipad user agent string. So, in order to have quality hd720 or hd1080 we must change user agent string.

  • suggested videoQuality

  • auto

  • tiny
  • small
  • medium
  • large
  • hd720
  • hd1080
  • highres
  • hd1440
  • hd2160

  • suggested thumbnailQuality

  • auto

  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault

YoutubeTvFragment

YoutubeTvFragment holds a YoutubeTvView with a PlaybackOverlayFragment that is used to display a media control bar.

Usage

  • in your Activity's onCreate :
FragmentTransaction fTransaction = getFragmentManager().beginTransaction();

Bundle args = new Bundle();
args.putString("videoId", "gdgHZi347hU");
args.putString("videoQuality", "hd1080");

YoutubeTvFragment mYtFragment = YoutubeTvFragment.newInstance(args);
fTransaction.replace(R.id.youtube_fragment, mYtFragment);
fTransaction.commit();

Proguard

The following is required to keep Javascript interface from obfuscation :

-keep class fr.bmartel.youtubetv.JavascriptInterface { *; }

-keepclassmembers,allowobfuscation class fr.bmartel.youtubetv.JavascriptInterface.** {
    <methods>;
}

External libraries

License

The MIT License (MIT) Copyright (c) 2016 Bertrand Martel

Extension points exported contracts — how you extend this code

IPlayerListener (Interface)
Youtube Player listener. @author Bertrand Martel [3 implementers]
youtubetv/src/main/java/fr/bmartel/youtubetv/listener/IPlayerListener.java
IVideoInfoListener (Interface)
Video information listener used in YoutubePlayer to spare a Javascript call. [3 implementers]
youtubetv/src/main/java/fr/bmartel/youtubetv/listener/IVideoInfoListener.java
IYoutubeApi (Interface)
Youtube API interface. @author Bertrand Martel [2 implementers]
youtubetv/src/main/java/fr/bmartel/youtubetv/IYoutubeApi.java
IProgressUpdateListener (Interface)
Progress update listener. @author Bertrand Martel [2 implementers]
youtubetv/src/main/java/fr/bmartel/youtubetv/listener/IProgressUpdateListener.java
OnMediaFileFinishedPlayingListener (Interface)
A listener which will be called whenever a track is finished playing. [1 implementers]
youtubetv/src/main/java/fr/bmartel/youtubetv/media/MediaPlayerGlue.java

Core symbols most depended-on inside this repo

callOnWebviewThread
called by 36
youtubetv/src/main/java/fr/bmartel/youtubetv/utils/WebviewUtils.java
getContext
called by 20
showcase/src/main/java/fr/bmartel/youtubetv/showcase/cards/presenter/AbstractCardPresenter.java
setBlock
called by 17
youtubetv/src/main/java/fr/bmartel/youtubetv/JavascriptInterface.java
getIndex
called by 11
youtubetv/src/main/java/fr/bmartel/youtubetv/model/UserAgents.java
closePlayer
called by 8
youtubetv/src/main/java/fr/bmartel/youtubetv/IYoutubeApi.java
callJavaScript
called by 6
youtubetv/src/main/java/fr/bmartel/youtubetv/utils/WebviewUtils.java
getValue
called by 6
youtubetv/src/main/java/fr/bmartel/youtubetv/model/UserAgents.java
setTitle
called by 5
youtubetv/src/main/java/fr/bmartel/youtubetv/media/MediaPlayerGlue.java

Shape

Method 342
Class 32
Enum 7
Interface 6

Languages

Java100%

Modules by API surface

youtubetv/src/main/java/fr/bmartel/youtubetv/YoutubeTvView.java57 symbols
youtubetv/src/main/java/fr/bmartel/youtubetv/JavascriptInterface.java52 symbols
youtubetv/src/main/java/fr/bmartel/youtubetv/media/MediaPlayerGlue.java46 symbols
youtubetv/src/main/java/fr/bmartel/youtubetv/IYoutubeApi.java43 symbols
showcase/src/main/java/fr/bmartel/youtubetv/showcase/model/Card.java16 symbols
youtubetv/src/main/java/fr/bmartel/youtubetv/utils/WebviewUtils.java11 symbols
youtubetv/src/main/java/fr/bmartel/youtubetv/media/VideoPlayerFragment.java11 symbols
showcase/src/main/java/fr/bmartel/youtubetv/showcase/fragment/SettingsFragment.java11 symbols
showcase/src/main/java/fr/bmartel/youtubetv/showcase/dialog/SafeDismissDialogFragment.java10 symbols
youtubetv/src/main/java/fr/bmartel/youtubetv/YoutubeTvFragment.java8 symbols
showcase/src/main/java/fr/bmartel/youtubetv/showcase/samples/YoutubeActivityApiShowcase.java8 symbols
showcase/src/main/java/fr/bmartel/youtubetv/showcase/cards/presenter/AbstractCardPresenter.java7 symbols

For agents

$ claude mcp add youtubetv \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page