Commit 60a81824 by olly Committed by Oliver Woodman

Clean up IMA demo

Also do some minor cleanup in other demo apps.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=173146425
parent c4f3cad5
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter> </intent-filter>
</activity> </activity>
......
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
<resources> <resources>
<string name="application_name">ExoCast Demo</string> <string name="application_name">Exo Cast Demo</string>
<string name="media_route_menu_title">ExoCast</string> <string name="media_route_menu_title">Cast</string>
<string name="error_unsupported_drm">DRM scheme not supported by this device.</string> <string name="error_unsupported_drm">DRM scheme not supported by this device.</string>
......
...@@ -17,22 +17,30 @@ apply plugin: 'com.android.application' ...@@ -17,22 +17,30 @@ apply plugin: 'com.android.application'
android { android {
compileSdkVersion project.ext.compileSdkVersion compileSdkVersion project.ext.compileSdkVersion
buildToolsVersion project.ext.buildToolsVersion buildToolsVersion project.ext.buildToolsVersion
defaultConfig { defaultConfig {
applicationId "com.google.android.exoplayer2.imademo"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion project.ext.targetSdkVersion targetSdkVersion project.ext.targetSdkVersion
versionCode 1
versionName "1.0"
} }
buildTypes { buildTypes {
release { release {
minifyEnabled false shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt')
}
debug {
jniDebuggable = true
} }
} }
lintOptions {
// The demo app does not have translations.
disable 'MissingTranslation'
}
} }
dependencies { dependencies {
compile 'com.android.support:appcompat-v7:' + supportLibraryVersion
compile project(modulePrefix + 'library-core') compile project(modulePrefix + 'library-core')
compile project(modulePrefix + 'library-ui') compile project(modulePrefix + 'library-ui')
compile project(modulePrefix + 'extension-ima') compile project(modulePrefix + 'extension-ima')
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.exoplayer2.imademo"> package="com.google.android.exoplayer2.imademo"
android:versionCode="2504"
<application android:versionName="2.5.4">
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" <uses-permission android:name="android.permission.INTERNET"/>
android:label="@string/app_name" <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="26"/>
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" <application android:label="@string/application_name" android:icon="@mipmap/ic_launcher"
android:theme="@style/AppTheme"> android:largeHeap="true" android:allowBackup="false">
<activity android:name=".MainActivity">
<activity android:name="com.google.android.exoplayer2.imademo.MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
android:label="@string/application_name"
android:theme="@style/PlayerTheme">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter> </intent-filter>
</activity> </activity>
</application> </application>
</manifest> </manifest>
...@@ -17,14 +17,15 @@ package com.google.android.exoplayer2.imademo; ...@@ -17,14 +17,15 @@ package com.google.android.exoplayer2.imademo;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.ext.ima.ImaAdsLoader; import com.google.android.exoplayer2.ext.ima.ImaAdsLoader;
import com.google.android.exoplayer2.ext.ima.ImaAdsMediaSource;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory; import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.ExtractorsFactory; import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ads.AdsMediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection; import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelection;
...@@ -37,61 +38,69 @@ import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; ...@@ -37,61 +38,69 @@ import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
/** /**
* This class deals with ExoPlayer, the IMA plugin, and all video playback. * Manages the {@link ExoPlayer}, the IMA plugin and all video playback.
*/ */
class DemoPlayer { /* package */ final class DemoPlayer {
private final ImaAdsLoader mAdsLoader; private final ImaAdsLoader adsLoader;
private SimpleExoPlayer mPlayer;
private long mContentPosition;
DemoPlayer(Context context) { private SimpleExoPlayer player;
String adTag = context.getString(R.string.ad_tag_url); private long contentPosition;
mAdsLoader = new ImaAdsLoader(context, Uri.parse(adTag));
}
void init(Context context, SimpleExoPlayerView simpleExoPlayerView) { public DemoPlayer(Context context) {
// Create a default track selector. String adTag = context.getString(R.string.ad_tag_url);
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); adsLoader = new ImaAdsLoader(context, Uri.parse(adTag));
TrackSelection.Factory videoTrackSelectionFactory = }
new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); public void init(Context context, SimpleExoPlayerView simpleExoPlayerView) {
// Create a default track selector.
// Create a simple ExoPlayer instance. BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
mPlayer = ExoPlayerFactory.newSimpleInstance(context, trackSelector); TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter);
// Bind the player to the view. TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
simpleExoPlayerView.setPlayer(mPlayer);
// Create a player instance.
// Produces DataSource instances through which media data is loaded. player = ExoPlayerFactory.newSimpleInstance(context, trackSelector);
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
Util.getUserAgent(context, context.getString(R.string.app_name))); // Bind the player to the view.
// Produces Extractor instances for parsing the media data. simpleExoPlayerView.setPlayer(player);
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
// This is the MediaSource representing the non-ad, content media to be played. // Produces DataSource instances through which media data is loaded.
String contentUrl = context.getString(R.string.content_url); DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
MediaSource contentMediaSource = new ExtractorMediaSource( Util.getUserAgent(context, context.getString(R.string.application_name)));
Uri.parse(contentUrl), dataSourceFactory, extractorsFactory, null, null);
// Compose the content media source into a new ImaAdMediaSource with both ads and content.
MediaSource mediaSourceWithAds = new ImaAdsMediaSource(
contentMediaSource,
dataSourceFactory,
mAdsLoader,
simpleExoPlayerView.getOverlayFrameLayout());
// Prepare the player with the source.
mPlayer.seekTo(mContentPosition);
mPlayer.prepare(mediaSourceWithAds);
mPlayer.setPlayWhenReady(true);
}
void reset() { // Produces Extractor instances for parsing the content media (i.e. not the ad).
if (mPlayer != null) { ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
mContentPosition = mPlayer.getContentPosition();
mPlayer.release(); // This is the MediaSource representing the content media (i.e. not the ad).
} String contentUrl = context.getString(R.string.content_url);
MediaSource contentMediaSource = new ExtractorMediaSource(
Uri.parse(contentUrl), dataSourceFactory, extractorsFactory, null, null);
// Compose the content media source into a new AdsMediaSource with both ads and content.
MediaSource mediaSourceWithAds = new AdsMediaSource(contentMediaSource, dataSourceFactory,
adsLoader, simpleExoPlayerView.getOverlayFrameLayout());
// Prepare the player with the source.
player.seekTo(contentPosition);
player.prepare(mediaSourceWithAds);
player.setPlayWhenReady(true);
}
public void reset() {
if (player != null) {
contentPosition = player.getContentPosition();
player.release();
player = null;
} }
}
void release() { public void release() {
mAdsLoader.release(); if (player != null) {
player.release();
player = null;
} }
adsLoader.release();
}
} }
...@@ -15,43 +15,44 @@ ...@@ -15,43 +15,44 @@
*/ */
package com.google.android.exoplayer2.imademo; package com.google.android.exoplayer2.imademo;
import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView; import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
/** /**
* Main Activity for the ExoPlayer IMA plugin example. ExoPlayer objects are created by DemoPlayer, * Main Activity for the IMA plugin demo. {@link ExoPlayer} objects are created by
* which this class instantiates. * {@link DemoPlayer}, which this class instantiates.
*/ */
public class MainActivity extends AppCompatActivity { public final class MainActivity extends Activity {
private DemoPlayer mPlayer; private SimpleExoPlayerView playerView;
private SimpleExoPlayerView mView; private DemoPlayer player;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.main_activity);
playerView = findViewById(R.id.player_view);
mView = (SimpleExoPlayerView) findViewById(R.id.simpleExoPlayerView); player = new DemoPlayer(this);
mPlayer = new DemoPlayer(this); }
}
@Override
@Override public void onResume() {
public void onResume() { super.onResume();
super.onResume(); player.init(this, playerView);
mPlayer.init(this, mView); }
}
@Override
@Override public void onPause() {
public void onPause() { super.onPause();
super.onPause(); player.reset();
mPlayer.reset(); }
}
@Override
@Override public void onDestroy() {
public void onDestroy() { player.release();
mPlayer.release(); super.onDestroy();
super.onDestroy(); }
}
} }
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.google.android.exoplayer2.imademo.MainActivity">
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/simpleExoPlayerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</FrameLayout>
...@@ -13,10 +13,9 @@ ...@@ -13,10 +13,9 @@
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <com.google.android.exoplayer2.ui.SimpleExoPlayerView
xmlns:android="http://schemas.android.com/apk/res/android"
<style name="PlayerTheme" parent="android:Theme.Holo"> android:id="@+id/player_view"
<item name="android:windowBackground">@android:color/black</item> android:layout_width="match_parent"
</style> android:layout_height="match_parent"
android:keepScreenOn="true"/>
</resources>

3.34 KB | W: | H:

3.31 KB | W: | H:

demos/ima/src/main/res/mipmap-hdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-hdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-hdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-hdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin

2.15 KB | W: | H:

2.13 KB | W: | H:

demos/ima/src/main/res/mipmap-mdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-mdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-mdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-mdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin

4.73 KB | W: | H:

4.77 KB | W: | H:

demos/ima/src/main/res/mipmap-xhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xhdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin

7.54 KB | W: | H:

7.32 KB | W: | H:

demos/ima/src/main/res/mipmap-xxhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xxhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xxhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xxhdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin

10.2 KB | W: | H:

10.5 KB | W: | H:

demos/ima/src/main/res/mipmap-xxxhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xxxhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xxxhdpi/ic_launcher.png
demos/ima/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources> <resources>
<string name="app_name">Exo IMA Demo</string>
<string name="application_name">Exo IMA Demo</string>
<string name="content_url"><![CDATA[http://rmcdn.2mdn.net/MotifFiles/html/1248596/android_1330378998288.mp4]]></string> <string name="content_url"><![CDATA[http://rmcdn.2mdn.net/MotifFiles/html/1248596/android_1330378998288.mp4]]></string>
<string name="ad_tag_url"><![CDATA[https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=]]></string> <string name="ad_tag_url"><![CDATA[https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=]]></string>
</resources> </resources>
<resources> <?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> Licensed under the Apache License, Version 2.0 (the "License");
<!-- Customize your theme here. --> you may not use this file except in compliance with the License.
<item name="colorPrimary">@color/colorPrimary</item> You may obtain a copy of the License at
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="PlayerTheme" parent="android:Theme.Holo">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/black</item>
</style> </style>
</resources> </resources>
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="application_name">ExoPlayer</string> <string name="application_name">ExoPlayer</string>
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="PlayerTheme" parent="android:Theme.Holo"> <style name="PlayerTheme" parent="android:Theme.Holo">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment