react-native-theoplayer 1.0.0 → 1.1.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/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +54 -18
- package/android/build.gradle +90 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradlew +185 -0
- package/android/gradlew.bat +89 -0
- package/android/src/main/AndroidManifest.xml +6 -0
- package/android/src/main/java/com/theoplayer/PlayerConfigHelper.java +30 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.java +27 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.java +420 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerViewManager.java +114 -0
- package/android/src/main/java/com/theoplayer/SourceHelper.java +224 -0
- package/android/src/main/java/com/theoplayer/TimeUpdateRate.java +8 -0
- package/android/src/main/java/com/theoplayer/VideoEventEmitter.java +410 -0
- package/android/src/main/java/com/theoplayer/track/TextTrackCueEventType.java +11 -0
- package/android/src/main/java/com/theoplayer/track/TrackEventType.java +11 -0
- package/android/src/main/java/com/theoplayer/track/TrackListInfo.java +204 -0
- package/ios/THEOplayerRCTBridge.m +46 -0
- package/ios/THEOplayerRCTDebug.swift +16 -0
- package/ios/THEOplayerRCTMetadataAggregator.swift +169 -0
- package/ios/THEOplayerRCTView.swift +422 -0
- package/ios/THEOplayerRCTViewEventHandler.swift +493 -0
- package/ios/THEOplayerRCTViewManager.swift +23 -0
- package/ios/Theoplayer-Bridging-Header.h +5 -0
- package/ios/Theoplayer.xcodeproj/project.pbxproj +296 -0
- package/lib/commonjs/api/THEOplayerView.js +6 -0
- package/lib/commonjs/api/THEOplayerView.js.map +1 -0
- package/lib/commonjs/api/barrel.js +97 -0
- package/lib/commonjs/api/barrel.js.map +1 -0
- package/lib/commonjs/api/config/PlayerConfiguration.js +2 -0
- package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -0
- package/lib/commonjs/api/config/barrel.js +19 -0
- package/lib/commonjs/api/config/barrel.js.map +1 -0
- package/lib/commonjs/api/error/PlayerError.js +2 -0
- package/lib/commonjs/api/error/PlayerError.js.map +1 -0
- package/lib/commonjs/api/error/barrel.js +19 -0
- package/lib/commonjs/api/error/barrel.js.map +1 -0
- package/lib/commonjs/api/event/PlayerEvent.js +6 -0
- package/lib/commonjs/api/event/PlayerEvent.js.map +1 -0
- package/lib/commonjs/api/event/TrackEvent.js +22 -0
- package/lib/commonjs/api/event/TrackEvent.js.map +1 -0
- package/lib/commonjs/api/event/barrel.js +32 -0
- package/lib/commonjs/api/event/barrel.js.map +1 -0
- package/lib/commonjs/api/source/SourceDescription.js +6 -0
- package/lib/commonjs/api/source/SourceDescription.js.map +1 -0
- package/lib/commonjs/api/source/ads/Ads.js +2 -0
- package/lib/commonjs/api/source/ads/Ads.js.map +1 -0
- package/lib/commonjs/api/source/barrel.js +58 -0
- package/lib/commonjs/api/source/barrel.js.map +1 -0
- package/lib/commonjs/api/source/dash/DashPlaybackConfiguration.js +2 -0
- package/lib/commonjs/api/source/dash/DashPlaybackConfiguration.js.map +1 -0
- package/lib/commonjs/api/source/dash/barrel.js +19 -0
- package/lib/commonjs/api/source/dash/barrel.js.map +1 -0
- package/lib/commonjs/api/source/drm/DRMConfiguration.js +2 -0
- package/lib/commonjs/api/source/drm/DRMConfiguration.js.map +1 -0
- package/lib/commonjs/api/source/drm/barrel.js +19 -0
- package/lib/commonjs/api/source/drm/barrel.js.map +1 -0
- package/lib/commonjs/api/source/hls/HlsPlaybackConfiguration.js +2 -0
- package/lib/commonjs/api/source/hls/HlsPlaybackConfiguration.js.map +1 -0
- package/lib/commonjs/api/source/hls/barrel.js +19 -0
- package/lib/commonjs/api/source/hls/barrel.js.map +1 -0
- package/lib/commonjs/api/timeranges/TimeRange.js +2 -0
- package/lib/commonjs/api/timeranges/TimeRange.js.map +1 -0
- package/lib/commonjs/api/timeranges/barrel.js +19 -0
- package/lib/commonjs/api/timeranges/barrel.js.map +1 -0
- package/lib/commonjs/api/track/MediaTrack.js +6 -0
- package/lib/commonjs/api/track/MediaTrack.js.map +1 -0
- package/lib/commonjs/api/track/Quality.js +2 -0
- package/lib/commonjs/api/track/Quality.js.map +1 -0
- package/lib/commonjs/api/track/TextTrack.js +72 -0
- package/lib/commonjs/api/track/TextTrack.js.map +1 -0
- package/lib/commonjs/api/track/TextTrackCue.js +2 -0
- package/lib/commonjs/api/track/TextTrackCue.js.map +1 -0
- package/lib/commonjs/api/track/Track.js +2 -0
- package/lib/commonjs/api/track/Track.js.map +1 -0
- package/lib/commonjs/api/track/barrel.js +71 -0
- package/lib/commonjs/api/track/barrel.js.map +1 -0
- package/lib/commonjs/index.js +31 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/internal/THEOplayerView.js +274 -0
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -0
- package/lib/commonjs/internal/THEOplayerView.style.js +22 -0
- package/lib/commonjs/internal/THEOplayerView.style.js.map +1 -0
- package/lib/commonjs/internal/THEOplayerView.web.js +512 -0
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -0
- package/lib/commonjs/internal/web/TrackUtils.js +68 -0
- package/lib/commonjs/internal/web/TrackUtils.js.map +1 -0
- package/lib/module/api/THEOplayerView.js +2 -0
- package/lib/module/api/THEOplayerView.js.map +1 -0
- package/lib/module/api/barrel.js +8 -0
- package/lib/module/api/barrel.js.map +1 -0
- package/lib/module/api/config/PlayerConfiguration.js +2 -0
- package/lib/module/api/config/PlayerConfiguration.js.map +1 -0
- package/lib/module/api/config/barrel.js +2 -0
- package/lib/module/api/config/barrel.js.map +1 -0
- package/lib/module/api/error/PlayerError.js +2 -0
- package/lib/module/api/error/PlayerError.js.map +1 -0
- package/lib/module/api/error/barrel.js +2 -0
- package/lib/module/api/error/barrel.js.map +1 -0
- package/lib/module/api/event/PlayerEvent.js +2 -0
- package/lib/module/api/event/PlayerEvent.js.map +1 -0
- package/lib/module/api/event/TrackEvent.js +14 -0
- package/lib/module/api/event/TrackEvent.js.map +1 -0
- package/lib/module/api/event/barrel.js +3 -0
- package/lib/module/api/event/barrel.js.map +1 -0
- package/lib/module/api/source/SourceDescription.js +2 -0
- package/lib/module/api/source/SourceDescription.js.map +1 -0
- package/lib/module/api/source/ads/Ads.js +2 -0
- package/lib/module/api/source/ads/Ads.js.map +1 -0
- package/lib/module/api/source/barrel.js +5 -0
- package/lib/module/api/source/barrel.js.map +1 -0
- package/lib/module/api/source/dash/DashPlaybackConfiguration.js +2 -0
- package/lib/module/api/source/dash/DashPlaybackConfiguration.js.map +1 -0
- package/lib/module/api/source/dash/barrel.js +2 -0
- package/lib/module/api/source/dash/barrel.js.map +1 -0
- package/lib/module/api/source/drm/DRMConfiguration.js +2 -0
- package/lib/module/api/source/drm/DRMConfiguration.js.map +1 -0
- package/lib/module/api/source/drm/barrel.js +2 -0
- package/lib/module/api/source/drm/barrel.js.map +1 -0
- package/lib/module/api/source/hls/HlsPlaybackConfiguration.js +2 -0
- package/lib/module/api/source/hls/HlsPlaybackConfiguration.js.map +1 -0
- package/lib/module/api/source/hls/barrel.js +2 -0
- package/lib/module/api/source/hls/barrel.js.map +1 -0
- package/lib/module/api/timeranges/TimeRange.js +2 -0
- package/lib/module/api/timeranges/TimeRange.js.map +1 -0
- package/lib/module/api/timeranges/barrel.js +2 -0
- package/lib/module/api/timeranges/barrel.js.map +1 -0
- package/lib/module/api/track/MediaTrack.js +2 -0
- package/lib/module/api/track/MediaTrack.js.map +1 -0
- package/lib/module/api/track/Quality.js +2 -0
- package/lib/module/api/track/Quality.js.map +1 -0
- package/lib/module/api/track/TextTrack.js +47 -0
- package/lib/module/api/track/TextTrack.js.map +1 -0
- package/lib/module/api/track/TextTrackCue.js +2 -0
- package/lib/module/api/track/TextTrackCue.js.map +1 -0
- package/lib/module/api/track/Track.js +2 -0
- package/lib/module/api/track/Track.js.map +1 -0
- package/lib/module/api/track/barrel.js +6 -0
- package/lib/module/api/track/barrel.js.map +1 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/internal/THEOplayerView.js +256 -0
- package/lib/module/internal/THEOplayerView.js.map +1 -0
- package/lib/module/internal/THEOplayerView.style.js +12 -0
- package/lib/module/internal/THEOplayerView.style.js.map +1 -0
- package/lib/module/internal/THEOplayerView.web.js +495 -0
- package/lib/module/internal/THEOplayerView.web.js.map +1 -0
- package/lib/module/internal/web/TrackUtils.js +57 -0
- package/lib/module/internal/web/TrackUtils.js.map +1 -0
- package/lib/typescript/babel.config.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/THEOplayerView.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/config/PlayerConfiguration.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/config/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/error/PlayerError.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/error/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/event/PlayerEvent.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/event/TrackEvent.d.ts +5 -0
- package/lib/typescript/lib/commonjs/api/event/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/SourceDescription.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/Ads.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/source/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/dash/DashPlaybackConfiguration.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/source/dash/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/drm/DRMConfiguration.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/source/drm/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/hls/HlsPlaybackConfiguration.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/source/hls/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/timeranges/TimeRange.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/timeranges/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/track/MediaTrack.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/track/Quality.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/track/TextTrack.d.ts +21 -0
- package/lib/typescript/lib/commonjs/api/track/TextTrackCue.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/track/Track.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/track/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/index.d.ts +3 -0
- package/lib/typescript/lib/commonjs/internal/THEOplayerView.d.ts +14 -0
- package/lib/typescript/lib/commonjs/internal/THEOplayerView.style.d.ts +12 -0
- package/lib/typescript/lib/commonjs/internal/THEOplayerView.web.d.ts +17 -0
- package/lib/typescript/lib/commonjs/internal/web/TrackUtils.d.ts +30 -0
- package/lib/typescript/lib/module/api/THEOplayerView.d.ts +1 -0
- package/lib/typescript/lib/module/api/barrel.d.ts +7 -0
- package/lib/typescript/lib/module/api/config/PlayerConfiguration.d.ts +0 -0
- package/lib/typescript/lib/module/api/config/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/error/PlayerError.d.ts +0 -0
- package/lib/typescript/lib/module/api/error/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/event/PlayerEvent.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 -0
- package/lib/typescript/lib/module/api/source/SourceDescription.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/Ads.d.ts +0 -0
- package/lib/typescript/lib/module/api/source/barrel.d.ts +4 -0
- package/lib/typescript/lib/module/api/source/dash/DashPlaybackConfiguration.d.ts +0 -0
- package/lib/typescript/lib/module/api/source/dash/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/drm/DRMConfiguration.d.ts +0 -0
- package/lib/typescript/lib/module/api/source/drm/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/hls/HlsPlaybackConfiguration.d.ts +0 -0
- package/lib/typescript/lib/module/api/source/hls/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/timeranges/TimeRange.d.ts +0 -0
- package/lib/typescript/lib/module/api/timeranges/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/track/MediaTrack.d.ts +1 -0
- package/lib/typescript/lib/module/api/track/Quality.d.ts +0 -0
- package/lib/typescript/lib/module/api/track/TextTrack.d.ts +20 -0
- package/lib/typescript/lib/module/api/track/TextTrackCue.d.ts +0 -0
- package/lib/typescript/lib/module/api/track/Track.d.ts +0 -0
- package/lib/typescript/lib/module/api/track/barrel.d.ts +2 -0
- package/lib/typescript/lib/module/index.d.ts +2 -0
- package/lib/typescript/lib/module/internal/THEOplayerView.d.ts +9 -0
- package/lib/typescript/lib/module/internal/THEOplayerView.style.d.ts +11 -0
- package/lib/typescript/lib/module/internal/THEOplayerView.web.d.ts +10 -0
- package/lib/typescript/lib/module/internal/web/TrackUtils.d.ts +29 -0
- package/lib/typescript/src/api/THEOplayerView.d.ts +178 -0
- package/lib/typescript/src/api/barrel.d.ts +7 -0
- package/lib/typescript/src/api/config/PlayerConfiguration.d.ts +14 -0
- package/lib/typescript/src/api/config/barrel.d.ts +1 -0
- package/lib/typescript/src/api/error/PlayerError.d.ts +4 -0
- package/lib/typescript/src/api/error/barrel.d.ts +1 -0
- package/lib/typescript/src/api/event/PlayerEvent.d.ts +56 -0
- package/lib/typescript/src/api/event/TrackEvent.d.ts +46 -0
- package/lib/typescript/src/api/event/barrel.d.ts +2 -0
- package/lib/typescript/src/api/source/SourceDescription.d.ts +268 -0
- package/lib/typescript/src/api/source/ads/Ads.d.ts +94 -0
- package/lib/typescript/src/api/source/barrel.d.ts +4 -0
- package/lib/typescript/src/api/source/dash/DashPlaybackConfiguration.d.ts +44 -0
- package/lib/typescript/src/api/source/dash/barrel.d.ts +1 -0
- package/lib/typescript/src/api/source/drm/DRMConfiguration.d.ts +262 -0
- package/lib/typescript/src/api/source/drm/barrel.d.ts +1 -0
- package/lib/typescript/src/api/source/hls/HlsPlaybackConfiguration.d.ts +37 -0
- package/lib/typescript/src/api/source/hls/barrel.d.ts +1 -0
- package/lib/typescript/src/api/timeranges/TimeRange.d.ts +4 -0
- package/lib/typescript/src/api/timeranges/barrel.d.ts +1 -0
- package/lib/typescript/src/api/track/MediaTrack.d.ts +55 -0
- package/lib/typescript/src/api/track/Quality.d.ts +79 -0
- package/lib/typescript/src/api/track/TextTrack.d.ts +86 -0
- package/lib/typescript/src/api/track/TextTrackCue.d.ts +38 -0
- package/lib/typescript/src/api/track/Track.d.ts +43 -0
- package/lib/typescript/src/api/track/barrel.d.ts +5 -0
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/internal/THEOplayerView.d.ts +71 -0
- package/lib/typescript/src/internal/THEOplayerView.style.d.ts +11 -0
- package/lib/typescript/src/internal/THEOplayerView.web.d.ts +22 -0
- package/lib/typescript/src/internal/web/TrackUtils.d.ts +5 -0
- package/package.json +115 -9
- package/react-native-theoplayer.podspec +20 -0
- package/src/api/THEOplayerView.ts +221 -0
- package/src/api/barrel.ts +7 -0
- package/src/api/config/PlayerConfiguration.ts +16 -0
- package/src/api/config/barrel.ts +1 -0
- package/src/api/error/PlayerError.ts +4 -0
- package/src/api/error/barrel.ts +1 -0
- package/src/api/event/PlayerEvent.ts +66 -0
- package/src/api/event/TrackEvent.ts +55 -0
- package/src/api/event/barrel.ts +2 -0
- package/src/api/source/SourceDescription.ts +292 -0
- package/src/api/source/ads/Ads.ts +101 -0
- package/src/api/source/barrel.ts +4 -0
- package/src/api/source/dash/DashPlaybackConfiguration.ts +45 -0
- package/src/api/source/dash/barrel.ts +1 -0
- package/src/api/source/drm/DRMConfiguration.ts +287 -0
- package/src/api/source/drm/barrel.ts +1 -0
- package/src/api/source/hls/HlsPlaybackConfiguration.ts +38 -0
- package/src/api/source/hls/barrel.ts +1 -0
- package/src/api/timeranges/TimeRange.ts +5 -0
- package/src/api/timeranges/barrel.ts +1 -0
- package/src/api/track/MediaTrack.ts +65 -0
- package/src/api/track/Quality.ts +91 -0
- package/src/api/track/TextTrack.ts +133 -0
- package/src/api/track/TextTrackCue.ts +42 -0
- package/src/api/track/Track.ts +47 -0
- package/src/api/track/barrel.ts +5 -0
- package/src/index.tsx +2 -0
- package/src/internal/THEOplayerView.style.ts +12 -0
- package/src/internal/THEOplayerView.tsx +301 -0
- package/src/internal/THEOplayerView.web.tsx +399 -0
- package/src/internal/web/TrackUtils.ts +44 -0
- package/.gitattributes +0 -1
- package/index.js +0 -5
- package/ios/IOSNativeToast.h +0 -18
- package/ios/IOSNativeToast.m +0 -49
- package/ios/RNTheoplayer.h +0 -11
- package/ios/RNTheoplayer.m +0 -15
- package/ios/RNTheoplayer.podspec +0 -23
- package/ios/RNTheoplayer.xcodeproj/project.pbxproj +0 -417
- package/ios/RNTheoplayer.xcworkspace/contents.xcworkspacedata +0 -9
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
package com.theoplayer.track;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
|
|
5
|
+
import com.facebook.react.bridge.Arguments;
|
|
6
|
+
import com.facebook.react.bridge.WritableArray;
|
|
7
|
+
import com.facebook.react.bridge.WritableMap;
|
|
8
|
+
import com.theoplayer.android.api.player.track.mediatrack.MediaTrack;
|
|
9
|
+
import com.theoplayer.android.api.player.track.mediatrack.MediaTrackList;
|
|
10
|
+
import com.theoplayer.android.api.player.track.mediatrack.quality.AudioQuality;
|
|
11
|
+
import com.theoplayer.android.api.player.track.mediatrack.quality.QualityList;
|
|
12
|
+
import com.theoplayer.android.api.player.track.mediatrack.quality.VideoQuality;
|
|
13
|
+
import com.theoplayer.android.api.player.track.texttrack.TextTrack;
|
|
14
|
+
import com.theoplayer.android.api.player.track.texttrack.TextTrackList;
|
|
15
|
+
import com.theoplayer.android.api.player.track.texttrack.cue.TextTrackCue;
|
|
16
|
+
import com.theoplayer.android.api.player.track.texttrack.cue.TextTrackCueList;
|
|
17
|
+
|
|
18
|
+
import org.json.JSONObject;
|
|
19
|
+
|
|
20
|
+
public class TrackListInfo {
|
|
21
|
+
|
|
22
|
+
private static final String PROP_ID = "id";
|
|
23
|
+
private static final String PROP_UID = "uid";
|
|
24
|
+
private static final String PROP_KIND = "kind";
|
|
25
|
+
private static final String PROP_LANGUAGE = "language";
|
|
26
|
+
private static final String PROP_MODE = "mode";
|
|
27
|
+
private static final String PROP_LABEL = "label";
|
|
28
|
+
private static final String PROP_TYPE = "type";
|
|
29
|
+
private static final String PROP_CODECS = "codecs";
|
|
30
|
+
private static final String PROP_NAME = "name";
|
|
31
|
+
private static final String PROP_SRC = "src";
|
|
32
|
+
private static final String PROP_FORCED = "forced";
|
|
33
|
+
private static final String PROP_AUDIO_SAMPLING_RATE = "audioSamplingRate";
|
|
34
|
+
private static final String PROP_BANDWIDTH = "bandwidth";
|
|
35
|
+
private static final String PROP_QUALITIES = "qualities";
|
|
36
|
+
private static final String PROP_ACTIVE_QUALITY = "activeQuality";
|
|
37
|
+
private static final String PROP_TARGET_QUALITY = "targetQuality";
|
|
38
|
+
private static final String PROP_WIDTH = "width";
|
|
39
|
+
private static final String PROP_HEIGHT = "height";
|
|
40
|
+
private static final String PROP_FRAMERATE = "framerate";
|
|
41
|
+
private static final String PROP_STARTTIME = "startTime";
|
|
42
|
+
private static final String PROP_ENDTIME = "endTime";
|
|
43
|
+
private static final String PROP_CUES = "cues";
|
|
44
|
+
private static final String PROP_CUE_CONTENT = "content";
|
|
45
|
+
|
|
46
|
+
public static WritableArray fromTextTrackList(final TextTrackList textTrackList) {
|
|
47
|
+
WritableArray textTracks = Arguments.createArray();
|
|
48
|
+
for (int i = 0; i < textTrackList.length(); i++) {
|
|
49
|
+
textTracks.pushMap(fromTextTrack(textTrackList.getItem(i)));
|
|
50
|
+
}
|
|
51
|
+
return textTracks;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public static WritableMap fromTextTrack(final TextTrack textTrack) {
|
|
55
|
+
WritableMap textTrackPayload = Arguments.createMap();
|
|
56
|
+
textTrackPayload.putString(PROP_ID, textTrack.getId());
|
|
57
|
+
textTrackPayload.putInt(PROP_UID, textTrack.getUid());
|
|
58
|
+
textTrackPayload.putString(PROP_KIND, textTrack.getKind());
|
|
59
|
+
textTrackPayload.putString(PROP_LANGUAGE, textTrack.getLanguage());
|
|
60
|
+
textTrackPayload.putString(PROP_MODE, textTrack.getMode().getMode());
|
|
61
|
+
textTrackPayload.putString(PROP_LABEL, textTrack.getLabel());
|
|
62
|
+
textTrackPayload.putString(PROP_TYPE, textTrack.getType().getType());
|
|
63
|
+
|
|
64
|
+
// THEOplayer v3.5+
|
|
65
|
+
textTrackPayload.putString(PROP_SRC, textTrack.getSource());
|
|
66
|
+
textTrackPayload.putBoolean(PROP_FORCED, textTrack.isForced());
|
|
67
|
+
|
|
68
|
+
// Optionally pass cue list.
|
|
69
|
+
final TextTrackCueList cueList = textTrack.getCues();
|
|
70
|
+
if (cueList != null) {
|
|
71
|
+
WritableArray cueListPayload = Arguments.createArray();
|
|
72
|
+
for (TextTrackCue cue : cueList) {
|
|
73
|
+
cueListPayload.pushMap(fromTextTrackCue(cue));
|
|
74
|
+
}
|
|
75
|
+
textTrackPayload.putArray(PROP_CUES, cueListPayload);
|
|
76
|
+
}
|
|
77
|
+
return textTrackPayload;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public static WritableMap fromTextTrackCue(final TextTrackCue cue) {
|
|
81
|
+
WritableMap cuePayload = Arguments.createMap();
|
|
82
|
+
cuePayload.putString(PROP_ID, cue.getId());
|
|
83
|
+
cuePayload.putDouble(PROP_UID, cue.getUid());
|
|
84
|
+
cuePayload.putDouble(PROP_STARTTIME, (long) (1e03 * cue.getStartTime()));
|
|
85
|
+
cuePayload.putDouble(PROP_ENDTIME, (long) (1e03 * cue.getEndTime()));
|
|
86
|
+
final JSONObject content = cue.getContent();
|
|
87
|
+
if (content != null) {
|
|
88
|
+
cuePayload.putString(PROP_CUE_CONTENT, content.optString("content"));
|
|
89
|
+
}
|
|
90
|
+
return cuePayload;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@NonNull
|
|
94
|
+
public static WritableArray fromAudioTrackList(@NonNull final MediaTrackList<AudioQuality> audioTrackList) {
|
|
95
|
+
WritableArray audioTracks = Arguments.createArray();
|
|
96
|
+
for (int i = 0; i < audioTrackList.length(); i++) {
|
|
97
|
+
final MediaTrack<AudioQuality> audioTrack = audioTrackList.getItem(i);
|
|
98
|
+
WritableMap audioTrackPayload = Arguments.createMap();
|
|
99
|
+
audioTrackPayload.putString(PROP_ID, audioTrack.getId());
|
|
100
|
+
audioTrackPayload.putInt(PROP_UID, audioTrack.getUid());
|
|
101
|
+
audioTrackPayload.putString(PROP_KIND, audioTrack.getKind());
|
|
102
|
+
audioTrackPayload.putString(PROP_LABEL, audioTrack.getLabel());
|
|
103
|
+
audioTrackPayload.putString(PROP_LANGUAGE, audioTrack.getLanguage());
|
|
104
|
+
|
|
105
|
+
final QualityList<AudioQuality> qualityList = audioTrack.getQualities();
|
|
106
|
+
WritableArray qualities = Arguments.createArray();
|
|
107
|
+
if (qualityList != null) {
|
|
108
|
+
for (int j = 0; j < qualityList.length(); j++) {
|
|
109
|
+
final AudioQuality audioQuality = qualityList.getItem(j);
|
|
110
|
+
WritableMap audioQualityPayload = Arguments.createMap();
|
|
111
|
+
audioQualityPayload.putString(PROP_ID, audioQuality.getId());
|
|
112
|
+
audioQualityPayload.putInt(PROP_UID, audioQuality.getUid());
|
|
113
|
+
audioQualityPayload.putString(PROP_CODECS, audioQuality.getCodecs());
|
|
114
|
+
audioQualityPayload.putString(PROP_NAME, audioQuality.getName());
|
|
115
|
+
audioQualityPayload.putDouble(PROP_BANDWIDTH, audioQuality.getBandwidth());
|
|
116
|
+
audioQualityPayload.putDouble(PROP_AUDIO_SAMPLING_RATE, audioQuality.getAudioSamplingRate());
|
|
117
|
+
qualities.pushMap(audioQualityPayload);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
audioTrackPayload.putArray(PROP_QUALITIES, qualities);
|
|
121
|
+
|
|
122
|
+
final QualityList<AudioQuality> targetQualityList = audioTrack.getTargetQualities();
|
|
123
|
+
WritableArray targetQualities = Arguments.createArray();
|
|
124
|
+
if (targetQualityList != null) {
|
|
125
|
+
for (int j = 0; j < targetQualityList.length(); j++) {
|
|
126
|
+
final AudioQuality quality = targetQualityList.getItem(j);
|
|
127
|
+
WritableMap audioQualityPayload = Arguments.createMap();
|
|
128
|
+
audioQualityPayload.putInt(PROP_UID, quality.getUid());
|
|
129
|
+
targetQualities.pushMap(audioQualityPayload);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
final AudioQuality activeQuality = audioTrack.getActiveQuality();
|
|
134
|
+
if (activeQuality != null) {
|
|
135
|
+
audioTrackPayload.putInt(PROP_ACTIVE_QUALITY, activeQuality.getUid());
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
final AudioQuality targetQuality = audioTrack.getTargetQuality();
|
|
139
|
+
if (targetQuality != null) {
|
|
140
|
+
audioTrackPayload.putInt(PROP_TARGET_QUALITY, targetQuality.getUid());
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
audioTracks.pushMap(audioTrackPayload);
|
|
144
|
+
}
|
|
145
|
+
return audioTracks;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@NonNull
|
|
149
|
+
static public WritableArray fromVideoTrackList(@NonNull final MediaTrackList<VideoQuality> videoTrackList) {
|
|
150
|
+
WritableArray videoTracks = Arguments.createArray();
|
|
151
|
+
for (int i = 0; i < videoTrackList.length(); i++) {
|
|
152
|
+
final MediaTrack<VideoQuality> videoTrack = videoTrackList.getItem(i);
|
|
153
|
+
WritableMap videoTrackPayload = Arguments.createMap();
|
|
154
|
+
videoTrackPayload.putString(PROP_ID, videoTrack.getId());
|
|
155
|
+
videoTrackPayload.putInt(PROP_UID, videoTrack.getUid());
|
|
156
|
+
videoTrackPayload.putString(PROP_KIND, videoTrack.getKind());
|
|
157
|
+
videoTrackPayload.putString(PROP_LABEL, videoTrack.getLabel());
|
|
158
|
+
videoTrackPayload.putString(PROP_LANGUAGE, videoTrack.getLanguage());
|
|
159
|
+
|
|
160
|
+
final QualityList<VideoQuality> qualityList = videoTrack.getQualities();
|
|
161
|
+
WritableArray qualities = Arguments.createArray();
|
|
162
|
+
if (qualityList != null) {
|
|
163
|
+
for (int j = 0; j < qualityList.length(); j++) {
|
|
164
|
+
final VideoQuality quality = qualityList.getItem(j);
|
|
165
|
+
WritableMap videoQualityPayload = Arguments.createMap();
|
|
166
|
+
videoQualityPayload.putString(PROP_ID, quality.getId());
|
|
167
|
+
videoQualityPayload.putInt(PROP_UID, quality.getUid());
|
|
168
|
+
videoQualityPayload.putString(PROP_CODECS, quality.getCodecs());
|
|
169
|
+
videoQualityPayload.putString(PROP_NAME, quality.getName());
|
|
170
|
+
videoQualityPayload.putDouble(PROP_BANDWIDTH, quality.getBandwidth());
|
|
171
|
+
videoQualityPayload.putDouble(PROP_WIDTH, quality.getWidth());
|
|
172
|
+
videoQualityPayload.putDouble(PROP_HEIGHT, quality.getHeight());
|
|
173
|
+
videoQualityPayload.putDouble(PROP_FRAMERATE, quality.getFrameRate());
|
|
174
|
+
qualities.pushMap(videoQualityPayload);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
videoTrackPayload.putArray(PROP_QUALITIES, qualities);
|
|
178
|
+
|
|
179
|
+
final QualityList<VideoQuality> targetQualityList = videoTrack.getTargetQualities();
|
|
180
|
+
WritableArray targetQualities = Arguments.createArray();
|
|
181
|
+
if (targetQualityList != null) {
|
|
182
|
+
for (int j = 0; j < targetQualityList.length(); j++) {
|
|
183
|
+
final VideoQuality quality = targetQualityList.getItem(j);
|
|
184
|
+
WritableMap videoQualityPayload = Arguments.createMap();
|
|
185
|
+
videoQualityPayload.putInt(PROP_UID, quality.getUid());
|
|
186
|
+
targetQualities.pushMap(videoQualityPayload);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
final VideoQuality activeQuality = videoTrack.getActiveQuality();
|
|
191
|
+
if (activeQuality != null) {
|
|
192
|
+
videoTrackPayload.putInt(PROP_ACTIVE_QUALITY, activeQuality.getUid());
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
final VideoQuality targetQuality = videoTrack.getTargetQuality();
|
|
196
|
+
if (targetQuality != null) {
|
|
197
|
+
videoTrackPayload.putInt(PROP_TARGET_QUALITY, targetQuality.getUid());
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
videoTracks.pushMap(videoTrackPayload);
|
|
201
|
+
}
|
|
202
|
+
return videoTracks;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//
|
|
2
|
+
// THEOplayerRCTBridge.m
|
|
3
|
+
// Theoplayer
|
|
4
|
+
//
|
|
5
|
+
// Created by William van Haevre on 14/01/2022.
|
|
6
|
+
// Copyright © 2022 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <React/RCTViewManager.h>
|
|
10
|
+
|
|
11
|
+
@interface RCT_EXTERN_MODULE(THEOplayerRCTViewManager, RCTViewManager)
|
|
12
|
+
|
|
13
|
+
RCT_EXPORT_VIEW_PROPERTY(src, NSDictionary);
|
|
14
|
+
RCT_EXPORT_VIEW_PROPERTY(config, NSDictionary);
|
|
15
|
+
RCT_EXPORT_VIEW_PROPERTY(paused, BOOL);
|
|
16
|
+
RCT_EXPORT_VIEW_PROPERTY(volume, NSNumber);
|
|
17
|
+
RCT_EXPORT_VIEW_PROPERTY(muted, BOOL);
|
|
18
|
+
RCT_EXPORT_VIEW_PROPERTY(playbackRate, NSNumber);
|
|
19
|
+
RCT_EXPORT_VIEW_PROPERTY(selectedTextTrack, NSNumber);
|
|
20
|
+
RCT_EXPORT_VIEW_PROPERTY(selectedAudioTrack, NSNumber);
|
|
21
|
+
RCT_EXPORT_VIEW_PROPERTY(selectedVideoTrack, NSNumber);
|
|
22
|
+
RCT_EXPORT_VIEW_PROPERTY(seek, NSNumber);
|
|
23
|
+
RCT_EXPORT_VIEW_PROPERTY(fullscreen, BOOL);
|
|
24
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativePause, RCTDirectEventBlock);
|
|
25
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativePlay, RCTDirectEventBlock);
|
|
26
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeSourceChange, RCTDirectEventBlock);
|
|
27
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeLoadStart, RCTDirectEventBlock);
|
|
28
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeReadyStateChange, RCTDirectEventBlock);
|
|
29
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeDurationChange, RCTDirectEventBlock);
|
|
30
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeProgress, RCTBubblingEventBlock);
|
|
31
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeTimeUpdate, RCTBubblingEventBlock);
|
|
32
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativePlaying, RCTDirectEventBlock);
|
|
33
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeSeeking, RCTDirectEventBlock);
|
|
34
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeSeeked, RCTDirectEventBlock);
|
|
35
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeEnded, RCTDirectEventBlock);
|
|
36
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeError, RCTDirectEventBlock);
|
|
37
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeLoadedData, RCTDirectEventBlock);
|
|
38
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeLoadedMetadata, RCTDirectEventBlock);
|
|
39
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerWillPresent, RCTDirectEventBlock);
|
|
40
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerDidPresent, RCTDirectEventBlock);
|
|
41
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerWillDismiss, RCTDirectEventBlock);
|
|
42
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerDidDismiss, RCTDirectEventBlock);
|
|
43
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeTextTrackListEvent, RCTDirectEventBlock);
|
|
44
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeTextTrackEvent, RCTDirectEventBlock);
|
|
45
|
+
|
|
46
|
+
@end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// THEOplayerRCTDebug.swift
|
|
2
|
+
|
|
3
|
+
// General debug flag, if set to false none of the debug prints will appear
|
|
4
|
+
let DEBUG = true
|
|
5
|
+
|
|
6
|
+
// Debug flag to monitor incoming Theoplayer events
|
|
7
|
+
let DEBUG_THEOPLAYER_EVENTS = DEBUG && true
|
|
8
|
+
|
|
9
|
+
// Debug flag to monitor eventhandler setup and breakdown
|
|
10
|
+
let DEBUG_EVENTHANDLER = DEBUG && true
|
|
11
|
+
|
|
12
|
+
// Debug flag to monitor the interactions for each view with its underlying theoplayer instance
|
|
13
|
+
let DEBUG_THEOPLAYER_INTERACTION = DEBUG && true
|
|
14
|
+
|
|
15
|
+
// Debug flag to monitor all updates made on bridged properties
|
|
16
|
+
let DEBUG_PROP_UPDATES = DEBUG && true
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// THEOplayerRCTMetadataAggregator.swift
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
import THEOplayerSDK
|
|
5
|
+
|
|
6
|
+
let EVENT_PROP_TEXT_TRACKS: String = "textTracks"
|
|
7
|
+
let EVENT_PROP_AUDIO_TRACKS: String = "audioTracks"
|
|
8
|
+
let EVENT_PROP_VIDEO_TRACKS: String = "videoTracks"
|
|
9
|
+
let EVENT_PROP_SELECTED_TEXT_TRACK: String = "selectedTextTrack"
|
|
10
|
+
let EVENT_PROP_SELECTED_AUDIO_TRACK: String = "selectedAudioTrack"
|
|
11
|
+
let EVENT_PROP_SELECTED_VIDEO_TRACK: String = "selectedVideoTrack"
|
|
12
|
+
let EVENT_PROP_DURATION: String = "duration"
|
|
13
|
+
let PROP_ID: String = "id"
|
|
14
|
+
let PROP_UID: String = "uid"
|
|
15
|
+
let PROP_KIND: String = "kind"
|
|
16
|
+
let PROP_LANGUAGE: String = "language"
|
|
17
|
+
let PROP_MODE: String = "mode"
|
|
18
|
+
let PROP_LABEL: String = "label"
|
|
19
|
+
let PROP_TYPE: String = "type"
|
|
20
|
+
let PROP_QUALITIES: String = "qualities"
|
|
21
|
+
let PROP_ACTIVE_QUALITY: String = "activeQuality"
|
|
22
|
+
let PROP_TARGET_QUALITY: String = "targetQuality"
|
|
23
|
+
let PROP_STARTTIME: String = "startTime"
|
|
24
|
+
let PROP_ENDTIME: String = "endTime"
|
|
25
|
+
let PROP_CUES: String = "cues"
|
|
26
|
+
let PROP_CUE_CONTENT: String = "content"
|
|
27
|
+
let PROP_SRC: String = "src"
|
|
28
|
+
|
|
29
|
+
class THEOplayerRCTMetadataAggregator {
|
|
30
|
+
|
|
31
|
+
class func aggregateMetadata(player: THEOplayer) -> [String:Any] {
|
|
32
|
+
let textTracks: TextTrackList = player.textTracks
|
|
33
|
+
let audioTracks: AudioTrackList = player.audioTracks
|
|
34
|
+
let videoTracks: VideoTrackList = player.videoTracks
|
|
35
|
+
return [
|
|
36
|
+
EVENT_PROP_TEXT_TRACKS : THEOplayerRCTMetadataAggregator.aggregatedTextTrackListInfo(textTracks: textTracks),
|
|
37
|
+
EVENT_PROP_AUDIO_TRACKS : THEOplayerRCTMetadataAggregator.aggregatedAudioTrackListInfo(audioTracks: audioTracks),
|
|
38
|
+
EVENT_PROP_VIDEO_TRACKS : THEOplayerRCTMetadataAggregator.aggregatedVideoTrackListInfo(videoTracks: videoTracks),
|
|
39
|
+
EVENT_PROP_SELECTED_TEXT_TRACK: THEOplayerRCTMetadataAggregator.selectedTextTrack(textTracks: textTracks),
|
|
40
|
+
EVENT_PROP_SELECTED_AUDIO_TRACK: THEOplayerRCTMetadataAggregator.selectedAudioTrack(audioTracks: audioTracks),
|
|
41
|
+
EVENT_PROP_SELECTED_VIDEO_TRACK: THEOplayerRCTMetadataAggregator.selectedVideoTrack(videoTracks: videoTracks),
|
|
42
|
+
EVENT_PROP_DURATION: player.duration ?? 0
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
class func aggregatedTextTrackListInfo(textTracks: TextTrackList) -> [[String:Any]] {
|
|
47
|
+
var textTrackEntries:[[String:Any]] = []
|
|
48
|
+
guard textTracks.count > 0 else {
|
|
49
|
+
return textTrackEntries
|
|
50
|
+
}
|
|
51
|
+
for i in 0...textTracks.count-1 {
|
|
52
|
+
let textTrack: TextTrack = textTracks.get(i)
|
|
53
|
+
textTrackEntries.append(THEOplayerRCTMetadataAggregator.aggregatedTextTrackInfo(textTrack: textTrack))
|
|
54
|
+
}
|
|
55
|
+
return textTrackEntries
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
class func aggregatedTextTrackInfo(textTrack: TextTrack) -> [String:Any] {
|
|
59
|
+
var entry: [String:Any] = [:]
|
|
60
|
+
entry[PROP_ID] = textTrack.id
|
|
61
|
+
entry[PROP_UID] = textTrack.uid
|
|
62
|
+
entry[PROP_KIND] = textTrack.kind
|
|
63
|
+
entry[PROP_LANGUAGE] = textTrack.language
|
|
64
|
+
entry[PROP_MODE] = String(describing: textTrack.mode)
|
|
65
|
+
entry[PROP_LABEL] = textTrack.label
|
|
66
|
+
entry[PROP_TYPE] = textTrack.type
|
|
67
|
+
entry[PROP_SRC] = textTrack.src
|
|
68
|
+
// process cues when texttrack contains them
|
|
69
|
+
if !textTrack.cues.isEmpty {
|
|
70
|
+
var cueList: [[String:Any]] = []
|
|
71
|
+
for cue in textTrack.cues {
|
|
72
|
+
cueList.append(THEOplayerRCTMetadataAggregator.aggregatedTextTrackCueInfo(textTrackCue: cue))
|
|
73
|
+
}
|
|
74
|
+
entry[PROP_CUES] = cueList
|
|
75
|
+
}
|
|
76
|
+
return entry
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
class func aggregatedTextTrackCueInfo(textTrackCue: TextTrackCue) -> [String:Any] {
|
|
80
|
+
var entry: [String:Any] = [:]
|
|
81
|
+
entry[PROP_ID] = textTrackCue.id
|
|
82
|
+
entry[PROP_UID] = textTrackCue.uid
|
|
83
|
+
entry[PROP_STARTTIME] = (textTrackCue.startTime ?? 0) * 1000
|
|
84
|
+
entry[PROP_ENDTIME] = (textTrackCue.endTime ?? 0) * 1000
|
|
85
|
+
entry[PROP_CUE_CONTENT] = textTrackCue.contentString
|
|
86
|
+
return entry
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private class func aggregatedAudioTrackListInfo(audioTracks: AudioTrackList) -> [[String:Any]] {
|
|
90
|
+
var audioTrackEntries:[[String:Any]] = []
|
|
91
|
+
guard audioTracks.count > 0 else {
|
|
92
|
+
return audioTrackEntries
|
|
93
|
+
}
|
|
94
|
+
for i in 0...audioTracks.count-1 {
|
|
95
|
+
let audioTrack: MediaTrack = audioTracks.get(i)
|
|
96
|
+
var entry: [String:Any] = [:]
|
|
97
|
+
entry[PROP_ID] = audioTrack.id
|
|
98
|
+
entry[PROP_UID] = audioTrack.uid
|
|
99
|
+
entry[PROP_KIND] = audioTrack.kind
|
|
100
|
+
entry[PROP_LANGUAGE] = audioTrack.language
|
|
101
|
+
entry[PROP_LABEL] = audioTrack.label
|
|
102
|
+
entry[PROP_QUALITIES] = [] // empty: qualities are not being exposed on iOS
|
|
103
|
+
//entry[PROP_ACTIVE_QUALITY] = // undefined: qualities are not being exposed on iOS
|
|
104
|
+
//entry[PROP_TARGET_QUALITY] = // undefined: qualities are not being exposed on iOS
|
|
105
|
+
audioTrackEntries.append(entry)
|
|
106
|
+
}
|
|
107
|
+
return audioTrackEntries
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private class func aggregatedVideoTrackListInfo(videoTracks: VideoTrackList) -> [[String:Any]] {
|
|
111
|
+
var videoTrackEntries:[[String:Any]] = []
|
|
112
|
+
guard videoTracks.count > 0 else {
|
|
113
|
+
return videoTrackEntries
|
|
114
|
+
}
|
|
115
|
+
for i in 0...videoTracks.count-1 {
|
|
116
|
+
let videoTrack: MediaTrack = videoTracks.get(i)
|
|
117
|
+
var entry: [String:Any] = [:]
|
|
118
|
+
entry[PROP_ID] = videoTrack.id
|
|
119
|
+
entry[PROP_UID] = videoTrack.uid
|
|
120
|
+
entry[PROP_KIND] = videoTrack.kind
|
|
121
|
+
entry[PROP_LANGUAGE] = videoTrack.language
|
|
122
|
+
entry[PROP_LABEL] = videoTrack.label
|
|
123
|
+
entry[PROP_QUALITIES] = [] // empty: qualities are not being exposed on iOS
|
|
124
|
+
//entry[PROP_ACTIVE_QUALITY] = // undefined: qualities are not being exposed on iOS
|
|
125
|
+
//entry[PROP_TARGET_QUALITY] = // undefined: qualities are not being exposed on iOS
|
|
126
|
+
videoTrackEntries.append(entry)
|
|
127
|
+
}
|
|
128
|
+
return videoTrackEntries
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private class func selectedTextTrack(textTracks: TextTrackList) -> Int {
|
|
132
|
+
guard textTracks.count > 0 else {
|
|
133
|
+
return 0
|
|
134
|
+
}
|
|
135
|
+
for i in 0...textTracks.count-1 {
|
|
136
|
+
let textTrack: TextTrack = textTracks.get(i)
|
|
137
|
+
if textTrack.mode == TextTrackMode.showing {
|
|
138
|
+
return textTrack.uid
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return 0
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private class func selectedAudioTrack(audioTracks: AudioTrackList) -> Int {
|
|
145
|
+
guard audioTracks.count > 0 else {
|
|
146
|
+
return 0
|
|
147
|
+
}
|
|
148
|
+
for i in 0...audioTracks.count-1 {
|
|
149
|
+
let audioTrack: MediaTrack = audioTracks.get(i)
|
|
150
|
+
if audioTrack.enabled {
|
|
151
|
+
return audioTrack.uid
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return 0
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private class func selectedVideoTrack(videoTracks: VideoTrackList) -> Int {
|
|
158
|
+
guard videoTracks.count > 0 else {
|
|
159
|
+
return 0
|
|
160
|
+
}
|
|
161
|
+
for i in 0...videoTracks.count-1 {
|
|
162
|
+
let videoTrack: MediaTrack = videoTracks.get(i)
|
|
163
|
+
if videoTracks.get(i).enabled {
|
|
164
|
+
return videoTrack.uid
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return 0
|
|
168
|
+
}
|
|
169
|
+
}
|