react-native-theoplayer 1.7.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +115 -0
- package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +648 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.kt +23 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.kt +446 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerViewManager.kt +117 -0
- package/android/src/main/java/com/theoplayer/{TimeUpdateRate.java → TimeUpdateRate.kt} +2 -2
- package/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +161 -0
- package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.kt +90 -0
- package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +140 -0
- package/android/src/main/java/com/theoplayer/cast/CastEventAdapter.kt +81 -0
- package/android/src/main/java/com/theoplayer/cast/CastModule.kt +75 -0
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionAdapter.kt +2 -2
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +1 -2
- package/android/src/main/java/com/theoplayer/drm/ProxyContentProtectionIntegration.kt +1 -2
- package/android/src/main/java/com/theoplayer/drm/ProxyContentProtectionIntegrationFactory.kt +3 -5
- package/android/src/main/java/com/theoplayer/source/SourceAdapter.kt +402 -0
- package/android/src/main/java/com/theoplayer/track/MediaTrackEventType.kt +6 -0
- package/android/src/main/java/com/theoplayer/track/MediaTrackType.kt +6 -0
- package/android/src/main/java/com/theoplayer/track/QualityListAdapter.kt +43 -0
- package/android/src/main/java/com/theoplayer/track/QualityListFilter.kt +28 -0
- package/android/src/main/java/com/theoplayer/track/TextTrackCueEventType.kt +10 -0
- package/android/src/main/java/com/theoplayer/track/TrackEventType.kt +7 -0
- package/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +219 -0
- package/android/src/main/java/com/theoplayer/util/ViewResolver.kt +19 -0
- package/ios/THEOplayerRCTAdAggregator.swift +15 -6
- package/ios/THEOplayerRCTAdsAPI.swift +39 -40
- package/ios/THEOplayerRCTBridge.m +54 -1
- package/ios/THEOplayerRCTCastAPI.swift +275 -0
- package/ios/THEOplayerRCTDebug.swift +3 -0
- package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +91 -19
- package/ios/THEOplayerRCTTrackEventTypes.swift +17 -0
- package/ios/{THEOplayerRCTMetadataAggregator.swift → THEOplayerRCTTrackMetadataAggregator.swift} +69 -55
- package/ios/THEOplayerRCTView.swift +126 -22
- package/ios/THEOplayerRCTViewAdEventHandler.swift +7 -5
- package/ios/THEOplayerRCTViewCastEventHandler.swift +124 -0
- package/ios/THEOplayerRCTViewMainEventHandler.swift +1 -1
- package/ios/THEOplayerRCTViewMediaTrackEventHandler.swift +185 -0
- package/ios/THEOplayerRCTViewTextTrackEventHandler.swift +30 -13
- package/ios/custom/Frameworks/ios/put_custom_ios_xcframework_here.txt +1 -1
- package/ios/custom/Frameworks/tvos/put_custom_tvos_xcframework_here.txt +2 -0
- package/ios/custom/react-native-theoplayer_custom.podspec +46 -0
- package/lib/commonjs/api/THEOplayerView.js.map +1 -1
- package/lib/commonjs/api/barrel.js +21 -8
- package/lib/commonjs/api/barrel.js.map +1 -1
- package/lib/commonjs/api/cast/Airplay.js +6 -0
- package/lib/commonjs/api/cast/Airplay.js.map +1 -0
- package/lib/commonjs/api/cast/CastAPI.js +6 -0
- package/lib/commonjs/api/cast/CastAPI.js.map +1 -0
- package/lib/commonjs/api/cast/CastConfiguration.js +2 -0
- package/lib/commonjs/api/cast/CastConfiguration.js.map +1 -0
- package/lib/commonjs/api/cast/CastState.js +2 -0
- package/lib/commonjs/api/cast/CastState.js.map +1 -0
- package/lib/commonjs/api/cast/Chromecast.js +6 -0
- package/lib/commonjs/api/cast/Chromecast.js.map +1 -0
- package/lib/commonjs/api/cast/barrel.js +71 -0
- package/lib/commonjs/api/cast/barrel.js.map +1 -0
- package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/commonjs/api/error/ChromecastError.js +2 -0
- package/lib/commonjs/api/error/ChromecastError.js.map +1 -0
- package/lib/commonjs/api/error/barrel.js +13 -0
- package/lib/commonjs/api/error/barrel.js.map +1 -1
- package/lib/commonjs/api/event/CastEvent.js +21 -0
- package/lib/commonjs/api/event/CastEvent.js.map +1 -0
- package/lib/commonjs/api/event/TrackEvent.js +17 -1
- package/lib/commonjs/api/event/TrackEvent.js.map +1 -1
- package/lib/commonjs/api/event/barrel.js +25 -12
- package/lib/commonjs/api/event/barrel.js.map +1 -1
- package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
- package/lib/commonjs/api/source/barrel.js +13 -0
- package/lib/commonjs/api/source/barrel.js.map +1 -1
- package/lib/commonjs/api/source/metadata/MetadataDescription.js +2 -0
- package/lib/commonjs/api/source/metadata/MetadataDescription.js.map +1 -0
- package/lib/commonjs/api/source/metadata/barrel.js +19 -0
- package/lib/commonjs/api/source/metadata/barrel.js.map +1 -0
- package/lib/commonjs/internal/THEOplayerView.js +30 -0
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.web.js +80 -20
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
- package/lib/commonjs/internal/cast/THEOplayerNativeAirplay.js +34 -0
- package/lib/commonjs/internal/cast/THEOplayerNativeAirplay.js.map +1 -0
- package/lib/commonjs/internal/cast/THEOplayerNativeCastApi.js +46 -0
- package/lib/commonjs/internal/cast/THEOplayerNativeCastApi.js.map +1 -0
- package/lib/commonjs/internal/cast/THEOplayerNativeChromecast.js +42 -0
- package/lib/commonjs/internal/cast/THEOplayerNativeChromecast.js.map +1 -0
- package/lib/commonjs/internal/cast/THEOplayerWebCastApi.js +31 -0
- package/lib/commonjs/internal/cast/THEOplayerWebCastApi.js.map +1 -0
- package/lib/commonjs/internal/web/stub/CastButtonStub.js +16 -0
- package/lib/commonjs/internal/web/stub/CastButtonStub.js.map +1 -0
- package/lib/module/api/THEOplayerView.js.map +1 -1
- package/lib/module/api/barrel.js +1 -0
- package/lib/module/api/barrel.js.map +1 -1
- package/lib/module/api/cast/Airplay.js +2 -0
- package/lib/module/api/cast/Airplay.js.map +1 -0
- package/lib/module/api/cast/CastAPI.js +2 -0
- package/lib/module/api/cast/CastAPI.js.map +1 -0
- package/lib/module/api/cast/CastConfiguration.js +2 -0
- package/lib/module/api/cast/CastConfiguration.js.map +1 -0
- package/lib/module/api/cast/CastState.js +2 -0
- package/lib/module/api/cast/CastState.js.map +1 -0
- package/lib/module/api/cast/Chromecast.js +2 -0
- package/lib/module/api/cast/Chromecast.js.map +1 -0
- package/lib/module/api/cast/barrel.js +6 -0
- package/lib/module/api/cast/barrel.js.map +1 -0
- package/lib/module/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/module/api/error/ChromecastError.js +2 -0
- package/lib/module/api/error/ChromecastError.js.map +1 -0
- package/lib/module/api/error/barrel.js +1 -0
- package/lib/module/api/error/barrel.js.map +1 -1
- package/lib/module/api/event/CastEvent.js +14 -0
- package/lib/module/api/event/CastEvent.js.map +1 -0
- package/lib/module/api/event/TrackEvent.js +14 -0
- package/lib/module/api/event/TrackEvent.js.map +1 -1
- package/lib/module/api/event/barrel.js +2 -1
- package/lib/module/api/event/barrel.js.map +1 -1
- package/lib/module/api/source/SourceDescription.js.map +1 -1
- package/lib/module/api/source/barrel.js +1 -0
- package/lib/module/api/source/barrel.js.map +1 -1
- package/lib/module/api/source/metadata/MetadataDescription.js +2 -0
- package/lib/module/api/source/metadata/MetadataDescription.js.map +1 -0
- package/lib/module/api/source/metadata/barrel.js +2 -0
- package/lib/module/api/source/metadata/barrel.js.map +1 -0
- package/lib/module/internal/THEOplayerView.js +29 -0
- package/lib/module/internal/THEOplayerView.js.map +1 -1
- package/lib/module/internal/THEOplayerView.web.js +80 -21
- package/lib/module/internal/THEOplayerView.web.js.map +1 -1
- package/lib/module/internal/cast/THEOplayerNativeAirplay.js +24 -0
- package/lib/module/internal/cast/THEOplayerNativeAirplay.js.map +1 -0
- package/lib/module/internal/cast/THEOplayerNativeCastApi.js +34 -0
- package/lib/module/internal/cast/THEOplayerNativeCastApi.js.map +1 -0
- package/lib/module/internal/cast/THEOplayerNativeChromecast.js +32 -0
- package/lib/module/internal/cast/THEOplayerNativeChromecast.js.map +1 -0
- package/lib/module/internal/cast/THEOplayerWebCastApi.js +22 -0
- package/lib/module/internal/cast/THEOplayerWebCastApi.js.map +1 -0
- package/lib/module/internal/web/stub/CastButtonStub.js +6 -0
- package/lib/module/internal/web/stub/CastButtonStub.js.map +1 -0
- package/lib/typescript/lib/commonjs/api/cast/Airplay.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/cast/CastAPI.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/cast/CastConfiguration.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/cast/CastState.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/cast/Chromecast.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/cast/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/error/ChromecastError.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/event/CastEvent.d.ts +2 -0
- package/lib/typescript/lib/commonjs/api/event/TrackEvent.d.ts +4 -0
- package/lib/typescript/lib/commonjs/api/source/metadata/MetadataDescription.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/source/metadata/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/internal/THEOplayerView.d.ts +3 -0
- package/lib/typescript/lib/commonjs/internal/THEOplayerView.web.d.ts +3 -0
- package/lib/typescript/lib/commonjs/internal/cast/THEOplayerNativeAirplay.d.ts +9 -0
- package/lib/typescript/lib/commonjs/internal/cast/THEOplayerNativeCastApi.d.ts +12 -0
- package/lib/typescript/lib/commonjs/internal/cast/THEOplayerNativeChromecast.d.ts +11 -0
- package/lib/typescript/lib/commonjs/internal/cast/THEOplayerWebCastApi.d.ts +8 -0
- package/lib/typescript/lib/commonjs/internal/web/stub/CastButtonStub.d.ts +2 -0
- package/lib/typescript/lib/module/api/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/cast/Airplay.d.ts +1 -0
- package/lib/typescript/lib/module/api/cast/CastAPI.d.ts +1 -0
- package/lib/typescript/lib/module/api/cast/CastConfiguration.d.ts +0 -0
- package/lib/typescript/lib/module/api/cast/CastState.d.ts +0 -0
- package/lib/typescript/lib/module/api/cast/Chromecast.d.ts +1 -0
- package/lib/typescript/lib/module/api/cast/barrel.d.ts +3 -0
- package/lib/typescript/lib/module/api/error/ChromecastError.d.ts +0 -0
- package/lib/typescript/lib/module/api/event/CastEvent.d.ts +1 -0
- package/lib/typescript/lib/module/api/event/TrackEvent.d.ts +2 -0
- package/lib/typescript/lib/module/api/event/barrel.d.ts +2 -1
- package/lib/typescript/lib/module/api/source/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/metadata/MetadataDescription.d.ts +0 -0
- package/lib/typescript/lib/module/api/source/metadata/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/internal/THEOplayerView.d.ts +3 -0
- package/lib/typescript/lib/module/internal/THEOplayerView.web.d.ts +3 -0
- package/lib/typescript/lib/module/internal/cast/THEOplayerNativeAirplay.d.ts +8 -0
- package/lib/typescript/lib/module/internal/cast/THEOplayerNativeCastApi.d.ts +11 -0
- package/lib/typescript/lib/module/internal/cast/THEOplayerNativeChromecast.d.ts +10 -0
- package/lib/typescript/lib/module/internal/cast/THEOplayerWebCastApi.d.ts +7 -0
- package/lib/typescript/lib/module/internal/web/stub/CastButtonStub.d.ts +2 -0
- package/lib/typescript/src/api/THEOplayerView.d.ts +21 -3
- package/lib/typescript/src/api/barrel.d.ts +1 -0
- package/lib/typescript/src/api/cast/Airplay.d.ts +27 -0
- package/lib/typescript/src/api/cast/CastAPI.d.ts +25 -0
- package/lib/typescript/src/api/cast/CastConfiguration.d.ts +41 -0
- package/lib/typescript/src/api/cast/CastState.d.ts +10 -0
- package/lib/typescript/src/api/cast/Chromecast.d.ts +39 -0
- package/lib/typescript/src/api/cast/barrel.d.ts +5 -0
- package/lib/typescript/src/api/config/PlayerConfiguration.d.ts +6 -1
- package/lib/typescript/src/api/error/ChromecastError.d.ts +34 -0
- package/lib/typescript/src/api/error/barrel.d.ts +1 -0
- package/lib/typescript/src/api/event/CastEvent.d.ts +21 -0
- package/lib/typescript/src/api/event/TrackEvent.d.ts +49 -3
- package/lib/typescript/src/api/event/barrel.d.ts +2 -1
- package/lib/typescript/src/api/source/SourceDescription.d.ts +7 -0
- package/lib/typescript/src/api/source/barrel.d.ts +1 -0
- package/lib/typescript/src/api/source/metadata/MetadataDescription.d.ts +12 -0
- package/lib/typescript/src/api/source/metadata/barrel.d.ts +1 -0
- package/lib/typescript/src/internal/THEOplayerView.d.ts +9 -1
- package/lib/typescript/src/internal/THEOplayerView.web.d.ts +7 -2
- package/lib/typescript/src/internal/cast/THEOplayerNativeAirplay.d.ts +9 -0
- package/lib/typescript/src/internal/cast/THEOplayerNativeCastApi.d.ts +10 -0
- package/lib/typescript/src/internal/cast/THEOplayerNativeChromecast.d.ts +11 -0
- package/lib/typescript/src/internal/cast/THEOplayerWebCastApi.d.ts +9 -0
- package/lib/typescript/src/internal/web/stub/CastButtonStub.d.ts +3 -0
- package/package.json +2 -2
- package/react-native-theoplayer.podspec +2 -2
- package/src/api/THEOplayerView.ts +25 -3
- package/src/api/barrel.ts +1 -0
- package/src/api/cast/Airplay.ts +31 -0
- package/src/api/cast/CastAPI.ts +30 -0
- package/src/api/cast/CastConfiguration.ts +44 -0
- package/src/api/cast/CastState.ts +10 -0
- package/src/api/cast/Chromecast.ts +45 -0
- package/src/api/cast/barrel.ts +5 -0
- package/src/api/config/PlayerConfiguration.ts +7 -1
- package/src/api/error/ChromecastError.ts +46 -0
- package/src/api/error/barrel.ts +1 -0
- package/src/api/event/CastEvent.ts +45 -0
- package/src/api/event/TrackEvent.ts +58 -2
- package/src/api/event/barrel.ts +2 -1
- package/src/api/source/SourceDescription.ts +8 -0
- package/src/api/source/barrel.ts +1 -0
- package/src/api/source/metadata/MetadataDescription.ts +13 -0
- package/src/api/source/metadata/barrel.ts +1 -0
- package/src/internal/THEOplayerView.tsx +35 -0
- package/src/internal/THEOplayerView.web.tsx +87 -19
- package/src/internal/cast/THEOplayerNativeAirplay.ts +22 -0
- package/src/internal/cast/THEOplayerNativeCastApi.ts +28 -0
- package/src/internal/cast/THEOplayerNativeChromecast.ts +30 -0
- package/src/internal/cast/THEOplayerWebCastApi.ts +21 -0
- package/src/internal/web/stub/CastButtonStub.tsx +7 -0
- package/android/src/main/java/com/theoplayer/PlayerConfigHelper.java +0 -70
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.java +0 -32
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.java +0 -525
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerViewManager.java +0 -127
- package/android/src/main/java/com/theoplayer/SourceHelper.java +0 -362
- package/android/src/main/java/com/theoplayer/VideoEventEmitter.java +0 -442
- package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.java +0 -92
- package/android/src/main/java/com/theoplayer/ads/AdInfo.java +0 -168
- package/android/src/main/java/com/theoplayer/ads/AdsModule.java +0 -152
- package/android/src/main/java/com/theoplayer/track/QualityListAdapter.java +0 -54
- package/android/src/main/java/com/theoplayer/track/QualityListFilter.java +0 -40
- package/android/src/main/java/com/theoplayer/track/TextTrackCueEventType.java +0 -11
- package/android/src/main/java/com/theoplayer/track/TrackEventType.java +0 -11
- package/android/src/main/java/com/theoplayer/track/TrackListInfo.java +0 -212
- package/android/src/main/java/com/theoplayer/util/ViewResolver.java +0 -42
- package/ios/custom/react-native-theoplayer_custom_ios.podspec +0 -36
|
@@ -1,442 +0,0 @@
|
|
|
1
|
-
package com.theoplayer;
|
|
2
|
-
|
|
3
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.DURATIONCHANGE;
|
|
4
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.ENDED;
|
|
5
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.ERROR;
|
|
6
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.LOADEDDATA;
|
|
7
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.LOADEDMETADATA;
|
|
8
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.LOADSTART;
|
|
9
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.PAUSE;
|
|
10
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.PLAY;
|
|
11
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.PLAYING;
|
|
12
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.PROGRESS;
|
|
13
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.READYSTATECHANGE;
|
|
14
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.SEEKED;
|
|
15
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.SEEKING;
|
|
16
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.SEGMENTNOTFOUND;
|
|
17
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.SOURCECHANGE;
|
|
18
|
-
import static com.theoplayer.android.api.event.player.PlayerEventTypes.TIMEUPDATE;
|
|
19
|
-
|
|
20
|
-
import android.util.Log;
|
|
21
|
-
import android.view.View;
|
|
22
|
-
|
|
23
|
-
import androidx.annotation.NonNull;
|
|
24
|
-
import androidx.annotation.Nullable;
|
|
25
|
-
import androidx.annotation.StringDef;
|
|
26
|
-
|
|
27
|
-
import com.facebook.react.bridge.Arguments;
|
|
28
|
-
import com.facebook.react.bridge.ReactContext;
|
|
29
|
-
import com.facebook.react.bridge.WritableArray;
|
|
30
|
-
import com.facebook.react.bridge.WritableMap;
|
|
31
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
32
|
-
import com.theoplayer.ads.AdEventAdapter;
|
|
33
|
-
import com.theoplayer.android.api.error.THEOplayerException;
|
|
34
|
-
import com.theoplayer.android.api.event.EventListener;
|
|
35
|
-
import com.theoplayer.android.api.event.EventType;
|
|
36
|
-
import com.theoplayer.android.api.event.player.DurationChangeEvent;
|
|
37
|
-
import com.theoplayer.android.api.event.player.ErrorEvent;
|
|
38
|
-
import com.theoplayer.android.api.event.player.LoadedMetadataEvent;
|
|
39
|
-
import com.theoplayer.android.api.event.player.PauseEvent;
|
|
40
|
-
import com.theoplayer.android.api.event.player.ReadyStateChangeEvent;
|
|
41
|
-
import com.theoplayer.android.api.event.player.SeekedEvent;
|
|
42
|
-
import com.theoplayer.android.api.event.player.SeekingEvent;
|
|
43
|
-
import com.theoplayer.android.api.event.player.SegmentNotFoundEvent;
|
|
44
|
-
import com.theoplayer.android.api.event.player.TimeUpdateEvent;
|
|
45
|
-
import com.theoplayer.android.api.event.track.texttrack.AddCueEvent;
|
|
46
|
-
import com.theoplayer.android.api.event.track.texttrack.RemoveCueEvent;
|
|
47
|
-
import com.theoplayer.android.api.event.track.texttrack.TextTrackEventTypes;
|
|
48
|
-
import com.theoplayer.android.api.event.track.texttrack.list.AddTrackEvent;
|
|
49
|
-
import com.theoplayer.android.api.event.track.texttrack.list.RemoveTrackEvent;
|
|
50
|
-
import com.theoplayer.android.api.event.track.texttrack.list.TextTrackListEventTypes;
|
|
51
|
-
import com.theoplayer.android.api.player.Player;
|
|
52
|
-
import com.theoplayer.android.api.player.track.mediatrack.MediaTrack;
|
|
53
|
-
import com.theoplayer.android.api.player.track.mediatrack.quality.AudioQuality;
|
|
54
|
-
import com.theoplayer.android.api.player.track.mediatrack.quality.VideoQuality;
|
|
55
|
-
import com.theoplayer.android.api.player.track.texttrack.TextTrack;
|
|
56
|
-
import com.theoplayer.track.TextTrackCueEventType;
|
|
57
|
-
import com.theoplayer.track.TrackEventType;
|
|
58
|
-
import com.theoplayer.util.TypeUtils;
|
|
59
|
-
|
|
60
|
-
import java.lang.annotation.Retention;
|
|
61
|
-
import java.lang.annotation.RetentionPolicy;
|
|
62
|
-
import java.util.Date;
|
|
63
|
-
import java.util.HashMap;
|
|
64
|
-
import java.util.Map;
|
|
65
|
-
|
|
66
|
-
@SuppressWarnings({"rawtypes", "unchecked"})
|
|
67
|
-
public class VideoEventEmitter {
|
|
68
|
-
|
|
69
|
-
private static final String EVENT_SOURCECHANGE = "onNativeSourceChange";
|
|
70
|
-
private static final String EVENT_LOADSTART = "onNativeLoadStart";
|
|
71
|
-
private static final String EVENT_LOADEDMETADATA = "onNativeLoadedMetadata";
|
|
72
|
-
private static final String EVENT_LOADEDDATA = "onNativeLoadedData";
|
|
73
|
-
private static final String EVENT_PLAY = "onNativePlay";
|
|
74
|
-
private static final String EVENT_PLAYING = "onNativePlaying";
|
|
75
|
-
private static final String EVENT_PAUSE = "onNativePause";
|
|
76
|
-
private static final String EVENT_ERROR = "onNativeError";
|
|
77
|
-
private static final String EVENT_PROGRESS = "onNativeProgress";
|
|
78
|
-
private static final String EVENT_SEEKING = "onNativeSeeking";
|
|
79
|
-
private static final String EVENT_SEEKED = "onNativeSeeked";
|
|
80
|
-
private static final String EVENT_ENDED = "onNativeEnded";
|
|
81
|
-
private static final String EVENT_READYSTATECHANGE = "onNativeReadyStateChange";
|
|
82
|
-
private static final String EVENT_TIMEUPDATE = "onNativeTimeUpdate";
|
|
83
|
-
private static final String EVENT_DURATIONCHANGE = "onNativeDurationChange";
|
|
84
|
-
private static final String EVENT_SEGMENTNOTFOUND = "onNativeSegmentNotFound";
|
|
85
|
-
private static final String EVENT_TEXTTRACK_LIST_EVENT = "onNativeTextTrackListEvent";
|
|
86
|
-
private static final String EVENT_TEXTTRACK_EVENT = "onNativeTextTrackEvent";
|
|
87
|
-
private static final String EVENT_AD_EVENT = "onNativeAdEvent";
|
|
88
|
-
private static final String EVENT_FULLSCREEN_WILL_PRESENT = "onNativeFullscreenPlayerWillPresent";
|
|
89
|
-
private static final String EVENT_FULLSCREEN_DID_PRESENT = "onNativeFullscreenPlayerDidPresent";
|
|
90
|
-
private static final String EVENT_FULLSCREEN_WILL_DISMISS = "onNativeFullscreenPlayerWillDismiss";
|
|
91
|
-
private static final String EVENT_FULLSCREEN_DID_DISMISS = "onNativeFullscreenPlayerDidDismiss";
|
|
92
|
-
|
|
93
|
-
private static final String TAG = VideoEventEmitter.class.getName();
|
|
94
|
-
|
|
95
|
-
static final String[] Events = {
|
|
96
|
-
EVENT_SOURCECHANGE,
|
|
97
|
-
EVENT_LOADSTART,
|
|
98
|
-
EVENT_LOADEDMETADATA,
|
|
99
|
-
EVENT_LOADEDDATA,
|
|
100
|
-
EVENT_PLAY,
|
|
101
|
-
EVENT_PLAYING,
|
|
102
|
-
EVENT_PAUSE,
|
|
103
|
-
EVENT_ERROR,
|
|
104
|
-
EVENT_PROGRESS,
|
|
105
|
-
EVENT_SEEKING,
|
|
106
|
-
EVENT_SEEKED,
|
|
107
|
-
EVENT_ENDED,
|
|
108
|
-
EVENT_READYSTATECHANGE,
|
|
109
|
-
EVENT_TIMEUPDATE,
|
|
110
|
-
EVENT_DURATIONCHANGE,
|
|
111
|
-
EVENT_SEGMENTNOTFOUND,
|
|
112
|
-
EVENT_TEXTTRACK_LIST_EVENT,
|
|
113
|
-
EVENT_TEXTTRACK_EVENT,
|
|
114
|
-
EVENT_AD_EVENT,
|
|
115
|
-
EVENT_FULLSCREEN_WILL_PRESENT,
|
|
116
|
-
EVENT_FULLSCREEN_DID_PRESENT,
|
|
117
|
-
EVENT_FULLSCREEN_WILL_DISMISS,
|
|
118
|
-
EVENT_FULLSCREEN_DID_DISMISS,
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
@Retention(RetentionPolicy.SOURCE)
|
|
122
|
-
@StringDef({
|
|
123
|
-
EVENT_SOURCECHANGE,
|
|
124
|
-
EVENT_LOADSTART,
|
|
125
|
-
EVENT_LOADEDMETADATA,
|
|
126
|
-
EVENT_LOADEDDATA,
|
|
127
|
-
EVENT_PLAY,
|
|
128
|
-
EVENT_PLAYING,
|
|
129
|
-
EVENT_PAUSE,
|
|
130
|
-
EVENT_ERROR,
|
|
131
|
-
EVENT_PROGRESS,
|
|
132
|
-
EVENT_SEEKING,
|
|
133
|
-
EVENT_SEEKED,
|
|
134
|
-
EVENT_ENDED,
|
|
135
|
-
EVENT_READYSTATECHANGE,
|
|
136
|
-
EVENT_TIMEUPDATE,
|
|
137
|
-
EVENT_DURATIONCHANGE,
|
|
138
|
-
EVENT_SEGMENTNOTFOUND,
|
|
139
|
-
EVENT_TEXTTRACK_LIST_EVENT,
|
|
140
|
-
EVENT_TEXTTRACK_EVENT,
|
|
141
|
-
EVENT_AD_EVENT,
|
|
142
|
-
EVENT_FULLSCREEN_WILL_PRESENT,
|
|
143
|
-
EVENT_FULLSCREEN_DID_PRESENT,
|
|
144
|
-
EVENT_FULLSCREEN_WILL_DISMISS,
|
|
145
|
-
EVENT_FULLSCREEN_DID_DISMISS
|
|
146
|
-
})
|
|
147
|
-
public @interface VideoEvents {
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
private static final String EVENT_PROP_CURRENT_TIME = "currentTime";
|
|
151
|
-
private static final String EVENT_PROP_CURRENT_PROGRAM_DATE_TIME = "currentProgramDateTime";
|
|
152
|
-
private static final String EVENT_PROP_DURATION = "duration";
|
|
153
|
-
private static final String EVENT_PROP_READYSTATE = "readyState";
|
|
154
|
-
private static final String EVENT_PROP_ERROR = "error";
|
|
155
|
-
private static final String EVENT_PROP_ERROR_CODE = "errorCode";
|
|
156
|
-
private static final String EVENT_PROP_ERROR_MESSAGE = "errorMessage";
|
|
157
|
-
private static final String EVENT_PROP_TEXT_TRACKS = "textTracks";
|
|
158
|
-
private static final String EVENT_PROP_AUDIO_TRACKS = "audioTracks";
|
|
159
|
-
private static final String EVENT_PROP_VIDEO_TRACKS = "videoTracks";
|
|
160
|
-
private static final String EVENT_PROP_SELECTED_TEXT_TRACK = "selectedTextTrack";
|
|
161
|
-
private static final String EVENT_PROP_SELECTED_AUDIO_TRACK = "selectedAudioTrack";
|
|
162
|
-
private static final String EVENT_PROP_SELECTED_VIDEO_TRACK = "selectedVideoTrack";
|
|
163
|
-
private static final String EVENT_PROP_SEEKABLE = "seekable";
|
|
164
|
-
private static final String EVENT_PROP_START = "start";
|
|
165
|
-
private static final String EVENT_PROP_END = "end";
|
|
166
|
-
private static final String EVENT_PROP_RETRYCOUNT = "retryCount";
|
|
167
|
-
private static final String EVENT_PROP_SEGMENTSTARTTIME = "segmentStartTime";
|
|
168
|
-
private static final String EVENT_PROP_TRACK = "track";
|
|
169
|
-
private static final String EVENT_PROP_TRACK_UID = "trackUid";
|
|
170
|
-
private static final String EVENT_PROP_CUE = "cue";
|
|
171
|
-
private static final String EVENT_PROP_TYPE = "type";
|
|
172
|
-
|
|
173
|
-
private final RCTEventEmitter eventEmitter;
|
|
174
|
-
private int viewId = View.NO_ID;
|
|
175
|
-
private final HashMap<EventType, EventListener> playerListeners = new HashMap<>();
|
|
176
|
-
private final HashMap<EventType, EventListener> textTrackListeners = new HashMap<>();
|
|
177
|
-
private final ReactTHEOplayerView playerView;
|
|
178
|
-
|
|
179
|
-
private AdEventAdapter adEventAdapter;
|
|
180
|
-
private long lastTimeUpdate = 0;
|
|
181
|
-
private double lastCurrentTime = 0.0;
|
|
182
|
-
|
|
183
|
-
VideoEventEmitter(@NonNull ReactContext reactContext, @NonNull final ReactTHEOplayerView playerView) {
|
|
184
|
-
this.eventEmitter = reactContext.getJSModule(RCTEventEmitter.class);
|
|
185
|
-
this.playerView = playerView;
|
|
186
|
-
|
|
187
|
-
// Create listeners
|
|
188
|
-
playerListeners.put(SOURCECHANGE, event -> receiveEvent(EVENT_SOURCECHANGE, null));
|
|
189
|
-
playerListeners.put(LOADSTART, event -> receiveEvent(EVENT_LOADSTART, null));
|
|
190
|
-
playerListeners.put(LOADEDMETADATA, (EventListener<LoadedMetadataEvent>) this::onLoadedMetadata);
|
|
191
|
-
playerListeners.put(LOADEDDATA, event -> receiveEvent(EVENT_LOADEDDATA, null));
|
|
192
|
-
playerListeners.put(PLAY, event -> receiveEvent(EVENT_PLAY, null));
|
|
193
|
-
playerListeners.put(PLAYING, event -> receiveEvent(EVENT_PLAYING, null));
|
|
194
|
-
playerListeners.put(READYSTATECHANGE, (EventListener<ReadyStateChangeEvent>) this::onReadyState);
|
|
195
|
-
playerListeners.put(SEEKING, (EventListener<SeekingEvent>) this::onSeeking);
|
|
196
|
-
playerListeners.put(SEEKED, (EventListener<SeekedEvent>) this::onSeeked);
|
|
197
|
-
playerListeners.put(ERROR, (EventListener<ErrorEvent>) this::onError);
|
|
198
|
-
playerListeners.put(ENDED, event -> receiveEvent(EVENT_ENDED, null));
|
|
199
|
-
playerListeners.put(PROGRESS, event -> onProgress());
|
|
200
|
-
playerListeners.put(TIMEUPDATE, (EventListener<TimeUpdateEvent>) this::onTimeUpdate);
|
|
201
|
-
playerListeners.put(DURATIONCHANGE, (EventListener<DurationChangeEvent>) this::onDurationChange);
|
|
202
|
-
playerListeners.put(PAUSE, (EventListener<PauseEvent>) this::onPause);
|
|
203
|
-
playerListeners.put(SEGMENTNOTFOUND, (EventListener<SegmentNotFoundEvent>) this::onSegmentNotFound);
|
|
204
|
-
|
|
205
|
-
textTrackListeners.put(TextTrackListEventTypes.ADDTRACK, (EventListener<AddTrackEvent>) this::onTextTrackAdd);
|
|
206
|
-
textTrackListeners.put(TextTrackListEventTypes.REMOVETRACK, (EventListener<RemoveTrackEvent>) this::onTextTrackRemove);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
public void setViewId(int viewId) {
|
|
210
|
-
this.viewId = viewId;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
public void emitError(@NonNull THEOplayerException exception) {
|
|
214
|
-
emitError(exception.getCode().name(), exception.getMessage());
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
public void emitError(@NonNull String code, @Nullable String message) {
|
|
218
|
-
WritableMap error = Arguments.createMap();
|
|
219
|
-
error.putString(EVENT_PROP_ERROR_CODE, code);
|
|
220
|
-
error.putString(EVENT_PROP_ERROR_MESSAGE, message != null ? message : "");
|
|
221
|
-
WritableMap payload = Arguments.createMap();
|
|
222
|
-
payload.putMap(EVENT_PROP_ERROR, error);
|
|
223
|
-
receiveEvent(EVENT_ERROR, payload);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
private void onLoadedMetadata(final LoadedMetadataEvent event) {
|
|
227
|
-
WritableMap payload = Arguments.createMap();
|
|
228
|
-
payload.putArray(EVENT_PROP_TEXT_TRACKS, playerView.getTextTrackInfo());
|
|
229
|
-
payload.putArray(EVENT_PROP_AUDIO_TRACKS, playerView.getAudioTrackInfo());
|
|
230
|
-
payload.putArray(EVENT_PROP_VIDEO_TRACKS, playerView.getVideoTrackInfo());
|
|
231
|
-
TextTrack selectedTextTrack = playerView.getSelectedTextTrack();
|
|
232
|
-
if (selectedTextTrack != null) {
|
|
233
|
-
payload.putInt(EVENT_PROP_SELECTED_TEXT_TRACK, selectedTextTrack.getUid());
|
|
234
|
-
}
|
|
235
|
-
MediaTrack<AudioQuality> selectedAudioTrack = playerView.getSelectedAudioTrack();
|
|
236
|
-
if (selectedAudioTrack != null) {
|
|
237
|
-
payload.putInt(EVENT_PROP_SELECTED_AUDIO_TRACK, selectedAudioTrack.getUid());
|
|
238
|
-
}
|
|
239
|
-
MediaTrack<VideoQuality> selectedVideoTrack = playerView.getSelectedVideoTrack();
|
|
240
|
-
if (selectedVideoTrack != null) {
|
|
241
|
-
payload.putInt(EVENT_PROP_SELECTED_VIDEO_TRACK, selectedVideoTrack.getUid());
|
|
242
|
-
}
|
|
243
|
-
payload.putDouble(EVENT_PROP_DURATION, playerView.getDuration());
|
|
244
|
-
receiveEvent(EVENT_LOADEDMETADATA, payload);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
private void onSeeking(@NonNull SeekingEvent event) {
|
|
248
|
-
WritableMap payload = Arguments.createMap();
|
|
249
|
-
payload.putDouble(EVENT_PROP_CURRENT_TIME, (long) (1e03 * event.getCurrentTime()));
|
|
250
|
-
receiveEvent(EVENT_SEEKING, payload);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
private void onSeeked(@NonNull SeekedEvent event) {
|
|
254
|
-
WritableMap payload = Arguments.createMap();
|
|
255
|
-
payload.putDouble(EVENT_PROP_CURRENT_TIME, (long) (1e03 * event.getCurrentTime()));
|
|
256
|
-
receiveEvent(EVENT_SEEKED, payload);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
private boolean shouldSkipTimeUpdate(long now, double currentTime) {
|
|
260
|
-
final TimeUpdateRate timeUpdateRate = BuildConfig.TIMEUPDATE_RATE;
|
|
261
|
-
|
|
262
|
-
// No limited update rate.
|
|
263
|
-
if (timeUpdateRate == TimeUpdateRate.UNLIMITED) {
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Try to align updates on second boundary.
|
|
268
|
-
if (Math.floor(lastCurrentTime) != Math.floor(currentTime)) {
|
|
269
|
-
return false;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// Limit update rate.
|
|
273
|
-
long dt = now - lastTimeUpdate;
|
|
274
|
-
return (timeUpdateRate == TimeUpdateRate.LIMITED_ONE_HZ && dt < 1e03) ||
|
|
275
|
-
(timeUpdateRate == TimeUpdateRate.LIMITED_TWO_HZ && dt < 500) ||
|
|
276
|
-
(timeUpdateRate == TimeUpdateRate.LIMITED_THREE_HZ && dt < 333);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
private void onPause(@NonNull final PauseEvent event) {
|
|
280
|
-
Player player = playerView.getPlayer();
|
|
281
|
-
// Do not forward the pause event in case the content player is paused because the ad player starts.
|
|
282
|
-
if (player != null && !playerView.getAdsApi().isPlaying()) {
|
|
283
|
-
receiveEvent(EVENT_PAUSE, null);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
private void onTimeUpdate(@NonNull final TimeUpdateEvent event) {
|
|
288
|
-
final long now = System.currentTimeMillis();
|
|
289
|
-
final double currentTime = event.getCurrentTime();
|
|
290
|
-
|
|
291
|
-
// Check for limited timeUpdates
|
|
292
|
-
if (shouldSkipTimeUpdate(now, currentTime)) {
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
lastTimeUpdate = now;
|
|
296
|
-
lastCurrentTime = currentTime;
|
|
297
|
-
|
|
298
|
-
WritableMap payload = Arguments.createMap();
|
|
299
|
-
payload.putDouble(EVENT_PROP_CURRENT_TIME, (long) (1e03 * currentTime));
|
|
300
|
-
final Date currentProgramDateTime = event.getCurrentProgramDateTime();
|
|
301
|
-
if (currentProgramDateTime != null) {
|
|
302
|
-
payload.putDouble(EVENT_PROP_CURRENT_PROGRAM_DATE_TIME, (long) (1e03 * currentProgramDateTime.getTime()));
|
|
303
|
-
}
|
|
304
|
-
receiveEvent(EVENT_TIMEUPDATE, payload);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
private void onReadyState(@NonNull final ReadyStateChangeEvent event) {
|
|
308
|
-
WritableMap payload = Arguments.createMap();
|
|
309
|
-
payload.putInt(EVENT_PROP_READYSTATE, event.getReadyState().ordinal());
|
|
310
|
-
receiveEvent(EVENT_READYSTATECHANGE, payload);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
private void onDurationChange(final @NonNull DurationChangeEvent event) {
|
|
314
|
-
WritableMap payload = Arguments.createMap();
|
|
315
|
-
payload.putDouble(EVENT_PROP_DURATION, TypeUtils.INSTANCE.encodeInfNan(1e03 * event.getDuration()));
|
|
316
|
-
receiveEvent(EVENT_DURATIONCHANGE, payload);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
private void onError(@NonNull final ErrorEvent event) {
|
|
320
|
-
emitError(event.getErrorObject());
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
private void onProgress() {
|
|
324
|
-
playerView.getSeekableRange(timeRanges -> {
|
|
325
|
-
final WritableMap payload = Arguments.createMap();
|
|
326
|
-
if (timeRanges != null) {
|
|
327
|
-
final WritableArray seekable = Arguments.createArray();
|
|
328
|
-
for (int i = 0; i < timeRanges.length(); i++) {
|
|
329
|
-
WritableMap range = Arguments.createMap();
|
|
330
|
-
range.putDouble(EVENT_PROP_START, 1e03 * timeRanges.getStart(i));
|
|
331
|
-
range.putDouble(EVENT_PROP_END, 1e03 * timeRanges.getEnd(i));
|
|
332
|
-
seekable.pushMap(range);
|
|
333
|
-
}
|
|
334
|
-
payload.putArray(EVENT_PROP_SEEKABLE, seekable);
|
|
335
|
-
}
|
|
336
|
-
receiveEvent(EVENT_PROGRESS, payload);
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
private void onSegmentNotFound(@NonNull SegmentNotFoundEvent event) {
|
|
341
|
-
WritableMap payload = Arguments.createMap();
|
|
342
|
-
payload.putDouble(EVENT_PROP_SEGMENTSTARTTIME, 1e03 * event.getSegmentStartTime());
|
|
343
|
-
payload.putString(EVENT_PROP_ERROR, event.getError());
|
|
344
|
-
payload.putInt(EVENT_PROP_RETRYCOUNT, event.getRetryCount());
|
|
345
|
-
receiveEvent(EVENT_SEGMENTNOTFOUND, payload);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
private void onTextTrackAdd(@NonNull AddTrackEvent event) {
|
|
349
|
-
WritableMap payload = Arguments.createMap();
|
|
350
|
-
TextTrack textTrack = event.getTrack();
|
|
351
|
-
payload.putMap(EVENT_PROP_TRACK, playerView.getTextTrackInfo(textTrack));
|
|
352
|
-
payload.putInt(EVENT_PROP_TYPE, TrackEventType.ADD_TRACK.type);
|
|
353
|
-
textTrack.addEventListener(TextTrackEventTypes.ADDCUE, this::onTextTrackAddCue);
|
|
354
|
-
textTrack.addEventListener(TextTrackEventTypes.REMOVECUE, this::onTextTrackRemoveCue);
|
|
355
|
-
receiveEvent(EVENT_TEXTTRACK_LIST_EVENT, payload);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
private void onTextTrackRemove(@NonNull RemoveTrackEvent event) {
|
|
359
|
-
WritableMap payload = Arguments.createMap();
|
|
360
|
-
TextTrack textTrack = event.getTrack();
|
|
361
|
-
payload.putMap(EVENT_PROP_TRACK, playerView.getTextTrackInfo(textTrack));
|
|
362
|
-
payload.putInt(EVENT_PROP_TYPE, TrackEventType.REMOVE_TRACK.type);
|
|
363
|
-
textTrack.removeEventListener(TextTrackEventTypes.ADDCUE, this::onTextTrackAddCue);
|
|
364
|
-
textTrack.removeEventListener(TextTrackEventTypes.REMOVECUE, this::onTextTrackRemoveCue);
|
|
365
|
-
receiveEvent(EVENT_TEXTTRACK_LIST_EVENT, payload);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
private void onTextTrackAddCue(@NonNull AddCueEvent event) {
|
|
369
|
-
WritableMap payload = Arguments.createMap();
|
|
370
|
-
payload.putInt(EVENT_PROP_TRACK_UID, event.getTrack().getUid());
|
|
371
|
-
payload.putInt(EVENT_PROP_TYPE, TextTrackCueEventType.ADD_CUE.type);
|
|
372
|
-
payload.putMap(EVENT_PROP_CUE, playerView.getTextTrackCueInfo(event.getCue()));
|
|
373
|
-
receiveEvent(EVENT_TEXTTRACK_EVENT, payload);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
private void onTextTrackRemoveCue(@NonNull RemoveCueEvent event) {
|
|
377
|
-
WritableMap payload = Arguments.createMap();
|
|
378
|
-
payload.putInt(EVENT_PROP_TRACK_UID, event.getTrack().getUid());
|
|
379
|
-
payload.putInt(EVENT_PROP_TYPE, TextTrackCueEventType.REMOVE_CUE.type);
|
|
380
|
-
payload.putMap(EVENT_PROP_CUE, playerView.getTextTrackCueInfo(event.getCue()));
|
|
381
|
-
receiveEvent(EVENT_TEXTTRACK_EVENT, payload);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
public void onFullscreenWillPresent() {
|
|
385
|
-
receiveEvent(EVENT_FULLSCREEN_WILL_PRESENT, null);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
public void onFullscreenDidPresent() {
|
|
389
|
-
receiveEvent(EVENT_FULLSCREEN_DID_PRESENT, null);
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
public void onFullscreenWillDismiss() {
|
|
393
|
-
receiveEvent(EVENT_FULLSCREEN_WILL_DISMISS, null);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
public void onFullscreenDidDismiss() {
|
|
397
|
-
receiveEvent(EVENT_FULLSCREEN_DID_DISMISS, null);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
private void receiveEvent(@VideoEvents String type, WritableMap event) {
|
|
401
|
-
if (BuildConfig.LOG_PLAYER_EVENTS) {
|
|
402
|
-
try {
|
|
403
|
-
Log.d(TAG, "receiveEvent " + type + " " + event);
|
|
404
|
-
} catch (RuntimeException ignore) {
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
eventEmitter.receiveEvent(viewId, type, event);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
public void attachListeners(@NonNull Player player) {
|
|
411
|
-
// Attach player listeners
|
|
412
|
-
for (Map.Entry<EventType, EventListener> entry : playerListeners.entrySet()) {
|
|
413
|
-
player.addEventListener(entry.getKey(), entry.getValue());
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// Attach text track listeners
|
|
417
|
-
for (Map.Entry<EventType, EventListener> entry : textTrackListeners.entrySet()) {
|
|
418
|
-
player.getTextTracks().addEventListener(entry.getKey(), entry.getValue());
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// Attach AdStateHolder
|
|
422
|
-
if (BuildConfig.EXTENSION_ADS) {
|
|
423
|
-
adEventAdapter = new AdEventAdapter(playerView.getAdsApi(), payload -> receiveEvent(EVENT_AD_EVENT, payload));
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
public void removeListeners(@NonNull Player player) {
|
|
428
|
-
// Remove player listeners
|
|
429
|
-
for (Map.Entry<EventType, EventListener> entry : playerListeners.entrySet()) {
|
|
430
|
-
player.removeEventListener(entry.getKey(), entry.getValue());
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// Remove text track listeners
|
|
434
|
-
for (Map.Entry<EventType, EventListener> entry : textTrackListeners.entrySet()) {
|
|
435
|
-
player.getTextTracks().removeEventListener(entry.getKey(), entry.getValue());
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
if (adEventAdapter != null) {
|
|
439
|
-
adEventAdapter.destroy();
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
package com.theoplayer.ads;
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.bridge.Arguments;
|
|
4
|
-
import com.facebook.react.bridge.WritableMap;
|
|
5
|
-
import com.theoplayer.android.api.ads.wrapper.AdEventListener;
|
|
6
|
-
import com.theoplayer.android.api.ads.wrapper.AdsApiWrapper;
|
|
7
|
-
import com.theoplayer.android.api.ads.Ad;
|
|
8
|
-
import com.theoplayer.android.api.ads.AdBreak;
|
|
9
|
-
import com.theoplayer.android.api.ads.ima.GoogleImaAdEventType;
|
|
10
|
-
import com.theoplayer.android.api.event.EventType;
|
|
11
|
-
import com.theoplayer.android.api.event.ads.AdEvent;
|
|
12
|
-
|
|
13
|
-
public class AdEventAdapter {
|
|
14
|
-
private final AdsApiWrapper adsApi;
|
|
15
|
-
private final AdEventListener eventListener;
|
|
16
|
-
|
|
17
|
-
private static final String EVENT_PROP_AD = "ad";
|
|
18
|
-
private static final String EVENT_PROP_TYPE = "type";
|
|
19
|
-
|
|
20
|
-
private final static GoogleImaAdEventType[] ALL_AD_EVENTS = {
|
|
21
|
-
GoogleImaAdEventType.LOADED,
|
|
22
|
-
GoogleImaAdEventType.AD_BREAK_STARTED,
|
|
23
|
-
GoogleImaAdEventType.STARTED,
|
|
24
|
-
GoogleImaAdEventType.FIRST_QUARTILE,
|
|
25
|
-
GoogleImaAdEventType.MIDPOINT,
|
|
26
|
-
GoogleImaAdEventType.THIRD_QUARTILE,
|
|
27
|
-
GoogleImaAdEventType.COMPLETED,
|
|
28
|
-
GoogleImaAdEventType.AD_BREAK_ENDED,
|
|
29
|
-
GoogleImaAdEventType.SKIPPED,
|
|
30
|
-
GoogleImaAdEventType.AD_ERROR,
|
|
31
|
-
GoogleImaAdEventType.AD_BUFFERING,
|
|
32
|
-
GoogleImaAdEventType.AD_BREAK_FETCH_ERROR
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
public interface AdEventEmitter {
|
|
36
|
-
void emit(WritableMap payload);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public AdEventAdapter(AdsApiWrapper adsApi, AdEventEmitter eventEmitter) {
|
|
40
|
-
this.adsApi = adsApi;
|
|
41
|
-
|
|
42
|
-
eventListener = new AdEventListener() {
|
|
43
|
-
@Override
|
|
44
|
-
public <E extends AdEvent<?>> void onAdEvent(EventType<E> eventType, Ad ad) {
|
|
45
|
-
WritableMap payload = Arguments.createMap();
|
|
46
|
-
payload.putString(EVENT_PROP_TYPE, mapAdType(eventType));
|
|
47
|
-
if (ad != null) {
|
|
48
|
-
payload.putMap(EVENT_PROP_AD, AdInfo.fromAd(ad));
|
|
49
|
-
}
|
|
50
|
-
eventEmitter.emit(payload);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@Override
|
|
54
|
-
public <E extends AdEvent<?>> void onAdBreakEvent(EventType<E> eventType, AdBreak adBreak) {
|
|
55
|
-
WritableMap payload = Arguments.createMap();
|
|
56
|
-
payload.putString(EVENT_PROP_TYPE, mapAdType(eventType));
|
|
57
|
-
if (adBreak != null) {
|
|
58
|
-
payload.putMap(EVENT_PROP_AD, AdInfo.fromAdBreak(adBreak));
|
|
59
|
-
}
|
|
60
|
-
eventEmitter.emit(payload);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
for (GoogleImaAdEventType eventType: ALL_AD_EVENTS) {
|
|
65
|
-
adsApi.addEventListener(eventType, eventListener);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
private String mapAdType(EventType<?> eventType) {
|
|
70
|
-
switch ((GoogleImaAdEventType)eventType) {
|
|
71
|
-
case LOADED: return "adloaded";
|
|
72
|
-
case STARTED: return "adbegin";
|
|
73
|
-
case FIRST_QUARTILE: return "adfirstquartile";
|
|
74
|
-
case MIDPOINT: return "admidpoint";
|
|
75
|
-
case THIRD_QUARTILE: return "adthirdquartile";
|
|
76
|
-
case COMPLETED: return "adend";
|
|
77
|
-
case SKIPPED: return "adskip";
|
|
78
|
-
case AD_ERROR: return "aderror";
|
|
79
|
-
case AD_BUFFERING: return "adbuffering";
|
|
80
|
-
case AD_BREAK_STARTED: return "adbreakbegin";
|
|
81
|
-
case AD_BREAK_ENDED: return "adbreakend";
|
|
82
|
-
case AD_BREAK_FETCH_ERROR: return "aderror";
|
|
83
|
-
default: return eventType.getName().toLowerCase();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
public void destroy() {
|
|
88
|
-
for (GoogleImaAdEventType eventType: ALL_AD_EVENTS) {
|
|
89
|
-
adsApi.removeEventListener(eventType, eventListener);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|