react-native-video-provider 0.1.1 → 0.2.1
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 +34 -2
- package/android/src/main/java/com/auvideo/AuVideoModule.kt +48 -5
- package/ios/AuVideo.mm +5 -0
- package/ios/AuVideoOrientation.swift +62 -11
- package/lib/module/NativeAuVideo.js +3 -0
- package/lib/module/NativeAuVideo.js.map +1 -1
- package/lib/module/codegen-types.d.js +2 -0
- package/lib/module/codegen-types.d.js.map +1 -0
- package/lib/module/components/VideoPlayer.js +16 -0
- package/lib/module/components/VideoPlayer.js.map +1 -1
- package/lib/module/core/VideoManager.js +50 -5
- package/lib/module/core/VideoManager.js.map +1 -1
- package/lib/module/hooks/useFullscreen.js +7 -3
- package/lib/module/hooks/useFullscreen.js.map +1 -1
- package/lib/module/state/createVideoStore.js +1 -0
- package/lib/module/state/createVideoStore.js.map +1 -1
- package/lib/typescript/src/NativeAuVideo.d.ts +18 -11
- package/lib/typescript/src/NativeAuVideo.d.ts.map +1 -1
- package/lib/typescript/src/components/VideoPlayer.d.ts +15 -2
- package/lib/typescript/src/components/VideoPlayer.d.ts.map +1 -1
- package/lib/typescript/src/core/VideoManager.d.ts +24 -5
- package/lib/typescript/src/core/VideoManager.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useFullscreen.d.ts +5 -2
- package/lib/typescript/src/hooks/useFullscreen.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/state/createVideoStore.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +1 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/video.d.ts +12 -0
- package/lib/typescript/src/types/video.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeAuVideo.ts +24 -15
- package/src/codegen-types.d.ts +20 -0
- package/src/components/VideoPlayer.tsx +32 -1
- package/src/core/VideoManager.ts +58 -5
- package/src/hooks/useFullscreen.ts +15 -3
- package/src/index.ts +1 -0
- package/src/state/createVideoStore.ts +1 -0
- package/src/types/index.ts +1 -0
- package/src/types/video.ts +18 -0
package/README.md
CHANGED
|
@@ -83,6 +83,37 @@ player.showFloating(); // draggable in-app window
|
|
|
83
83
|
player.enterPiP(); // system picture-in-picture
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
+
**5. Force an orientation** — values: `'auto' | 'portrait' |
|
|
87
|
+
'inverted-portrait' | 'landscape' | 'inverted-landscape'`.
|
|
88
|
+
|
|
89
|
+
Scoped to fullscreen (applied when fullscreen opens, restored when it
|
|
90
|
+
closes — the rest of the app is unaffected):
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
// This player's fullscreen (incl. the built-in controls' button) locks to
|
|
94
|
+
// portrait — e.g. a vertical video:
|
|
95
|
+
<VideoPlayer source={video} fullscreenOrientation="portrait" />
|
|
96
|
+
|
|
97
|
+
// Or per call:
|
|
98
|
+
const { enter, toggle } = useFullscreen();
|
|
99
|
+
enter('landscape');
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Or as a standing lock, independent of fullscreen:
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
// While this player is mounted (released on unmount):
|
|
106
|
+
<VideoPlayer source={video} orientation="landscape" />
|
|
107
|
+
|
|
108
|
+
// Imperative:
|
|
109
|
+
player.setOrientation('inverted-landscape');
|
|
110
|
+
player.setOrientation('auto'); // release
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
On iOS this needs the AppDelegate forwarding shown in
|
|
114
|
+
[Platform setup](#ios--fullscreen-rotation). Inverted portrait is ignored by
|
|
115
|
+
iPhones without a home button (the OS doesn't allow it).
|
|
116
|
+
|
|
86
117
|
## Surfaces (the core idea)
|
|
87
118
|
|
|
88
119
|
`<VideoSurface>` never creates a player — it registers a mount point. The
|
|
@@ -120,8 +151,9 @@ useVideoEvents({
|
|
|
120
151
|
### iOS — fullscreen rotation
|
|
121
152
|
|
|
122
153
|
iOS asks the AppDelegate which orientations are allowed. Forward that to the
|
|
123
|
-
library so rotation unlocks
|
|
124
|
-
|
|
154
|
+
library so rotation unlocks while fullscreen is visible and `setOrientation`
|
|
155
|
+
/ the `orientation` prop can force a rotation (skip this only if you don't
|
|
156
|
+
use those features and your app already supports all orientations):
|
|
125
157
|
|
|
126
158
|
```swift
|
|
127
159
|
// AppDelegate.swift
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
package com.auvideo
|
|
2
2
|
|
|
3
|
+
import android.app.Activity
|
|
3
4
|
import android.app.PictureInPictureParams
|
|
4
5
|
import android.content.pm.ActivityInfo
|
|
5
6
|
import android.content.pm.PackageManager
|
|
@@ -17,8 +18,14 @@ import com.facebook.react.bridge.UiThreadUtil
|
|
|
17
18
|
class AuVideoModule(reactContext: ReactApplicationContext) :
|
|
18
19
|
NativeAuVideoSpec(reactContext), PlayerCore.Listener {
|
|
19
20
|
|
|
21
|
+
/** The app's own requestedOrientation, saved before we first override it. */
|
|
20
22
|
private var previousOrientation: Int? = null
|
|
21
23
|
|
|
24
|
+
/** Explicit lock from setOrientation; wins over the fullscreen unlock. */
|
|
25
|
+
private var lockedOrientation: Int? = null
|
|
26
|
+
|
|
27
|
+
private var fullscreenActive = false
|
|
28
|
+
|
|
22
29
|
// ------------------------------------------------------------ lifecycle
|
|
23
30
|
|
|
24
31
|
override fun nativeInit() {
|
|
@@ -126,6 +133,41 @@ class AuVideoModule(reactContext: ReactApplicationContext) :
|
|
|
126
133
|
UiThreadUtil.runOnUiThread { PlayerCore.detach() }
|
|
127
134
|
}
|
|
128
135
|
|
|
136
|
+
// ---------------------------------------------------------- orientation
|
|
137
|
+
|
|
138
|
+
override fun setOrientation(orientation: String) {
|
|
139
|
+
UiThreadUtil.runOnUiThread {
|
|
140
|
+
val activity = currentActivity ?: return@runOnUiThread
|
|
141
|
+
if (previousOrientation == null) {
|
|
142
|
+
previousOrientation = activity.requestedOrientation
|
|
143
|
+
}
|
|
144
|
+
lockedOrientation = when (orientation) {
|
|
145
|
+
"portrait" -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
|
146
|
+
"inverted-portrait" -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
|
|
147
|
+
"landscape" -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
|
148
|
+
"inverted-landscape" -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
|
|
149
|
+
else -> null // "auto"
|
|
150
|
+
}
|
|
151
|
+
applyOrientation(activity)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Precedence: explicit lock > fullscreen sensor unlock > the app's own
|
|
157
|
+
* orientation. Once nothing overrides anymore, the saved value is dropped.
|
|
158
|
+
*/
|
|
159
|
+
private fun applyOrientation(activity: Activity) {
|
|
160
|
+
val lock = lockedOrientation
|
|
161
|
+
activity.requestedOrientation = when {
|
|
162
|
+
lock != null -> lock
|
|
163
|
+
fullscreenActive -> ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
|
|
164
|
+
else -> previousOrientation ?: ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
|
|
165
|
+
}
|
|
166
|
+
if (lock == null && !fullscreenActive) {
|
|
167
|
+
previousOrientation = null
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
129
171
|
// ----------------------------------------------------------- fullscreen
|
|
130
172
|
|
|
131
173
|
override fun enterFullscreen() {
|
|
@@ -134,8 +176,10 @@ class AuVideoModule(reactContext: ReactApplicationContext) :
|
|
|
134
176
|
if (previousOrientation == null) {
|
|
135
177
|
previousOrientation = activity.requestedOrientation
|
|
136
178
|
}
|
|
137
|
-
// Unlock rotation while fullscreen is visible, even in portrait-locked
|
|
138
|
-
|
|
179
|
+
// Unlock rotation while fullscreen is visible, even in portrait-locked
|
|
180
|
+
// apps — unless an explicit orientation lock is active.
|
|
181
|
+
fullscreenActive = true
|
|
182
|
+
applyOrientation(activity)
|
|
139
183
|
|
|
140
184
|
val window = activity.window
|
|
141
185
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
@@ -150,9 +194,8 @@ class AuVideoModule(reactContext: ReactApplicationContext) :
|
|
|
150
194
|
override fun exitFullscreen() {
|
|
151
195
|
UiThreadUtil.runOnUiThread {
|
|
152
196
|
val activity = currentActivity ?: return@runOnUiThread
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
previousOrientation = null
|
|
197
|
+
fullscreenActive = false
|
|
198
|
+
applyOrientation(activity)
|
|
156
199
|
|
|
157
200
|
val window = activity.window
|
|
158
201
|
WindowCompat.setDecorFitsSystemWindows(window, true)
|
package/ios/AuVideo.mm
CHANGED
|
@@ -159,6 +159,11 @@ static AuVideoSourceSpec *AuVideoParseSource(NativeVideoSource &source)
|
|
|
159
159
|
dispatch_async(dispatch_get_main_queue(), ^{ [AuVideoOrientation setFullscreen:NO]; });
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
- (void)setOrientation:(NSString *)orientation
|
|
163
|
+
{
|
|
164
|
+
dispatch_async(dispatch_get_main_queue(), ^{ [AuVideoOrientation setOrientation:orientation]; });
|
|
165
|
+
}
|
|
166
|
+
|
|
162
167
|
#pragma mark - PiP
|
|
163
168
|
|
|
164
169
|
- (void)enterPip:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import Foundation
|
|
2
2
|
import UIKit
|
|
3
3
|
|
|
4
|
-
/// Fullscreen orientation coordination.
|
|
4
|
+
/// Fullscreen + forced-orientation coordination.
|
|
5
5
|
///
|
|
6
6
|
/// iOS decides allowed orientations by asking the AppDelegate. For rotation
|
|
7
|
-
/// to unlock only while the player is fullscreen
|
|
8
|
-
/// question here (see README):
|
|
7
|
+
/// to unlock only while the player is fullscreen (and for `setOrientation`
|
|
8
|
+
/// locks to apply), the host app forwards that question here (see README):
|
|
9
9
|
///
|
|
10
10
|
/// ```swift
|
|
11
11
|
/// func application(_ application: UIApplication,
|
|
@@ -22,38 +22,89 @@ public final class AuVideoOrientation: NSObject {
|
|
|
22
22
|
/// Orientations allowed while fullscreen. Default: everything but upside-down.
|
|
23
23
|
@objc public static var fullscreenMask: UIInterfaceOrientationMask = .allButUpsideDown
|
|
24
24
|
|
|
25
|
+
/// Explicit lock from `setOrientation`. Empty = no lock. Wins over both
|
|
26
|
+
/// the app default and the fullscreen unlock.
|
|
27
|
+
@objc public private(set) static var lockMask: UIInterfaceOrientationMask = []
|
|
28
|
+
|
|
25
29
|
/// Call from AppDelegate's supportedInterfaceOrientationsFor.
|
|
26
30
|
@objc(maskWithDefault:)
|
|
27
31
|
public static func mask(
|
|
28
32
|
withDefault defaultMask: UIInterfaceOrientationMask
|
|
29
33
|
) -> UIInterfaceOrientationMask {
|
|
34
|
+
if !lockMask.isEmpty {
|
|
35
|
+
return lockMask
|
|
36
|
+
}
|
|
30
37
|
return isFullscreenActive ? fullscreenMask : defaultMask
|
|
31
38
|
}
|
|
32
39
|
|
|
33
40
|
@objc public static func setFullscreen(_ active: Bool) {
|
|
34
41
|
guard isFullscreenActive != active else { return }
|
|
35
42
|
isFullscreenActive = active
|
|
36
|
-
|
|
43
|
+
applyCurrent()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// Force a screen orientation until cleared with "auto".
|
|
47
|
+
/// Values: auto | portrait | inverted-portrait | landscape | inverted-landscape
|
|
48
|
+
/// (upside-down portrait is ignored on iPhones without a home button).
|
|
49
|
+
@objc(setOrientation:)
|
|
50
|
+
public static func setOrientation(_ orientation: String) {
|
|
51
|
+
// "landscape" = device top pointing left (interface landscapeRight),
|
|
52
|
+
// matching Android's SCREEN_ORIENTATION_LANDSCAPE; "inverted-" is the
|
|
53
|
+
// 180° rotation of each.
|
|
54
|
+
switch orientation {
|
|
55
|
+
case "portrait":
|
|
56
|
+
lockMask = .portrait
|
|
57
|
+
case "inverted-portrait":
|
|
58
|
+
lockMask = .portraitUpsideDown
|
|
59
|
+
case "landscape":
|
|
60
|
+
lockMask = .landscapeRight
|
|
61
|
+
case "inverted-landscape":
|
|
62
|
+
lockMask = .landscapeLeft
|
|
63
|
+
default:
|
|
64
|
+
lockMask = []
|
|
65
|
+
}
|
|
66
|
+
applyCurrent()
|
|
37
67
|
}
|
|
38
68
|
|
|
39
|
-
///
|
|
40
|
-
///
|
|
41
|
-
|
|
69
|
+
/// Re-query supported orientations and rotate to whatever now applies:
|
|
70
|
+
/// the lock if set, free rotation while fullscreen, else back to portrait
|
|
71
|
+
/// (portrait-locked apps are the common host).
|
|
72
|
+
private static func applyCurrent() {
|
|
73
|
+
if !lockMask.isEmpty {
|
|
74
|
+
refresh(rotatingTo: lockMask)
|
|
75
|
+
} else {
|
|
76
|
+
refresh(rotatingTo: isFullscreenActive ? nil : .portrait)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private static func refresh(rotatingTo mask: UIInterfaceOrientationMask?) {
|
|
42
81
|
DispatchQueue.main.async {
|
|
43
82
|
if #available(iOS 16.0, *) {
|
|
44
83
|
for case let scene as UIWindowScene in UIApplication.shared.connectedScenes {
|
|
45
84
|
scene.keyWindow?.rootViewController?
|
|
46
85
|
.setNeedsUpdateOfSupportedInterfaceOrientations()
|
|
47
|
-
if
|
|
48
|
-
scene.requestGeometryUpdate(.iOS(interfaceOrientations:
|
|
86
|
+
if let mask {
|
|
87
|
+
scene.requestGeometryUpdate(.iOS(interfaceOrientations: mask), errorHandler: { _ in })
|
|
49
88
|
}
|
|
50
89
|
}
|
|
51
90
|
} else {
|
|
52
|
-
if
|
|
53
|
-
UIDevice.current.setValue(
|
|
91
|
+
if let device = legacyDeviceOrientation(for: mask) {
|
|
92
|
+
UIDevice.current.setValue(device.rawValue, forKey: "orientation")
|
|
54
93
|
}
|
|
55
94
|
UIViewController.attemptRotationToDeviceOrientation()
|
|
56
95
|
}
|
|
57
96
|
}
|
|
58
97
|
}
|
|
98
|
+
|
|
99
|
+
private static func legacyDeviceOrientation(
|
|
100
|
+
for mask: UIInterfaceOrientationMask?
|
|
101
|
+
) -> UIDeviceOrientation? {
|
|
102
|
+
guard let mask else { return nil }
|
|
103
|
+
if mask.contains(.portrait) { return .portrait }
|
|
104
|
+
if mask.contains(.portraitUpsideDown) { return .portraitUpsideDown }
|
|
105
|
+
// Interface landscapeRight is device landscapeLeft, and vice versa.
|
|
106
|
+
if mask.contains(.landscapeRight) { return .landscapeLeft }
|
|
107
|
+
if mask.contains(.landscapeLeft) { return .landscapeRight }
|
|
108
|
+
return nil
|
|
109
|
+
}
|
|
59
110
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { TurboModuleRegistry } from 'react-native';
|
|
4
|
+
// Direct imports (not the `CodegenTypes.` namespace) so the spec parses on
|
|
5
|
+
// RN 0.79's codegen as well as 0.80+.
|
|
6
|
+
|
|
4
7
|
export default TurboModuleRegistry.getEnforcing('AuVideo');
|
|
5
8
|
//# sourceMappingURL=NativeAuVideo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeAuVideo.ts"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeAuVideo.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AACpE;AACA;;AAgHA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,SAAS,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["codegen-types.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -21,6 +21,8 @@ export function VideoPlayer({
|
|
|
21
21
|
surfaceId,
|
|
22
22
|
controls = true,
|
|
23
23
|
resizeMode,
|
|
24
|
+
orientation,
|
|
25
|
+
fullscreenOrientation,
|
|
24
26
|
style,
|
|
25
27
|
...rest
|
|
26
28
|
}) {
|
|
@@ -40,6 +42,20 @@ export function VideoPlayer({
|
|
|
40
42
|
manager.setResizeMode(resizeMode);
|
|
41
43
|
}
|
|
42
44
|
}, [manager, resizeMode]);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (!orientation || orientation === 'auto') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
manager.setOrientation(orientation);
|
|
50
|
+
return () => manager.setOrientation('auto');
|
|
51
|
+
}, [manager, orientation]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (!fullscreenOrientation) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
manager.setFullscreenOrientation(fullscreenOrientation);
|
|
57
|
+
return () => manager.setFullscreenOrientation(null);
|
|
58
|
+
}, [manager, fullscreenOrientation]);
|
|
43
59
|
return /*#__PURE__*/_jsxs(View, {
|
|
44
60
|
style: [styles.container, style],
|
|
45
61
|
...rest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","StyleSheet","View","useVideoManager","VideoControls","VideoSurface","jsx","_jsx","jsxs","_jsxs","VideoPlayer","source","autoplay","surfaceId","controls","resizeMode","style","rest","manager","id","setSource","setResizeMode","styles","container","children","surface","create","backgroundColor","overflow","position","top","left","right","bottom"],"sourceRoot":"../../../src","sources":["components/VideoPlayer.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,UAAU,EAAEC,IAAI,QAAwB,cAAc;AAC/D,SAASC,eAAe,QAAQ,6BAA0B;AAE1D,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;
|
|
1
|
+
{"version":3,"names":["useEffect","StyleSheet","View","useVideoManager","VideoControls","VideoSurface","jsx","_jsx","jsxs","_jsxs","VideoPlayer","source","autoplay","surfaceId","controls","resizeMode","orientation","fullscreenOrientation","style","rest","manager","id","setSource","setResizeMode","setOrientation","setFullscreenOrientation","styles","container","children","surface","create","backgroundColor","overflow","position","top","left","right","bottom"],"sourceRoot":"../../../src","sources":["components/VideoPlayer.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,UAAU,EAAEC,IAAI,QAAwB,cAAc;AAC/D,SAASC,eAAe,QAAQ,6BAA0B;AAE1D,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,YAAY,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AA8B9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAC;EAC1BC,MAAM;EACNC,QAAQ,GAAG,IAAI;EACfC,SAAS;EACTC,QAAQ,GAAG,IAAI;EACfC,UAAU;EACVC,WAAW;EACXC,qBAAqB;EACrBC,KAAK;EACL,GAAGC;AACa,CAAC,EAAE;EACnB,MAAMC,OAAO,GAAGjB,eAAe,CAAC,CAAC;EACjC,MAAMkB,EAAE,GAAGR,SAAS,IAAI,UAAUF,MAAM,CAACU,EAAE,EAAE;EAE7CrB,SAAS,CAAC,MAAM;IACdoB,OAAO,CAACE,SAAS,CAACX,MAAM,EAAE;MAAEC,QAAQ;MAAEC,SAAS,EAAEQ;IAAG,CAAC,CAAC;IACtD;IACA;IACA;EACF,CAAC,EAAE,CAACD,OAAO,EAAET,MAAM,CAACU,EAAE,EAAEA,EAAE,CAAC,CAAC;EAE5BrB,SAAS,CAAC,MAAM;IACd,IAAIe,UAAU,EAAE;MACdK,OAAO,CAACG,aAAa,CAACR,UAAU,CAAC;IACnC;EACF,CAAC,EAAE,CAACK,OAAO,EAAEL,UAAU,CAAC,CAAC;EAEzBf,SAAS,CAAC,MAAM;IACd,IAAI,CAACgB,WAAW,IAAIA,WAAW,KAAK,MAAM,EAAE;MAC1C;IACF;IACAI,OAAO,CAACI,cAAc,CAACR,WAAW,CAAC;IACnC,OAAO,MAAMI,OAAO,CAACI,cAAc,CAAC,MAAM,CAAC;EAC7C,CAAC,EAAE,CAACJ,OAAO,EAAEJ,WAAW,CAAC,CAAC;EAE1BhB,SAAS,CAAC,MAAM;IACd,IAAI,CAACiB,qBAAqB,EAAE;MAC1B;IACF;IACAG,OAAO,CAACK,wBAAwB,CAACR,qBAAqB,CAAC;IACvD,OAAO,MAAMG,OAAO,CAACK,wBAAwB,CAAC,IAAI,CAAC;EACrD,CAAC,EAAE,CAACL,OAAO,EAAEH,qBAAqB,CAAC,CAAC;EAEpC,oBACER,KAAA,CAACP,IAAI;IAACgB,KAAK,EAAE,CAACQ,MAAM,CAACC,SAAS,EAAET,KAAK,CAAE;IAAA,GAAKC,IAAI;IAAAS,QAAA,gBAC9CrB,IAAA,CAACF,YAAY;MAACQ,SAAS,EAAEQ,EAAG;MAACH,KAAK,EAAEQ,MAAM,CAACG;IAAQ,CAAE,CAAC,EACrDf,QAAQ,gBAAGP,IAAA,CAACH,aAAa,IAAE,CAAC,GAAG,IAAI;EAAA,CAChC,CAAC;AAEX;AAEA,MAAMsB,MAAM,GAAGzB,UAAU,CAAC6B,MAAM,CAAC;EAC/BH,SAAS,EAAE;IACTI,eAAe,EAAE,MAAM;IACvBC,QAAQ,EAAE;EACZ,CAAC;EACDH,OAAO,EAAE;IACPI,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ export const FULLSCREEN_SURFACE_ID = '__au_fullscreen__';
|
|
|
9
9
|
/** Surface id used by the built-in floating host. */
|
|
10
10
|
export const FLOATING_SURFACE_ID = '__au_floating__';
|
|
11
11
|
const RESERVED_SURFACES = new Set([FULLSCREEN_SURFACE_ID, FLOATING_SURFACE_ID]);
|
|
12
|
+
const ORIENTATION_LOCKS = ['auto', 'portrait', 'inverted-portrait', 'landscape', 'inverted-landscape'];
|
|
12
13
|
function toNativeSource(source) {
|
|
13
14
|
return {
|
|
14
15
|
id: source.id,
|
|
@@ -47,6 +48,11 @@ export class VideoManager {
|
|
|
47
48
|
};
|
|
48
49
|
/** Last non-reserved surface, restored after fullscreen/floating exits. */
|
|
49
50
|
lastInlineSurfaceId = null;
|
|
51
|
+
|
|
52
|
+
/** Per-player default for `enterFullscreen()` (VideoPlayer's prop). */
|
|
53
|
+
fullscreenOrientationDefault = null;
|
|
54
|
+
/** True while a fullscreen-scoped lock is applied, so exit restores it. */
|
|
55
|
+
fullscreenLockApplied = false;
|
|
50
56
|
constructor() {}
|
|
51
57
|
get providerConfig() {
|
|
52
58
|
return this.config;
|
|
@@ -271,6 +277,28 @@ export class VideoManager {
|
|
|
271
277
|
});
|
|
272
278
|
NativeAuVideo.setResizeMode(mode);
|
|
273
279
|
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
|
|
283
|
+
* overriding the app's own lock until cleared with `'auto'`.
|
|
284
|
+
*/
|
|
285
|
+
setOrientation(lock) {
|
|
286
|
+
this.set({
|
|
287
|
+
orientationLock: lock
|
|
288
|
+
});
|
|
289
|
+
NativeAuVideo.setOrientation(lock);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Register the orientation `enterFullscreen()` uses when called without an
|
|
294
|
+
* argument (the built-in controls call it that way). Scoped: applied when
|
|
295
|
+
* fullscreen opens, restored when it closes — the rest of the app is
|
|
296
|
+
* unaffected. Pass null to unregister. Set by VideoPlayer's
|
|
297
|
+
* `fullscreenOrientation` prop.
|
|
298
|
+
*/
|
|
299
|
+
setFullscreenOrientation(lock) {
|
|
300
|
+
this.fullscreenOrientationDefault = lock;
|
|
301
|
+
}
|
|
274
302
|
async getPosition() {
|
|
275
303
|
return NativeAuVideo.getPosition();
|
|
276
304
|
}
|
|
@@ -321,10 +349,12 @@ export class VideoManager {
|
|
|
321
349
|
// ------------------------------------------------------------ modes
|
|
322
350
|
|
|
323
351
|
/**
|
|
324
|
-
* Show the built-in fullscreen host
|
|
325
|
-
*
|
|
352
|
+
* Show the built-in fullscreen host. Rotation unlocks by default; pass an
|
|
353
|
+
* orientation (or set VideoPlayer's `fullscreenOrientation` prop) to force
|
|
354
|
+
* one for the fullscreen session only — it is restored on exit, so the
|
|
355
|
+
* rest of the app never sees the lock.
|
|
326
356
|
*/
|
|
327
|
-
enterFullscreen() {
|
|
357
|
+
enterFullscreen(orientation) {
|
|
328
358
|
if (this.store.getState().fullscreen) {
|
|
329
359
|
return;
|
|
330
360
|
}
|
|
@@ -334,6 +364,13 @@ export class VideoManager {
|
|
|
334
364
|
});
|
|
335
365
|
this.setMode('fullscreen');
|
|
336
366
|
NativeAuVideo.enterFullscreen();
|
|
367
|
+
// `enter` is often passed straight to onPress, so the argument may be a
|
|
368
|
+
// press event — only honor real orientation values.
|
|
369
|
+
const requested = ORIENTATION_LOCKS.includes(orientation) ? orientation : this.fullscreenOrientationDefault;
|
|
370
|
+
if (requested && requested !== 'auto') {
|
|
371
|
+
this.fullscreenLockApplied = true;
|
|
372
|
+
NativeAuVideo.setOrientation(requested);
|
|
373
|
+
}
|
|
337
374
|
this.events.emit('onEnterFullscreen', undefined);
|
|
338
375
|
}
|
|
339
376
|
|
|
@@ -342,6 +379,11 @@ export class VideoManager {
|
|
|
342
379
|
if (!this.store.getState().fullscreen) {
|
|
343
380
|
return;
|
|
344
381
|
}
|
|
382
|
+
if (this.fullscreenLockApplied) {
|
|
383
|
+
this.fullscreenLockApplied = false;
|
|
384
|
+
// Drop the fullscreen-only lock, restoring any explicit setOrientation.
|
|
385
|
+
NativeAuVideo.setOrientation(this.store.getState().orientationLock);
|
|
386
|
+
}
|
|
345
387
|
NativeAuVideo.exitFullscreen();
|
|
346
388
|
this.set({
|
|
347
389
|
fullscreen: false
|
|
@@ -349,11 +391,11 @@ export class VideoManager {
|
|
|
349
391
|
this.events.emit('onExitFullscreen', undefined);
|
|
350
392
|
this.restoreInlineSurface();
|
|
351
393
|
}
|
|
352
|
-
toggleFullscreen() {
|
|
394
|
+
toggleFullscreen(orientation) {
|
|
353
395
|
if (this.store.getState().fullscreen) {
|
|
354
396
|
this.exitFullscreen();
|
|
355
397
|
} else {
|
|
356
|
-
this.enterFullscreen();
|
|
398
|
+
this.enterFullscreen(orientation);
|
|
357
399
|
}
|
|
358
400
|
}
|
|
359
401
|
showFloating() {
|
|
@@ -424,6 +466,9 @@ export class VideoManager {
|
|
|
424
466
|
this.events.removeAll();
|
|
425
467
|
this.initialized = false;
|
|
426
468
|
this.lastInlineSurfaceId = null;
|
|
469
|
+
this.fullscreenOrientationDefault = null;
|
|
470
|
+
this.fullscreenLockApplied = false;
|
|
471
|
+
NativeAuVideo.setOrientation('auto');
|
|
427
472
|
NativeAuVideo.releasePlayer();
|
|
428
473
|
this.store.setState({
|
|
429
474
|
...initialVideoState
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeAuVideo","createVideoStore","initialVideoState","Emitter","FULLSCREEN_SURFACE_ID","FLOATING_SURFACE_ID","RESERVED_SURFACES","Set","toNativeSource","source","id","uri","headers","title","artist","artworkUri","startPosition","VideoManager","instance","shared","store","events","nativeSubscriptions","initialized","config","fullscreenHost","floatingHost","pauseOnDetach","lastInlineSurfaceId","constructor","providerConfig","init","nativeInit","subscribeNative","addListener","event","listener","subs","push","onStatusChange","e","applyStatus","status","onLoad","set","duration","videoWidth","width","videoHeight","height","loading","emit","videoId","onProgress","position","buffered","onSeek","onEnd","undefined","onError","error","playing","onAttach","onDetach","pause","onPipChange","pip","active","setMode","deriveMode","prev","getState","paused","buffering","setSource","options","autoplay","current","currentVideo","sameVideo","video","play","surfaceId","attach","preload","resume","toggle","stop","seek","clamped","Math","max","min","seekTo","seekBy","offset","setRate","rate","setVolume","volume","mute","muted","setMuted","unmute","setRepeat","repeat","setResizeMode","mode","resizeMode","getPosition","has","detach","handleSurfaceUnmount","state","enterFullscreen","fullscreen","floating","exitFullscreen","restoreInlineSurface","toggleFullscreen","showFloating","hideFloating","enterPiP","enterPip","exitPiP","exitPip","override","s","destroy","sub","remove","removeAll","releasePlayer","setState","partial"],"sourceRoot":"../../../src","sources":["core/VideoManager.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["NativeAuVideo","createVideoStore","initialVideoState","Emitter","FULLSCREEN_SURFACE_ID","FLOATING_SURFACE_ID","RESERVED_SURFACES","Set","ORIENTATION_LOCKS","toNativeSource","source","id","uri","headers","title","artist","artworkUri","startPosition","VideoManager","instance","shared","store","events","nativeSubscriptions","initialized","config","fullscreenHost","floatingHost","pauseOnDetach","lastInlineSurfaceId","fullscreenOrientationDefault","fullscreenLockApplied","constructor","providerConfig","init","nativeInit","subscribeNative","addListener","event","listener","subs","push","onStatusChange","e","applyStatus","status","onLoad","set","duration","videoWidth","width","videoHeight","height","loading","emit","videoId","onProgress","position","buffered","onSeek","onEnd","undefined","onError","error","playing","onAttach","onDetach","pause","onPipChange","pip","active","setMode","deriveMode","prev","getState","paused","buffering","setSource","options","autoplay","current","currentVideo","sameVideo","video","play","surfaceId","attach","preload","resume","toggle","stop","seek","clamped","Math","max","min","seekTo","seekBy","offset","setRate","rate","setVolume","volume","mute","muted","setMuted","unmute","setRepeat","repeat","setResizeMode","mode","resizeMode","setOrientation","lock","orientationLock","setFullscreenOrientation","getPosition","has","detach","handleSurfaceUnmount","state","enterFullscreen","orientation","fullscreen","floating","requested","includes","exitFullscreen","restoreInlineSurface","toggleFullscreen","showFloating","hideFloating","enterPiP","enterPip","exitPiP","exitPip","override","s","destroy","sub","remove","removeAll","releasePlayer","setState","partial"],"sourceRoot":"../../../src","sources":["core/VideoManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,14 +6,18 @@ import { usePlayback } from "./usePlayback.js";
|
|
|
6
6
|
export function useFullscreen() {
|
|
7
7
|
const manager = useVideoManager();
|
|
8
8
|
const isFullscreen = usePlayback(s => s.fullscreen);
|
|
9
|
-
const
|
|
9
|
+
const orientationLock = usePlayback(s => s.orientationLock);
|
|
10
|
+
const enter = useCallback(orientation => manager.enterFullscreen(orientation), [manager]);
|
|
10
11
|
const exit = useCallback(() => manager.exitFullscreen(), [manager]);
|
|
11
|
-
const toggle = useCallback(
|
|
12
|
+
const toggle = useCallback(orientation => manager.toggleFullscreen(orientation), [manager]);
|
|
13
|
+
const setOrientation = useCallback(lock => manager.setOrientation(lock), [manager]);
|
|
12
14
|
return {
|
|
13
15
|
isFullscreen,
|
|
14
16
|
enter,
|
|
15
17
|
exit,
|
|
16
|
-
toggle
|
|
18
|
+
toggle,
|
|
19
|
+
orientationLock,
|
|
20
|
+
setOrientation
|
|
17
21
|
};
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=useFullscreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useVideoManager","usePlayback","useFullscreen","manager","isFullscreen","s","fullscreen","enter","enterFullscreen","exit","exitFullscreen","toggle","toggleFullscreen"],"sourceRoot":"../../../src","sources":["hooks/useFullscreen.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,eAAe,QAAQ,6BAA0B;
|
|
1
|
+
{"version":3,"names":["useCallback","useVideoManager","usePlayback","useFullscreen","manager","isFullscreen","s","fullscreen","orientationLock","enter","orientation","enterFullscreen","exit","exitFullscreen","toggle","toggleFullscreen","setOrientation","lock"],"sourceRoot":"../../../src","sources":["hooks/useFullscreen.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,eAAe,QAAQ,6BAA0B;AAE1D,SAASC,WAAW,QAAQ,kBAAe;AAE3C,OAAO,SAASC,aAAaA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAGH,eAAe,CAAC,CAAC;EACjC,MAAMI,YAAY,GAAGH,WAAW,CAAEI,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC;EACrD,MAAMC,eAAe,GAAGN,WAAW,CAAEI,CAAC,IAAKA,CAAC,CAACE,eAAe,CAAC;EAE7D,MAAMC,KAAK,GAAGT,WAAW,CACtBU,WAA6B,IAAKN,OAAO,CAACO,eAAe,CAACD,WAAW,CAAC,EACvE,CAACN,OAAO,CACV,CAAC;EACD,MAAMQ,IAAI,GAAGZ,WAAW,CAAC,MAAMI,OAAO,CAACS,cAAc,CAAC,CAAC,EAAE,CAACT,OAAO,CAAC,CAAC;EACnE,MAAMU,MAAM,GAAGd,WAAW,CACvBU,WAA6B,IAAKN,OAAO,CAACW,gBAAgB,CAACL,WAAW,CAAC,EACxE,CAACN,OAAO,CACV,CAAC;EACD,MAAMY,cAAc,GAAGhB,WAAW,CAC/BiB,IAAqB,IAAKb,OAAO,CAACY,cAAc,CAACC,IAAI,CAAC,EACvD,CAACb,OAAO,CACV,CAAC;EAED,OAAO;IAAEC,YAAY;IAAEI,KAAK;IAAEG,IAAI;IAAEE,MAAM;IAAEN,eAAe;IAAEQ;EAAe,CAAC;AAC/E","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createStore","initialVideoState","currentVideo","status","playing","paused","buffering","loading","position","duration","buffered","rate","volume","muted","repeat","resizeMode","fullscreen","pip","floating","mode","surfaceId","videoWidth","videoHeight","error","createVideoStore"],"sourceRoot":"../../../src","sources":["state/createVideoStore.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAuB,iBAAiB;AAG5D,OAAO,MAAMC,iBAA6B,GAAG;EAC3CC,YAAY,EAAE,IAAI;EAClBC,MAAM,EAAE,MAAM;EACdC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE,KAAK;EACbC,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAE,KAAK;EACdC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,IAAI,EAAE,CAAC;EACPC,MAAM,EAAE,CAAC;EACTC,KAAK,EAAE,KAAK;EACZC,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,KAAK;EACjBC,GAAG,EAAE,KAAK;EACVC,QAAQ,EAAE,KAAK;EACfC,IAAI,EAAE,QAAQ;EACdC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE,CAAC;EACbC,WAAW,EAAE,CAAC;EACdC,KAAK,EAAE;AACT,CAAC;AAID,OAAO,SAASC,gBAAgBA,CAAA,EAAe;EAC7C,
|
|
1
|
+
{"version":3,"names":["createStore","initialVideoState","currentVideo","status","playing","paused","buffering","loading","position","duration","buffered","rate","volume","muted","repeat","resizeMode","orientationLock","fullscreen","pip","floating","mode","surfaceId","videoWidth","videoHeight","error","createVideoStore"],"sourceRoot":"../../../src","sources":["state/createVideoStore.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAuB,iBAAiB;AAG5D,OAAO,MAAMC,iBAA6B,GAAG;EAC3CC,YAAY,EAAE,IAAI;EAClBC,MAAM,EAAE,MAAM;EACdC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE,KAAK;EACbC,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAE,KAAK;EACdC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,QAAQ,EAAE,CAAC;EACXC,IAAI,EAAE,CAAC;EACPC,MAAM,EAAE,CAAC;EACTC,KAAK,EAAE,KAAK;EACZC,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,SAAS;EACrBC,eAAe,EAAE,MAAM;EACvBC,UAAU,EAAE,KAAK;EACjBC,GAAG,EAAE,KAAK;EACVC,QAAQ,EAAE,KAAK;EACfC,IAAI,EAAE,QAAQ;EACdC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE,CAAC;EACbC,WAAW,EAAE,CAAC;EACdC,KAAK,EAAE;AACT,CAAC;AAID,OAAO,SAASC,gBAAgBA,CAAA,EAAe;EAC7C,OAAOzB,WAAW,CAAa,CAAC,CAAC,OAAO;IAAE,GAAGC;EAAkB,CAAC,CAAC,CAAC;AACpE","ignoreList":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { type TurboModule
|
|
1
|
+
import { type TurboModule } from 'react-native';
|
|
2
|
+
import type { EventEmitter, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
|
|
2
3
|
export type NativeVideoSource = {
|
|
3
4
|
id: string;
|
|
4
5
|
uri: string;
|
|
5
6
|
/** HTTP headers, string -> string */
|
|
6
|
-
headers?:
|
|
7
|
+
headers?: UnsafeObject;
|
|
7
8
|
title?: string;
|
|
8
9
|
artist?: string;
|
|
9
10
|
artworkUri?: string;
|
|
@@ -65,20 +66,26 @@ export interface Spec extends TurboModule {
|
|
|
65
66
|
enterFullscreen(): void;
|
|
66
67
|
/** Restore the previous orientation lock. */
|
|
67
68
|
exitFullscreen(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Force a screen orientation, overriding the app's own lock and the
|
|
71
|
+
* fullscreen sensor unlock until cleared with 'auto'.
|
|
72
|
+
* auto | portrait | inverted-portrait | landscape | inverted-landscape
|
|
73
|
+
*/
|
|
74
|
+
setOrientation(orientation: string): void;
|
|
68
75
|
enterPip(): Promise<boolean>;
|
|
69
76
|
exitPip(): void;
|
|
70
77
|
getPosition(): Promise<number>;
|
|
71
78
|
/** Tear down the native player entirely. */
|
|
72
79
|
releasePlayer(): void;
|
|
73
|
-
readonly onStatusChange:
|
|
74
|
-
readonly onLoad:
|
|
75
|
-
readonly onProgress:
|
|
76
|
-
readonly onSeek:
|
|
77
|
-
readonly onEnd:
|
|
78
|
-
readonly onError:
|
|
79
|
-
readonly onAttach:
|
|
80
|
-
readonly onDetach:
|
|
81
|
-
readonly onPipChange:
|
|
80
|
+
readonly onStatusChange: EventEmitter<NativeStatusEvent>;
|
|
81
|
+
readonly onLoad: EventEmitter<NativeLoadEvent>;
|
|
82
|
+
readonly onProgress: EventEmitter<NativeProgressEvent>;
|
|
83
|
+
readonly onSeek: EventEmitter<NativeSeekEvent>;
|
|
84
|
+
readonly onEnd: EventEmitter<void>;
|
|
85
|
+
readonly onError: EventEmitter<NativeErrorEvent>;
|
|
86
|
+
readonly onAttach: EventEmitter<NativeSurfaceEvent>;
|
|
87
|
+
readonly onDetach: EventEmitter<NativeSurfaceEvent>;
|
|
88
|
+
readonly onPipChange: EventEmitter<NativePipEvent>;
|
|
82
89
|
}
|
|
83
90
|
declare const _default: Spec;
|
|
84
91
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeAuVideo.d.ts","sourceRoot":"","sources":["../../../src/NativeAuVideo.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"NativeAuVideo.d.ts","sourceRoot":"","sources":["../../../src/NativeAuVideo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ViewProps } from 'react-native';
|
|
2
|
-
import type { ResizeMode, VideoSource } from '../types/video.js';
|
|
2
|
+
import type { OrientationLock, ResizeMode, VideoSource } from '../types/video.js';
|
|
3
3
|
export interface VideoPlayerProps extends ViewProps {
|
|
4
4
|
source: VideoSource;
|
|
5
5
|
/** Default true. */
|
|
@@ -13,6 +13,19 @@ export interface VideoPlayerProps extends ViewProps {
|
|
|
13
13
|
/** Show built-in controls. Default true. */
|
|
14
14
|
controls?: boolean;
|
|
15
15
|
resizeMode?: ResizeMode;
|
|
16
|
+
/**
|
|
17
|
+
* Force the screen into this orientation while the player is mounted:
|
|
18
|
+
* `'landscape'`, `'inverted-landscape'`, `'portrait'` or
|
|
19
|
+
* `'inverted-portrait'`. Released (back to `'auto'`) on unmount.
|
|
20
|
+
*/
|
|
21
|
+
orientation?: OrientationLock;
|
|
22
|
+
/**
|
|
23
|
+
* Orientation to force ONLY while this player is fullscreen (e.g.
|
|
24
|
+
* `'portrait'` for a vertical video). Applied when fullscreen opens —
|
|
25
|
+
* including via the built-in controls' fullscreen button — and restored
|
|
26
|
+
* when it closes, so the rest of the app is unaffected.
|
|
27
|
+
*/
|
|
28
|
+
fullscreenOrientation?: OrientationLock;
|
|
16
29
|
}
|
|
17
30
|
/**
|
|
18
31
|
* Convenience all-in-one player: `setSource` (same-video handoff aware) +
|
|
@@ -23,5 +36,5 @@ export interface VideoPlayerProps extends ViewProps {
|
|
|
23
36
|
* <VideoPlayer source={{ id: '123', uri }} style={{ aspectRatio: 16 / 9 }} />
|
|
24
37
|
* ```
|
|
25
38
|
*/
|
|
26
|
-
export declare function VideoPlayer({ source, autoplay, surfaceId, controls, resizeMode, style, ...rest }: VideoPlayerProps): import("react").JSX.Element;
|
|
39
|
+
export declare function VideoPlayer({ source, autoplay, surfaceId, controls, resizeMode, orientation, fullscreenOrientation, style, ...rest }: VideoPlayerProps): import("react").JSX.Element;
|
|
27
40
|
//# sourceMappingURL=VideoPlayer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoPlayer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoPlayer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAgB,CAAC;AAI/E,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,MAAM,EAAE,WAAW,CAAC;IACpB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,eAAe,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAe,EACf,SAAS,EACT,QAAe,EACf,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,KAAK,EACL,GAAG,IAAI,EACR,EAAE,gBAAgB,+BAuClB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type VideoStore } from '../state/createVideoStore.js';
|
|
2
2
|
import type { VideoEventMap, VideoEventName } from '../types/events.js';
|
|
3
|
-
import type { ResizeMode, SetSourceOptions, VideoProviderConfig, VideoSource } from '../types/video.js';
|
|
3
|
+
import type { OrientationLock, ResizeMode, SetSourceOptions, VideoProviderConfig, VideoSource } from '../types/video.js';
|
|
4
4
|
import { type Listener, type Subscription } from '../utils/Emitter.js';
|
|
5
5
|
/** Surface id used by the built-in fullscreen host. */
|
|
6
6
|
export declare const FULLSCREEN_SURFACE_ID = "__au_fullscreen__";
|
|
@@ -23,6 +23,10 @@ export declare class VideoManager {
|
|
|
23
23
|
private config;
|
|
24
24
|
/** Last non-reserved surface, restored after fullscreen/floating exits. */
|
|
25
25
|
private lastInlineSurfaceId;
|
|
26
|
+
/** Per-player default for `enterFullscreen()` (VideoPlayer's prop). */
|
|
27
|
+
private fullscreenOrientationDefault;
|
|
28
|
+
/** True while a fullscreen-scoped lock is applied, so exit restores it. */
|
|
29
|
+
private fullscreenLockApplied;
|
|
26
30
|
private constructor();
|
|
27
31
|
get providerConfig(): Required<VideoProviderConfig>;
|
|
28
32
|
/**
|
|
@@ -55,6 +59,19 @@ export declare class VideoManager {
|
|
|
55
59
|
unmute(): void;
|
|
56
60
|
setRepeat(repeat: boolean): void;
|
|
57
61
|
setResizeMode(mode: ResizeMode): void;
|
|
62
|
+
/**
|
|
63
|
+
* Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
|
|
64
|
+
* overriding the app's own lock until cleared with `'auto'`.
|
|
65
|
+
*/
|
|
66
|
+
setOrientation(lock: OrientationLock): void;
|
|
67
|
+
/**
|
|
68
|
+
* Register the orientation `enterFullscreen()` uses when called without an
|
|
69
|
+
* argument (the built-in controls call it that way). Scoped: applied when
|
|
70
|
+
* fullscreen opens, restored when it closes — the rest of the app is
|
|
71
|
+
* unaffected. Pass null to unregister. Set by VideoPlayer's
|
|
72
|
+
* `fullscreenOrientation` prop.
|
|
73
|
+
*/
|
|
74
|
+
setFullscreenOrientation(lock: OrientationLock | null): void;
|
|
58
75
|
getPosition(): Promise<number>;
|
|
59
76
|
/** Re-parent the player into the surface registered under `surfaceId`. */
|
|
60
77
|
attach(surfaceId: string): void;
|
|
@@ -67,13 +84,15 @@ export declare class VideoManager {
|
|
|
67
84
|
*/
|
|
68
85
|
handleSurfaceUnmount(surfaceId: string): void;
|
|
69
86
|
/**
|
|
70
|
-
* Show the built-in fullscreen host
|
|
71
|
-
*
|
|
87
|
+
* Show the built-in fullscreen host. Rotation unlocks by default; pass an
|
|
88
|
+
* orientation (or set VideoPlayer's `fullscreenOrientation` prop) to force
|
|
89
|
+
* one for the fullscreen session only — it is restored on exit, so the
|
|
90
|
+
* rest of the app never sees the lock.
|
|
72
91
|
*/
|
|
73
|
-
enterFullscreen(): void;
|
|
92
|
+
enterFullscreen(orientation?: OrientationLock): void;
|
|
74
93
|
/** Restore the previous orientation lock and re-attach the previous surface. */
|
|
75
94
|
exitFullscreen(): void;
|
|
76
|
-
toggleFullscreen(): void;
|
|
95
|
+
toggleFullscreen(orientation?: OrientationLock): void;
|
|
77
96
|
showFloating(): void;
|
|
78
97
|
hideFloating(): void;
|
|
79
98
|
enterPiP(): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoManager.d.ts","sourceRoot":"","sources":["../../../../src/core/VideoManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,8BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAiB,CAAC;AACrE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"VideoManager.d.ts","sourceRoot":"","sources":["../../../../src/core/VideoManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,8BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAiB,CAAC;AACrE,OAAO,KAAK,EACV,eAAe,EAGf,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EAEZ,MAAM,mBAAgB,CAAC;AACxB,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAkB,CAAC;AAE7E,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,qDAAqD;AACrD,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAwBrD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IAEpD,MAAM,KAAK,MAAM,IAAI,YAAY,CAKhC;IAED,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAsB;IAEhD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAIZ;IACF,2EAA2E;IAC3E,OAAO,CAAC,mBAAmB,CAAuB;IAElD,uEAAuE;IACvE,OAAO,CAAC,4BAA4B,CAAgC;IACpE,2EAA2E;IAC3E,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO;IAEP,IAAI,cAAc,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAElD;IAED;;;OAGG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAYxC,WAAW,CAAC,CAAC,SAAS,cAAc,EAClC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GACnC,YAAY;IAIf,OAAO,CAAC,eAAe;IAsEvB,OAAO,CAAC,WAAW;IAuBnB;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;IA0BhE,oEAAoE;IACpE,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIlC,IAAI,IAAI,IAAI;IAIZ,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,IAAI;IAId,MAAM,IAAI,IAAI;IAQd,IAAI,IAAI,IAAI;IAKZ,8BAA8B;IAC9B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU5B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B,IAAI,IAAI,IAAI;IAKZ,MAAM,IAAI,IAAI;IAKd,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKhC,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAKrC;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAK3C;;;;;;OAMG;IACH,wBAAwB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAItD,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAMpC,0EAA0E;IAC1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAS/B,uFAAuF;IACvF,MAAM,IAAI,IAAI;IAMd;;;;OAIG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAe7C;;;;;OAKG;IACH,eAAe,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI;IAmBpD,gFAAgF;IAChF,cAAc,IAAI,IAAI;IAetB,gBAAgB,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI;IAQrD,YAAY,IAAI,IAAI;IAQpB,YAAY,IAAI,IAAI;IAQd,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,OAAO;IASf,2DAA2D;IAC3D,OAAO,IAAI,IAAI;IAef,OAAO,CAAC,GAAG;CAGZ"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import type { OrientationLock } from '../types/video.js';
|
|
1
2
|
export declare function useFullscreen(): {
|
|
2
3
|
isFullscreen: boolean;
|
|
3
|
-
enter: () => void;
|
|
4
|
+
enter: (orientation?: OrientationLock) => void;
|
|
4
5
|
exit: () => void;
|
|
5
|
-
toggle: () => void;
|
|
6
|
+
toggle: (orientation?: OrientationLock) => void;
|
|
7
|
+
orientationLock: OrientationLock;
|
|
8
|
+
setOrientation: (lock: OrientationLock) => void;
|
|
6
9
|
};
|
|
7
10
|
//# sourceMappingURL=useFullscreen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFullscreen.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useFullscreen.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useFullscreen.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useFullscreen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAgB,CAAC;AAGtD,wBAAgB,aAAa;;0BAMV,eAAe;;2BAKf,eAAe;;2BAIvB,eAAe;EAKzB"}
|
|
@@ -14,5 +14,5 @@ export { useFullscreen } from './hooks/useFullscreen.js';
|
|
|
14
14
|
export { usePiP } from './hooks/usePiP.js';
|
|
15
15
|
export { useVideoEvents, type VideoEventHandlers, } from './hooks/useVideoEvents.js';
|
|
16
16
|
export { formatTime } from './utils/formatTime.js';
|
|
17
|
-
export type { VideoSource, ResizeMode, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, VideoEventMap, VideoEventName, } from './types/index.js';
|
|
17
|
+
export type { VideoSource, ResizeMode, OrientationLock, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, VideoEventMap, VideoEventName, } from './types/index.js';
|
|
18
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,8BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAA+B,CAAC;AACjE,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,+BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAgB,CAAC;AACxC,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,2BAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAoB,CAAC;AAEhD,YAAY,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,kBAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,8BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAA+B,CAAC;AACjE,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAAyB,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,+BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,gCAA6B,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAgB,CAAC;AACxC,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,2BAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAoB,CAAC;AAEhD,YAAY,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,kBAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createVideoStore.d.ts","sourceRoot":"","sources":["../../../../src/state/createVideoStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAgB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"createVideoStore.d.ts","sourceRoot":"","sources":["../../../../src/state/createVideoStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAgB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,EAAE,UAwB/B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C,wBAAgB,gBAAgB,IAAI,UAAU,CAE7C"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { VideoSource, ResizeMode, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, } from './video.js';
|
|
1
|
+
export type { VideoSource, ResizeMode, OrientationLock, PlayerMode, PlaybackStatus, VideoError, VideoState, SetSourceOptions, VideoProviderConfig, } from './video.js';
|
|
2
2
|
export type { VideoEventMap, VideoEventName } from './events.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAS,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAS,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAU,CAAC"}
|
|
@@ -14,6 +14,16 @@ export interface VideoSource {
|
|
|
14
14
|
startPosition?: number;
|
|
15
15
|
}
|
|
16
16
|
export type ResizeMode = 'contain' | 'cover' | 'stretch';
|
|
17
|
+
/**
|
|
18
|
+
* Forced screen orientation.
|
|
19
|
+
*
|
|
20
|
+
* - `auto` — no lock; the app's own orientation settings apply.
|
|
21
|
+
* - `landscape` / `inverted-landscape` — the two landscape rotations
|
|
22
|
+
* (inverted = rotated 180°).
|
|
23
|
+
* - `portrait` / `inverted-portrait` — upright and upside-down portrait.
|
|
24
|
+
* Note: iPhones without a home button ignore upside-down portrait.
|
|
25
|
+
*/
|
|
26
|
+
export type OrientationLock = 'auto' | 'portrait' | 'inverted-portrait' | 'landscape' | 'inverted-landscape';
|
|
17
27
|
export type PlayerMode = 'inline' | 'fullscreen' | 'floating' | 'pip' | 'background' | 'hidden';
|
|
18
28
|
export type PlaybackStatus = 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'buffering' | 'ended' | 'error';
|
|
19
29
|
export interface VideoError {
|
|
@@ -38,6 +48,8 @@ export interface VideoState {
|
|
|
38
48
|
muted: boolean;
|
|
39
49
|
repeat: boolean;
|
|
40
50
|
resizeMode: ResizeMode;
|
|
51
|
+
/** Orientation forced via `setOrientation` (not the fullscreen unlock). */
|
|
52
|
+
orientationLock: OrientationLock;
|
|
41
53
|
fullscreen: boolean;
|
|
42
54
|
pip: boolean;
|
|
43
55
|
floating: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../../src/types/video.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD,MAAM,MAAM,UAAU,GACpB,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../../src/types/video.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,UAAU,GACV,mBAAmB,GACnB,WAAW,GACX,oBAAoB,CAAC;AAEzB,MAAM,MAAM,UAAU,GACpB,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,2EAA2E;IAC3E,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-video-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Singleton-engine video library for React Native (one native player, many surfaces)",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
package/src/NativeAuVideo.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { TurboModuleRegistry, type TurboModule } from 'react-native';
|
|
2
|
+
// Direct imports (not the `CodegenTypes.` namespace) so the spec parses on
|
|
3
|
+
// RN 0.79's codegen as well as 0.80+.
|
|
4
|
+
import type {
|
|
5
|
+
EventEmitter,
|
|
6
|
+
UnsafeObject,
|
|
7
|
+
} from 'react-native/Libraries/Types/CodegenTypes';
|
|
6
8
|
|
|
7
9
|
export type NativeVideoSource = {
|
|
8
10
|
id: string;
|
|
9
11
|
uri: string;
|
|
10
12
|
/** HTTP headers, string -> string */
|
|
11
|
-
headers?:
|
|
13
|
+
headers?: UnsafeObject;
|
|
12
14
|
title?: string;
|
|
13
15
|
artist?: string;
|
|
14
16
|
artworkUri?: string;
|
|
@@ -84,6 +86,13 @@ export interface Spec extends TurboModule {
|
|
|
84
86
|
/** Restore the previous orientation lock. */
|
|
85
87
|
exitFullscreen(): void;
|
|
86
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Force a screen orientation, overriding the app's own lock and the
|
|
91
|
+
* fullscreen sensor unlock until cleared with 'auto'.
|
|
92
|
+
* auto | portrait | inverted-portrait | landscape | inverted-landscape
|
|
93
|
+
*/
|
|
94
|
+
setOrientation(orientation: string): void;
|
|
95
|
+
|
|
87
96
|
enterPip(): Promise<boolean>;
|
|
88
97
|
exitPip(): void;
|
|
89
98
|
|
|
@@ -92,15 +101,15 @@ export interface Spec extends TurboModule {
|
|
|
92
101
|
/** Tear down the native player entirely. */
|
|
93
102
|
releasePlayer(): void;
|
|
94
103
|
|
|
95
|
-
readonly onStatusChange:
|
|
96
|
-
readonly onLoad:
|
|
97
|
-
readonly onProgress:
|
|
98
|
-
readonly onSeek:
|
|
99
|
-
readonly onEnd:
|
|
100
|
-
readonly onError:
|
|
101
|
-
readonly onAttach:
|
|
102
|
-
readonly onDetach:
|
|
103
|
-
readonly onPipChange:
|
|
104
|
+
readonly onStatusChange: EventEmitter<NativeStatusEvent>;
|
|
105
|
+
readonly onLoad: EventEmitter<NativeLoadEvent>;
|
|
106
|
+
readonly onProgress: EventEmitter<NativeProgressEvent>;
|
|
107
|
+
readonly onSeek: EventEmitter<NativeSeekEvent>;
|
|
108
|
+
readonly onEnd: EventEmitter<void>;
|
|
109
|
+
readonly onError: EventEmitter<NativeErrorEvent>;
|
|
110
|
+
readonly onAttach: EventEmitter<NativeSurfaceEvent>;
|
|
111
|
+
readonly onDetach: EventEmitter<NativeSurfaceEvent>;
|
|
112
|
+
readonly onPipChange: EventEmitter<NativePipEvent>;
|
|
104
113
|
}
|
|
105
114
|
|
|
106
115
|
export default TurboModuleRegistry.getEnforcing<Spec>('AuVideo');
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TurboModule spec imports codegen types from the deep path
|
|
3
|
+
* 'react-native/Libraries/Types/CodegenTypes' so it parses on RN 0.79's
|
|
4
|
+
* codegen (which can't resolve the `CodegenTypes.` namespace style added in
|
|
5
|
+
* 0.80). This repo typechecks with the `react-native-strict-api` condition,
|
|
6
|
+
* which blocks deep Libraries/* type resolution — so alias the deep path to
|
|
7
|
+
* the public namespace here. Type-only; erased at build time.
|
|
8
|
+
*/
|
|
9
|
+
declare module 'react-native/Libraries/Types/CodegenTypes' {
|
|
10
|
+
import type { CodegenTypes } from 'react-native';
|
|
11
|
+
|
|
12
|
+
export type EventEmitter<T> = CodegenTypes.EventEmitter<T>;
|
|
13
|
+
export type UnsafeObject = CodegenTypes.UnsafeObject;
|
|
14
|
+
export type Int32 = CodegenTypes.Int32;
|
|
15
|
+
export type Float = CodegenTypes.Float;
|
|
16
|
+
export type Double = CodegenTypes.Double;
|
|
17
|
+
export type WithDefault<T, D> = CodegenTypes.WithDefault<T, D>;
|
|
18
|
+
export type DirectEventHandler<T> = CodegenTypes.DirectEventHandler<T>;
|
|
19
|
+
export type BubblingEventHandler<T> = CodegenTypes.BubblingEventHandler<T>;
|
|
20
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
2
|
import { StyleSheet, View, type ViewProps } from 'react-native';
|
|
3
3
|
import { useVideoManager } from '../provider/VideoContext';
|
|
4
|
-
import type { ResizeMode, VideoSource } from '../types/video';
|
|
4
|
+
import type { OrientationLock, ResizeMode, VideoSource } from '../types/video';
|
|
5
5
|
import { VideoControls } from './VideoControls';
|
|
6
6
|
import { VideoSurface } from './VideoSurface';
|
|
7
7
|
|
|
@@ -18,6 +18,19 @@ export interface VideoPlayerProps extends ViewProps {
|
|
|
18
18
|
/** Show built-in controls. Default true. */
|
|
19
19
|
controls?: boolean;
|
|
20
20
|
resizeMode?: ResizeMode;
|
|
21
|
+
/**
|
|
22
|
+
* Force the screen into this orientation while the player is mounted:
|
|
23
|
+
* `'landscape'`, `'inverted-landscape'`, `'portrait'` or
|
|
24
|
+
* `'inverted-portrait'`. Released (back to `'auto'`) on unmount.
|
|
25
|
+
*/
|
|
26
|
+
orientation?: OrientationLock;
|
|
27
|
+
/**
|
|
28
|
+
* Orientation to force ONLY while this player is fullscreen (e.g.
|
|
29
|
+
* `'portrait'` for a vertical video). Applied when fullscreen opens —
|
|
30
|
+
* including via the built-in controls' fullscreen button — and restored
|
|
31
|
+
* when it closes, so the rest of the app is unaffected.
|
|
32
|
+
*/
|
|
33
|
+
fullscreenOrientation?: OrientationLock;
|
|
21
34
|
}
|
|
22
35
|
|
|
23
36
|
/**
|
|
@@ -35,6 +48,8 @@ export function VideoPlayer({
|
|
|
35
48
|
surfaceId,
|
|
36
49
|
controls = true,
|
|
37
50
|
resizeMode,
|
|
51
|
+
orientation,
|
|
52
|
+
fullscreenOrientation,
|
|
38
53
|
style,
|
|
39
54
|
...rest
|
|
40
55
|
}: VideoPlayerProps) {
|
|
@@ -54,6 +69,22 @@ export function VideoPlayer({
|
|
|
54
69
|
}
|
|
55
70
|
}, [manager, resizeMode]);
|
|
56
71
|
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (!orientation || orientation === 'auto') {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
manager.setOrientation(orientation);
|
|
77
|
+
return () => manager.setOrientation('auto');
|
|
78
|
+
}, [manager, orientation]);
|
|
79
|
+
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (!fullscreenOrientation) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
manager.setFullscreenOrientation(fullscreenOrientation);
|
|
85
|
+
return () => manager.setFullscreenOrientation(null);
|
|
86
|
+
}, [manager, fullscreenOrientation]);
|
|
87
|
+
|
|
57
88
|
return (
|
|
58
89
|
<View style={[styles.container, style]} {...rest}>
|
|
59
90
|
<VideoSurface surfaceId={id} style={styles.surface} />
|
package/src/core/VideoManager.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
} from '../state/createVideoStore';
|
|
8
8
|
import type { VideoEventMap, VideoEventName } from '../types/events';
|
|
9
9
|
import type {
|
|
10
|
+
OrientationLock,
|
|
10
11
|
PlaybackStatus,
|
|
11
12
|
PlayerMode,
|
|
12
13
|
ResizeMode,
|
|
@@ -24,6 +25,14 @@ export const FLOATING_SURFACE_ID = '__au_floating__';
|
|
|
24
25
|
|
|
25
26
|
const RESERVED_SURFACES = new Set([FULLSCREEN_SURFACE_ID, FLOATING_SURFACE_ID]);
|
|
26
27
|
|
|
28
|
+
const ORIENTATION_LOCKS: readonly OrientationLock[] = [
|
|
29
|
+
'auto',
|
|
30
|
+
'portrait',
|
|
31
|
+
'inverted-portrait',
|
|
32
|
+
'landscape',
|
|
33
|
+
'inverted-landscape',
|
|
34
|
+
];
|
|
35
|
+
|
|
27
36
|
function toNativeSource(source: VideoSource): NativeVideoSource {
|
|
28
37
|
return {
|
|
29
38
|
id: source.id,
|
|
@@ -66,6 +75,11 @@ export class VideoManager {
|
|
|
66
75
|
/** Last non-reserved surface, restored after fullscreen/floating exits. */
|
|
67
76
|
private lastInlineSurfaceId: string | null = null;
|
|
68
77
|
|
|
78
|
+
/** Per-player default for `enterFullscreen()` (VideoPlayer's prop). */
|
|
79
|
+
private fullscreenOrientationDefault: OrientationLock | null = null;
|
|
80
|
+
/** True while a fullscreen-scoped lock is applied, so exit restores it. */
|
|
81
|
+
private fullscreenLockApplied = false;
|
|
82
|
+
|
|
69
83
|
private constructor() {}
|
|
70
84
|
|
|
71
85
|
get providerConfig(): Required<VideoProviderConfig> {
|
|
@@ -295,6 +309,26 @@ export class VideoManager {
|
|
|
295
309
|
NativeAuVideo.setResizeMode(mode);
|
|
296
310
|
}
|
|
297
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Force a screen orientation (`'landscape'`, `'inverted-portrait'`, …),
|
|
314
|
+
* overriding the app's own lock until cleared with `'auto'`.
|
|
315
|
+
*/
|
|
316
|
+
setOrientation(lock: OrientationLock): void {
|
|
317
|
+
this.set({ orientationLock: lock });
|
|
318
|
+
NativeAuVideo.setOrientation(lock);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Register the orientation `enterFullscreen()` uses when called without an
|
|
323
|
+
* argument (the built-in controls call it that way). Scoped: applied when
|
|
324
|
+
* fullscreen opens, restored when it closes — the rest of the app is
|
|
325
|
+
* unaffected. Pass null to unregister. Set by VideoPlayer's
|
|
326
|
+
* `fullscreenOrientation` prop.
|
|
327
|
+
*/
|
|
328
|
+
setFullscreenOrientation(lock: OrientationLock | null): void {
|
|
329
|
+
this.fullscreenOrientationDefault = lock;
|
|
330
|
+
}
|
|
331
|
+
|
|
298
332
|
async getPosition(): Promise<number> {
|
|
299
333
|
return NativeAuVideo.getPosition();
|
|
300
334
|
}
|
|
@@ -339,16 +373,27 @@ export class VideoManager {
|
|
|
339
373
|
// ------------------------------------------------------------ modes
|
|
340
374
|
|
|
341
375
|
/**
|
|
342
|
-
* Show the built-in fullscreen host
|
|
343
|
-
*
|
|
376
|
+
* Show the built-in fullscreen host. Rotation unlocks by default; pass an
|
|
377
|
+
* orientation (or set VideoPlayer's `fullscreenOrientation` prop) to force
|
|
378
|
+
* one for the fullscreen session only — it is restored on exit, so the
|
|
379
|
+
* rest of the app never sees the lock.
|
|
344
380
|
*/
|
|
345
|
-
enterFullscreen(): void {
|
|
381
|
+
enterFullscreen(orientation?: OrientationLock): void {
|
|
346
382
|
if (this.store.getState().fullscreen) {
|
|
347
383
|
return;
|
|
348
384
|
}
|
|
349
385
|
this.set({ fullscreen: true, floating: false });
|
|
350
386
|
this.setMode('fullscreen');
|
|
351
387
|
NativeAuVideo.enterFullscreen();
|
|
388
|
+
// `enter` is often passed straight to onPress, so the argument may be a
|
|
389
|
+
// press event — only honor real orientation values.
|
|
390
|
+
const requested = ORIENTATION_LOCKS.includes(orientation as OrientationLock)
|
|
391
|
+
? (orientation as OrientationLock)
|
|
392
|
+
: this.fullscreenOrientationDefault;
|
|
393
|
+
if (requested && requested !== 'auto') {
|
|
394
|
+
this.fullscreenLockApplied = true;
|
|
395
|
+
NativeAuVideo.setOrientation(requested);
|
|
396
|
+
}
|
|
352
397
|
this.events.emit('onEnterFullscreen', undefined);
|
|
353
398
|
}
|
|
354
399
|
|
|
@@ -357,17 +402,22 @@ export class VideoManager {
|
|
|
357
402
|
if (!this.store.getState().fullscreen) {
|
|
358
403
|
return;
|
|
359
404
|
}
|
|
405
|
+
if (this.fullscreenLockApplied) {
|
|
406
|
+
this.fullscreenLockApplied = false;
|
|
407
|
+
// Drop the fullscreen-only lock, restoring any explicit setOrientation.
|
|
408
|
+
NativeAuVideo.setOrientation(this.store.getState().orientationLock);
|
|
409
|
+
}
|
|
360
410
|
NativeAuVideo.exitFullscreen();
|
|
361
411
|
this.set({ fullscreen: false });
|
|
362
412
|
this.events.emit('onExitFullscreen', undefined);
|
|
363
413
|
this.restoreInlineSurface();
|
|
364
414
|
}
|
|
365
415
|
|
|
366
|
-
toggleFullscreen(): void {
|
|
416
|
+
toggleFullscreen(orientation?: OrientationLock): void {
|
|
367
417
|
if (this.store.getState().fullscreen) {
|
|
368
418
|
this.exitFullscreen();
|
|
369
419
|
} else {
|
|
370
|
-
this.enterFullscreen();
|
|
420
|
+
this.enterFullscreen(orientation);
|
|
371
421
|
}
|
|
372
422
|
}
|
|
373
423
|
|
|
@@ -431,6 +481,9 @@ export class VideoManager {
|
|
|
431
481
|
this.events.removeAll();
|
|
432
482
|
this.initialized = false;
|
|
433
483
|
this.lastInlineSurfaceId = null;
|
|
484
|
+
this.fullscreenOrientationDefault = null;
|
|
485
|
+
this.fullscreenLockApplied = false;
|
|
486
|
+
NativeAuVideo.setOrientation('auto');
|
|
434
487
|
NativeAuVideo.releasePlayer();
|
|
435
488
|
this.store.setState({ ...initialVideoState }, true);
|
|
436
489
|
}
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
2
|
import { useVideoManager } from '../provider/VideoContext';
|
|
3
|
+
import type { OrientationLock } from '../types/video';
|
|
3
4
|
import { usePlayback } from './usePlayback';
|
|
4
5
|
|
|
5
6
|
export function useFullscreen() {
|
|
6
7
|
const manager = useVideoManager();
|
|
7
8
|
const isFullscreen = usePlayback((s) => s.fullscreen);
|
|
9
|
+
const orientationLock = usePlayback((s) => s.orientationLock);
|
|
8
10
|
|
|
9
|
-
const enter = useCallback(
|
|
11
|
+
const enter = useCallback(
|
|
12
|
+
(orientation?: OrientationLock) => manager.enterFullscreen(orientation),
|
|
13
|
+
[manager]
|
|
14
|
+
);
|
|
10
15
|
const exit = useCallback(() => manager.exitFullscreen(), [manager]);
|
|
11
|
-
const toggle = useCallback(
|
|
16
|
+
const toggle = useCallback(
|
|
17
|
+
(orientation?: OrientationLock) => manager.toggleFullscreen(orientation),
|
|
18
|
+
[manager]
|
|
19
|
+
);
|
|
20
|
+
const setOrientation = useCallback(
|
|
21
|
+
(lock: OrientationLock) => manager.setOrientation(lock),
|
|
22
|
+
[manager]
|
|
23
|
+
);
|
|
12
24
|
|
|
13
|
-
return { isFullscreen, enter, exit, toggle };
|
|
25
|
+
return { isFullscreen, enter, exit, toggle, orientationLock, setOrientation };
|
|
14
26
|
}
|
package/src/index.ts
CHANGED
package/src/types/index.ts
CHANGED
package/src/types/video.ts
CHANGED
|
@@ -16,6 +16,22 @@ export interface VideoSource {
|
|
|
16
16
|
|
|
17
17
|
export type ResizeMode = 'contain' | 'cover' | 'stretch';
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Forced screen orientation.
|
|
21
|
+
*
|
|
22
|
+
* - `auto` — no lock; the app's own orientation settings apply.
|
|
23
|
+
* - `landscape` / `inverted-landscape` — the two landscape rotations
|
|
24
|
+
* (inverted = rotated 180°).
|
|
25
|
+
* - `portrait` / `inverted-portrait` — upright and upside-down portrait.
|
|
26
|
+
* Note: iPhones without a home button ignore upside-down portrait.
|
|
27
|
+
*/
|
|
28
|
+
export type OrientationLock =
|
|
29
|
+
| 'auto'
|
|
30
|
+
| 'portrait'
|
|
31
|
+
| 'inverted-portrait'
|
|
32
|
+
| 'landscape'
|
|
33
|
+
| 'inverted-landscape';
|
|
34
|
+
|
|
19
35
|
export type PlayerMode =
|
|
20
36
|
'inline' | 'fullscreen' | 'floating' | 'pip' | 'background' | 'hidden';
|
|
21
37
|
|
|
@@ -52,6 +68,8 @@ export interface VideoState {
|
|
|
52
68
|
muted: boolean;
|
|
53
69
|
repeat: boolean;
|
|
54
70
|
resizeMode: ResizeMode;
|
|
71
|
+
/** Orientation forced via `setOrientation` (not the fullscreen unlock). */
|
|
72
|
+
orientationLock: OrientationLock;
|
|
55
73
|
fullscreen: boolean;
|
|
56
74
|
pip: boolean;
|
|
57
75
|
floating: boolean;
|