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
This commit is contained in:
olly 2017-10-23 11:41:11 -07:00 committed by Oliver Woodman
parent c4f3cad586
commit 60a81824f5
23 changed files with 178 additions and 135 deletions

View File

@ -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>

View File

@ -18,7 +18,7 @@
<string name="application_name">Exo Cast 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>

View File

@ -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')

View File

@ -1,21 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <!-- Copyright (C) 2017 The Android Open Source Project
package="com.google.android.exoplayer2.imademo">
<application Licensed under the Apache License, Version 2.0 (the "License");
android:allowBackup="true" you may not use this file except in compliance with the License.
android:icon="@mipmap/ic_launcher" You may obtain a copy of the License at
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" http://www.apache.org/licenses/LICENSE-2.0
android:supportsRtl="true"
android:theme="@style/AppTheme"> Unless required by applicable law or agreed to in writing, software
<activity android:name=".MainActivity"> 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"
package="com.google.android.exoplayer2.imademo"
android:versionCode="2504"
android:versionName="2.5.4">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="26"/>
<application android:label="@string/application_name" android:icon="@mipmap/ic_launcher"
android:largeHeap="true" android:allowBackup="false">
<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>

View File

@ -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;
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;
private long contentPosition;
public DemoPlayer(Context context) {
String adTag = context.getString(R.string.ad_tag_url); String adTag = context.getString(R.string.ad_tag_url);
mAdsLoader = new ImaAdsLoader(context, Uri.parse(adTag)); adsLoader = new ImaAdsLoader(context, Uri.parse(adTag));
} }
void init(Context context, SimpleExoPlayerView simpleExoPlayerView) { public void init(Context context, SimpleExoPlayerView simpleExoPlayerView) {
// Create a default track selector. // Create a default track selector.
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory = TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter); new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
// Create a simple ExoPlayer instance. // Create a player instance.
mPlayer = ExoPlayerFactory.newSimpleInstance(context, trackSelector); player = ExoPlayerFactory.newSimpleInstance(context, trackSelector);
// Bind the player to the view. // Bind the player to the view.
simpleExoPlayerView.setPlayer(mPlayer); simpleExoPlayerView.setPlayer(player);
// Produces DataSource instances through which media data is loaded. // Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
Util.getUserAgent(context, context.getString(R.string.app_name))); Util.getUserAgent(context, context.getString(R.string.application_name)));
// Produces Extractor instances for parsing the media data.
// Produces Extractor instances for parsing the content media (i.e. not the ad).
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory(); ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
// This is the MediaSource representing the non-ad, content media to be played.
// This is the MediaSource representing the content media (i.e. not the ad).
String contentUrl = context.getString(R.string.content_url); String contentUrl = context.getString(R.string.content_url);
MediaSource contentMediaSource = new ExtractorMediaSource( MediaSource contentMediaSource = new ExtractorMediaSource(
Uri.parse(contentUrl), dataSourceFactory, extractorsFactory, null, null); 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( // Compose the content media source into a new AdsMediaSource with both ads and content.
contentMediaSource, MediaSource mediaSourceWithAds = new AdsMediaSource(contentMediaSource, dataSourceFactory,
dataSourceFactory, adsLoader, simpleExoPlayerView.getOverlayFrameLayout());
mAdsLoader,
simpleExoPlayerView.getOverlayFrameLayout());
// Prepare the player with the source. // Prepare the player with the source.
mPlayer.seekTo(mContentPosition); player.seekTo(contentPosition);
mPlayer.prepare(mediaSourceWithAds); player.prepare(mediaSourceWithAds);
mPlayer.setPlayWhenReady(true); player.setPlayWhenReady(true);
} }
void reset() { public void reset() {
if (mPlayer != null) { if (player != null) {
mContentPosition = mPlayer.getContentPosition(); contentPosition = player.getContentPosition();
mPlayer.release(); player.release();
player = null;
} }
} }
void release() { public void release() {
mAdsLoader.release(); if (player != null) {
player.release();
player = null;
} }
adsLoader.release();
}
} }

View File

@ -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();
mPlayer.init(this, mView); player.init(this, playerView);
} }
@Override @Override
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
mPlayer.reset(); player.reset();
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
mPlayer.release(); player.release();
super.onDestroy(); super.onDestroy();
} }
} }

View File

@ -1,14 +0,0 @@
<?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>

View File

@ -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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>

View File

@ -1,5 +1,24 @@
<?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>

View File

@ -1,11 +1,23 @@
<resources> <?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2017 The Android Open Source Project
<!-- Base application theme. --> Licensed under the Apache License, Version 2.0 (the "License");
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> you may not use this file except in compliance with the License.
<!-- Customize your theme here. --> You may obtain a copy of the License at
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> http://www.apache.org/licenses/LICENSE-2.0
<item name="colorAccent">@color/colorAccent</item>
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>

View File

@ -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>

View File

@ -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">