Merge pull request #3027 from iFeelSmart/chore/enable_IMA_on_demand

Chore/enable ima on demand
This commit is contained in:
Olivier Bouillet 2023-02-09 21:41:08 +01:00 committed by GitHub
commit 934273b0c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 120 additions and 6 deletions

View File

@ -4,6 +4,18 @@ def safeExtGet(prop, fallback) {
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}
def useExoplayerIMA = safeExtGet("RNVUseExoplayerIMA", false)
println "useExoplayerIMA:" + useExoplayerIMA
// This string is used to define build path.
// As react native build output directory is react-native path of the module.
// We need to force a new path on each configuration change.
// If you add a new build parameter, please add the new value in this string
def configStringPath = (
'useExoplayerIMA' + useExoplayerIMA \
).md5()
android {
compileSdkVersion safeExtGet('compileSdkVersion', 31)
buildToolsVersion safeExtGet('buildToolsVersion', '30.0.2')
@ -24,6 +36,19 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildDir 'buildOutput_' + configStringPath
sourceSets {
main {
java {
if (useExoplayerIMA) {
exclude 'com/google/ads/interactivemedia/v3/api'
exclude 'com/android/exoplayer2/ext/ima'
}
}
}
}
}
repositories {
@ -45,7 +70,9 @@ dependencies {
implementation('com.google.android.exoplayer:extension-okhttp:2.18.1') {
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}
implementation 'com.google.android.exoplayer:extension-ima:2.18.1'
if (useExoplayerIMA) {
implementation 'com.google.android.exoplayer:extension-ima:2.18.1'
}
implementation "com.squareup.okhttp3:okhttp:" + '$OKHTTP_VERSION'
}

View File

@ -0,0 +1,11 @@
package com.google.ads.interactivemedia.v3.api;
import androidx.annotation.InspectableProperty;
public abstract class AdEvent {
public abstract InspectableProperty getType();
public interface AdEventListener {
public void onAdEvent(AdEvent adEvent);
}
}

View File

@ -0,0 +1,65 @@
package com.google.android.exoplayer2.ext.ima;
import androidx.annotation.Nullable;
import com.facebook.react.uimanager.ThemedReactContext;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.source.ads.AdsLoader;
import com.google.android.exoplayer2.source.ads.AdsMediaSource;
import com.google.android.exoplayer2.ui.AdViewProvider;
import com.google.android.exoplayer2.upstream.DataSpec;
import java.io.IOException;
public class ImaAdsLoader implements AdsLoader {
public void setPlayer(ExoPlayer player) {
}
@Override
public void setPlayer(@Nullable Player player) {
}
public void release() {
}
@Override
public void setSupportedContentTypes(int... ints) {
}
@Override
public void start(AdsMediaSource adsMediaSource, DataSpec dataSpec, Object o, AdViewProvider adViewProvider, EventListener eventListener) {
}
@Override
public void stop(AdsMediaSource adsMediaSource, EventListener eventListener) {
}
@Override
public void handlePrepareComplete(AdsMediaSource adsMediaSource, int i, int i1) {
}
@Override
public void handlePrepareError(AdsMediaSource adsMediaSource, int i, int i1, IOException e) {
}
public static class Builder {
public Builder(ThemedReactContext themedReactContext) {
}
public Builder setAdEventListener(Object reactExoplayerView) {
return this;
}
public ImaAdsLoader build() {
return null;
}
}
}

View File

@ -14,6 +14,8 @@ buildscript {
// Otherwise we default to the side-by-side NDK version from AGP.
ndkVersion = "21.4.7075529"
}
RNVUseExoplayerIMA = true
}
repositories {
google()

View File

@ -5,7 +5,7 @@
* @format
*/
const path = require('path');
const blacklist = require('metro-config/src/defaults/blacklist');
const blacklist = require('metro-config/src/defaults/exclusionList');
module.exports = {
resolver: {

View File

@ -103,10 +103,14 @@ enum RCTVideoUtils {
title = value as! String
}
let language:String! = currentOption?.extendedLanguageTag ?? ""
let selectedOption: AVMediaSelectionOption? = player.currentItem?.currentMediaSelection.selectedMediaOption(in: group!)
let audioTrack = [
"index": NSNumber(value: i),
"title": title,
"language": language
"language": language ?? "",
"selected": currentOption?.displayName == selectedOption?.displayName
] as [String : Any]
audioTracks.add(audioTrack)
}
@ -129,10 +133,13 @@ enum RCTVideoUtils {
title = value as! String
}
let language:String! = currentOption?.extendedLanguageTag ?? ""
let selectedOpt = player.currentItem?.currentMediaSelection
let selectedOption: AVMediaSelectionOption? = player.currentItem?.currentMediaSelection.selectedMediaOption(in: group!)
let textTrack = TextTrack([
"index": NSNumber(value: i),
"title": title,
"language": language
"language": language,
"selected": currentOption?.displayName == selectedOption?.displayName
])
textTracks.append(textTrack)
}

View File

@ -1001,6 +1001,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
}
if _videoLoadStarted {
let audioTracks = RCTVideoUtils.getAudioTrackInfo(_player)
let textTracks = RCTVideoUtils.getTextTrackInfo(_player).map(\.json)
onVideoLoad?(["duration": NSNumber(value: duration),
"currentTime": NSNumber(value: Float(CMTimeGetSeconds(_playerItem.currentTime()))),
"canPlayReverse": NSNumber(value: _playerItem.canPlayReverse),
@ -1014,8 +1016,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
"height": width != nil ? NSNumber(value: height!) : "undefinded",
"orientation": orientation
],
"audioTracks": RCTVideoUtils.getAudioTrackInfo(_player),
"textTracks": _textTracks ?? RCTVideoUtils.getTextTrackInfo(_player),
"audioTracks": audioTracks,
"textTracks": textTracks,
"target": reactTag as Any])
}
_videoLoadStarted = false