diff --git a/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java index be3174bd..b761bb0b 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java @@ -19,18 +19,15 @@ import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.Timeline; -import com.google.android.exoplayer2.ext.ima.ImaAdsLoader; import com.google.android.exoplayer2.Tracks; import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.ui.AdViewProvider; -import com.google.android.exoplayer2.ui.AdOverlayInfo; import com.google.android.exoplayer2.ui.SubtitleView; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.video.VideoSize; import java.util.List; -import java.util.ArrayList; @TargetApi(16) public final class ExoPlayerView extends FrameLayout implements AdViewProvider { diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index c637be07..821690f6 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -103,7 +103,6 @@ import com.google.common.collect.ImmutableList; import java.net.CookieHandler; import java.net.CookieManager; import java.net.CookiePolicy; -import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -622,7 +621,6 @@ class ReactExoplayerView extends FrameLayout implements new DefaultRenderersFactory(getContext()) .setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF); - Log.d("MEDIAAA", mediaDataSourceFactory.toString()); MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(mediaDataSourceFactory) .setLocalAdInsertionComponents(unusedAdTagUri -> adsLoader, exoPlayerView); @@ -638,7 +636,7 @@ class ReactExoplayerView extends FrameLayout implements audioBecomingNoisyReceiver.setListener(self); bandwidthMeter.addEventListener(new Handler(), self); setPlayWhenReady(!isPaused); - playerNeedsSource = false; + playerNeedsSource = true; PlaybackParameters params = new PlaybackParameters(rate, 1f); player.setPlaybackParameters(params); @@ -986,6 +984,7 @@ class ReactExoplayerView extends FrameLayout implements case AudioManager.AUDIOFOCUS_LOSS: this.hasAudioFocus = false; eventEmitter.audioFocusChanged(false); + pausePlayback(); audioManager.abandonAudioFocus(this); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: diff --git a/examples/basic/index.android.js b/examples/basic/index.android.js deleted file mode 100644 index 7c45c812..00000000 --- a/examples/basic/index.android.js +++ /dev/null @@ -1,236 +0,0 @@ -'use strict'; - -import React, { - Component -} from 'react'; - -import { - AppRegistry, - StyleSheet, - Text, - TouchableOpacity, - View, -} from 'react-native'; - -import Video from 'react-native-video'; - -const adTagUrl = "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/" -+ "ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp" -+ "&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite" -+ "%26sample_ar%3Dpremidpost&cmsid=496&vid=short_onecue&correlator="; - -class VideoPlayer extends Component { - - state = { - rate: 1, - volume: 1, - muted: false, - resizeMode: 'contain', - duration: 0.0, - currentTime: 0.0, - paused: true, - }; - - video: Video; - - onLoad = (data) => { - this.setState({ duration: data.duration }); - }; - - onProgress = (data) => { - this.setState({ currentTime: data.currentTime }); - }; - - onEnd = () => { - this.setState({ paused: true }) - this.video.seek(0) - }; - - onAudioBecomingNoisy = () => { - this.setState({ paused: true }) - }; - - onAudioFocusChanged = (event: { hasAudioFocus: boolean }) => { - this.setState({ paused: !event.hasAudioFocus }) - }; - - getCurrentTimePercentage() { - if (this.state.currentTime > 0) { - return parseFloat(this.state.currentTime) / parseFloat(this.state.duration); - } - return 0; - }; - - renderRateControl(rate) { - const isSelected = (this.state.rate === rate); - - return ( - { this.setState({ rate }) }}> - - {rate}x - - - ); - } - - renderResizeModeControl(resizeMode) { - const isSelected = (this.state.resizeMode === resizeMode); - - return ( - { this.setState({ resizeMode }) }}> - - {resizeMode} - - - ) - } - - renderVolumeControl(volume) { - const isSelected = (this.state.volume === volume); - - return ( - { this.setState({ volume }) }}> - - {volume * 100}% - - - ) - } - - render() { - const flexCompleted = this.getCurrentTimePercentage() * 100; - const flexRemaining = (1 - this.getCurrentTimePercentage()) * 100; - - return ( - - this.setState({ paused: !this.state.paused })} - > - - - - - - {this.renderRateControl(0.25)} - {this.renderRateControl(0.5)} - {this.renderRateControl(1.0)} - {this.renderRateControl(1.5)} - {this.renderRateControl(2.0)} - - - - {this.renderVolumeControl(0.5)} - {this.renderVolumeControl(1)} - {this.renderVolumeControl(1.5)} - - - - {this.renderResizeModeControl('cover')} - {this.renderResizeModeControl('contain')} - {this.renderResizeModeControl('stretch')} - - - - - - - - - - - - ); - } -} - - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: 'black', - }, - fullScreen: { - position: 'absolute', - top: 0, - left: 0, - bottom: 0, - right: 0, - }, - controls: { - backgroundColor: 'transparent', - borderRadius: 5, - position: 'absolute', - bottom: 20, - left: 20, - right: 20, - }, - progress: { - flex: 1, - flexDirection: 'row', - borderRadius: 3, - overflow: 'hidden', - }, - innerProgressCompleted: { - height: 20, - backgroundColor: '#cccccc', - }, - innerProgressRemaining: { - height: 20, - backgroundColor: '#2C2C2C', - }, - generalControls: { - flex: 1, - flexDirection: 'row', - borderRadius: 4, - overflow: 'hidden', - paddingBottom: 10, - }, - rateControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - volumeControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - resizeModeControl: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - controlOption: { - alignSelf: 'center', - fontSize: 11, - color: 'white', - paddingLeft: 2, - paddingRight: 2, - lineHeight: 12, - }, -}); - -AppRegistry.registerComponent('VideoPlayer', () => VideoPlayer); diff --git a/examples/basic/index.ios.js b/examples/basic/index.ios.js deleted file mode 100644 index fbe2541c..00000000 --- a/examples/basic/index.ios.js +++ /dev/null @@ -1,455 +0,0 @@ -'use strict'; -import React, { - Component -} from 'react'; - -import { - Alert, - AppRegistry, - Platform, - StyleSheet, - Text, - TouchableOpacity, - View, -} from 'react-native'; - -import Video,{FilterType} from 'react-native-video'; - -const adTagUrl = "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/" -+ "ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp" -+ "&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite" -+ "%26sample_ar%3Dpremidpost&cmsid=496&vid=short_onecue&correlator="; - -const filterTypes = [ - FilterType.NONE, - FilterType.INVERT, - FilterType.MONOCHROME, - FilterType.POSTERIZE, - FilterType.FALSE, - FilterType.MAXIMUMCOMPONENT, - FilterType.MINIMUMCOMPONENT, - FilterType.CHROME, - FilterType.FADE, - FilterType.INSTANT, - FilterType.MONO, - FilterType.NOIR, - FilterType.PROCESS, - FilterType.TONAL, - FilterType.TRANSFER, - FilterType.SEPIA -]; - -class VideoPlayer extends Component { - constructor(props) { - super(props); - this.onLoad = this.onLoad.bind(this); - this.onProgress = this.onProgress.bind(this); - this.onBuffer = this.onBuffer.bind(this); - } - state = { - rate: 1, - volume: 1, - muted: false, - resizeMode: 'contain', - duration: 0.0, - currentTime: 0.0, - controls: false, - paused: true, - skin: 'custom', - ignoreSilentSwitch: null, - mixWithOthers: null, - isBuffering: false, - filter: FilterType.NONE, - filterEnabled: true - }; - - onLoad(data) { - console.log('On load fired!'); - this.setState({duration: data.duration}); - } - - onProgress(data) { - this.setState({currentTime: data.currentTime}); - } - - onBuffer({ isBuffering }: { isBuffering: boolean }) { - this.setState({ isBuffering }); - } - - getCurrentTimePercentage() { - if (this.state.currentTime > 0) { - return parseFloat(this.state.currentTime) / parseFloat(this.state.duration); - } else { - return 0; - } - } - - setFilter(step) { - let index = filterTypes.indexOf(this.state.filter) + step; - - if (index === filterTypes.length) { - index = 0; - } else if (index === -1) { - index = filterTypes.length - 1; - } - - this.setState({ - filter: filterTypes[index] - }) - } - - renderSkinControl(skin) { - const isSelected = this.state.skin == skin; - const selectControls = skin == 'native' || skin == 'embed'; - return ( - { this.setState({ - controls: selectControls, - skin: skin - }) }}> - - {skin} - - - ); - } - - renderRateControl(rate) { - const isSelected = (this.state.rate == rate); - - return ( - { this.setState({rate: rate}) }}> - - {rate}x - - - ) - } - - renderResizeModeControl(resizeMode) { - const isSelected = (this.state.resizeMode == resizeMode); - - return ( - { this.setState({resizeMode: resizeMode}) }}> - - {resizeMode} - - - ) - } - - renderVolumeControl(volume) { - const isSelected = (this.state.volume == volume); - - return ( - { this.setState({volume: volume}) }}> - - {volume * 100}% - - - ) - } - - renderIgnoreSilentSwitchControl(ignoreSilentSwitch) { - const isSelected = (this.state.ignoreSilentSwitch == ignoreSilentSwitch); - - return ( - { this.setState({ignoreSilentSwitch: ignoreSilentSwitch}) }}> - - {ignoreSilentSwitch} - - - ) - } - - renderMixWithOthersControl(mixWithOthers) { - const isSelected = (this.state.mixWithOthers == mixWithOthers); - - return ( - { this.setState({mixWithOthers: mixWithOthers}) }}> - - {mixWithOthers} - - - ) - } - - renderCustomSkin() { - const flexCompleted = this.getCurrentTimePercentage() * 100; - const flexRemaining = (1 - this.getCurrentTimePercentage()) * 100; - - return ( - - {this.setState({paused: !this.state.paused})}}> - - - - - - {this.renderSkinControl('custom')} - {this.renderSkinControl('native')} - {this.renderSkinControl('embed')} - - { - (this.state.filterEnabled) ? - - { - this.setFilter(-1) - }}> - Previous Filter - - { - this.setFilter(1) - }}> - Next Filter - - : null - } - - - - {this.renderRateControl(0.5)} - {this.renderRateControl(1.0)} - {this.renderRateControl(2.0)} - - - - {this.renderVolumeControl(0.5)} - {this.renderVolumeControl(1)} - {this.renderVolumeControl(1.5)} - - - - {this.renderResizeModeControl('cover')} - {this.renderResizeModeControl('contain')} - {this.renderResizeModeControl('stretch')} - - - - { - (Platform.OS === 'ios') ? - <> - - {this.renderIgnoreSilentSwitchControl('ignore')} - {this.renderIgnoreSilentSwitchControl('obey')} - - - {this.renderMixWithOthersControl('mix')} - {this.renderMixWithOthersControl('duck')} - - : null - } - - - - - - - - - - - ); - } - - renderNativeSkin() { - const videoStyle = this.state.skin == 'embed' ? styles.nativeVideoControls : styles.fullScreen; - return ( - - - - - - - {this.renderSkinControl('custom')} - {this.renderSkinControl('native')} - {this.renderSkinControl('embed')} - - { - (this.state.filterEnabled) ? - - { - this.setFilter(-1) - }}> - Previous Filter - - { - this.setFilter(1) - }}> - Next Filter - - : null - } - - - - {this.renderRateControl(0.5)} - {this.renderRateControl(1.0)} - {this.renderRateControl(2.0)} - - - - {this.renderVolumeControl(0.5)} - {this.renderVolumeControl(1)} - {this.renderVolumeControl(1.5)} - - - - {this.renderResizeModeControl('cover')} - {this.renderResizeModeControl('contain')} - {this.renderResizeModeControl('stretch')} - - - - { - (Platform.OS === 'ios') ? - <> - - {this.renderIgnoreSilentSwitchControl('ignore')} - {this.renderIgnoreSilentSwitchControl('obey')} - - - {this.renderMixWithOthersControl('mix')} - {this.renderMixWithOthersControl('duck')} - - : null - } - - - - - ); - } - - render() { - return this.state.controls ? this.renderNativeSkin() : this.renderCustomSkin(); - } -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: 'black', - }, - fullScreen: { - position: 'absolute', - top: 0, - left: 0, - bottom: 0, - right: 0, - }, - controls: { - backgroundColor: "transparent", - borderRadius: 5, - position: 'absolute', - bottom: 44, - left: 4, - right: 4, - }, - progress: { - flex: 1, - flexDirection: 'row', - borderRadius: 3, - overflow: 'hidden', - }, - innerProgressCompleted: { - height: 20, - backgroundColor: '#cccccc', - }, - innerProgressRemaining: { - height: 20, - backgroundColor: '#2C2C2C', - }, - generalControls: { - flex: 1, - flexDirection: 'row', - overflow: 'hidden', - paddingBottom: 10, - }, - skinControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - rateControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - volumeControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - resizeModeControl: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center' - }, - ignoreSilentSwitchControl: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center' - }, - mixWithOthersControl: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center' - }, - controlOption: { - alignSelf: 'center', - fontSize: 11, - color: "white", - paddingLeft: 2, - paddingRight: 2, - lineHeight: 12, - }, - nativeVideoControls: { - top: 184, - height: 300 - } -}); - -AppRegistry.registerComponent('VideoPlayer', () => VideoPlayer); diff --git a/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj b/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj index 137ce71c..3baa0b3e 100644 --- a/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj +++ b/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj @@ -319,7 +319,6 @@ developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - English, en, Base, ); diff --git a/examples/basic/react-native.config.js b/examples/basic/react-native.config.js deleted file mode 100644 index 7aee24ce..00000000 --- a/examples/basic/react-native.config.js +++ /dev/null @@ -1,15 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -module.exports = { - reactNativePath: fs.realpathSync(path.resolve(require.resolve('react-native-windows/package.json'), '..')), - dependencies: { - 'react-native-video-inc-ads': { - platforms: { - android: { - sourceDir: - '../node_modules/react-native-video-inc-ads/android-exoplayer', - }, - }, - }, - }, -};