@halibegic/react-video-player 0.0.15 → 0.0.17

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 CHANGED
@@ -20,23 +20,19 @@ function App() {
20
20
  }
21
21
  ```
22
22
 
23
- | Prop | Type | Description | Default |
24
- | -------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------- |
25
- | `url` | `string` | The vod stream URL | - |
26
- | `watchHistory` | `{ enabled: boolean; storageKey: string; }` | (Optional) Enable watch history and specify a **unique** storage key for each vod player instance | - |
23
+ | Prop | Type | Description | Default |
24
+ | ----------- | ---------------------------------------- | ------------------------------------------------------- | ------- |
25
+ | `url` | `string` | The vod stream URL | - |
26
+ | `startTime` | `number` | (Optional) Start time in seconds to begin playback from | - |
27
+ | `onEvent` | `(event: string, data: unknown) => void` | (Optional) Event handler callback for player events | - |
27
28
 
28
- **Example with `watchHistory`:**
29
+ **Example with `startTime`:**
29
30
 
30
31
  ```tsx
31
32
  import { VodPlayer } from "@halibegic/react-video-player";
32
33
 
33
34
  function App() {
34
- return (
35
- <VodPlayer
36
- url="https://example.com/vod.m3u8"
37
- watchHistory={{ enabled: true, storageKey: "video-1" }}
38
- />
39
- );
35
+ return <VodPlayer url="https://example.com/vod.m3u8" startTime={10} />;
40
36
  }
41
37
  ```
42
38
 
@@ -67,9 +63,118 @@ function App() {
67
63
  | `url` | `string` | The live stream URL | - |
68
64
  | `startDate` | `string` | Start date for the live event in ISO 8601 format | - |
69
65
  | `endDate` | `string` | End date for the live event in ISO 8601 format | - |
66
+ | `onEvent` | `(event: string, data: unknown) => void` | (Optional) Event handler callback for player events | - |
70
67
  | `messages` | `{ eventNotStarted: string; eventFinished: string; eventStartingSoon?: string; live?: string; }` | (Optional) Custom messages for event not started, finished, starting soon, and live states | `{ eventNotStarted: "Event has not started yet.", eventFinished: "Event has finished.", eventStartingSoon: "Starting soon...", live: "Live" }` |
71
68
 
72
- **Example with `messages`:**
69
+ ## Keyboard Shortcuts
70
+
71
+ The video player supports the following keyboard shortcuts:
72
+
73
+ | Key | Action | Description |
74
+ | ----------------- | ------------- | ----------------------------- |
75
+ | `Space` | Play/Pause | Toggle between play and pause |
76
+ | `←` (Left Arrow) | Seek Backward | Jump back 10 seconds |
77
+ | `→` (Right Arrow) | Seek Forward | Jump forward 10 seconds |
78
+ | `↑` (Up Arrow) | Volume Up | Increase volume by 10% |
79
+ | `↓` (Down Arrow) | Volume Down | Decrease volume by 10% |
80
+ | `M` | Mute/Unmute | Toggle mute (0% ↔ 100%) |
81
+ | `F` | Fullscreen | Toggle fullscreen mode |
82
+
83
+ ## Events
84
+
85
+ Both `VodPlayer` and `LivePlayer` support event handling through the `onEvent` prop. This allows you to listen to various player events and respond accordingly.
86
+
87
+ ### Event Types
88
+
89
+ | Event Name | Data Type | Description |
90
+ | ------------------ | ------------------------------------------- | ----------------------------------------------------- |
91
+ | `play` | `void` | Fired when playback starts |
92
+ | `pause` | `void` | Fired when playback is paused |
93
+ | `ended` | `void` | Fired when playback reaches the end |
94
+ | `seeking` | `void` | Fired when seeking starts |
95
+ | `seeked` | `void` | Fired when seeking is complete |
96
+ | `timeUpdate` | `{ currentTime: number; duration: number }` | Fired during playback with current time and duration |
97
+ | `volumeChange` | `{ volume: number }` | Fired when volume changes (0-1) |
98
+ | `fullscreenChange` | `{ isFullscreen: boolean }` | Fired when fullscreen mode changes |
99
+ | `qualityChange` | `{ level: number \| null }` | Fired when video quality changes |
100
+ | `loadedMetadata` | `{ duration: number }` | Fired when video metadata is loaded |
101
+ | `loadStart` | `void` | Fired when loading starts |
102
+ | `playing` | `void` | Fired when playback actually starts (after buffering) |
103
+ | `waiting` | `void` | Fired when playback is waiting for data |
104
+ | `error` | `unknown` | Fired when an error occurs |
105
+
106
+ ### Usage Examples
107
+
108
+ #### VOD Player with Events
109
+
110
+ ```tsx
111
+ import { VodPlayer } from "@halibegic/react-video-player";
112
+
113
+ function App() {
114
+ const handlePlayerEvent = (event: string, data: unknown) => {
115
+ switch (event) {
116
+ case "play":
117
+ console.log("Play");
118
+ break;
119
+ case "pause":
120
+ console.log("Pause");
121
+ break;
122
+ case "timeUpdate":
123
+ const { currentTime, duration } = data as {
124
+ currentTime: number;
125
+ duration: number;
126
+ };
127
+ console.log(
128
+ `Progress: ${((currentTime / duration) * 100).toFixed(1)}%`
129
+ );
130
+ break;
131
+ case "volumeChange":
132
+ const { volume } = data as { volume: number };
133
+ console.log(`Volume changed to: ${(volume * 100).toFixed(0)}%`);
134
+ break;
135
+ case "fullscreenChange":
136
+ const { isFullscreen } = data as { isFullscreen: boolean };
137
+ console.log(`Fullscreen: ${isFullscreen ? "ON" : "OFF"}`);
138
+ break;
139
+ case "error":
140
+ console.error("Player error:", data);
141
+ break;
142
+ }
143
+ };
144
+
145
+ return (
146
+ <VodPlayer url="https://example.com/vod.m3u8" onEvent={handlePlayerEvent} />
147
+ );
148
+ }
149
+ ```
150
+
151
+ #### Live Player with Events
152
+
153
+ ```tsx
154
+ import { LivePlayer } from "@halibegic/react-video-player";
155
+
156
+ function App() {
157
+ const handlePlayerEvent = (event: string, data: unknown) => {
158
+ switch (event) {
159
+ case "play":
160
+ console.log("Play");
161
+ break;
162
+ case "pause":
163
+ console.log("Pause");
164
+ break;
165
+ }
166
+ };
167
+
168
+ return (
169
+ <LivePlayer
170
+ url="https://example.com/live.m3u8"
171
+ startDate="2025-09-03T00:00:00Z"
172
+ endDate="2025-10-03T23:59:59Z"
173
+ onEvent={handlePlayerEvent}
174
+ />
175
+ );
176
+ }
177
+ ```
73
178
 
74
179
  ## Development
75
180
 
@@ -0,0 +1,2 @@
1
+ declare function LivePlayerKeyboard(): import("react/jsx-runtime").JSX.Element;
2
+ export { LivePlayerKeyboard };
@@ -8,7 +8,8 @@ type LivePlayerProps = {
8
8
  eventStartingSoon: string;
9
9
  live: string;
10
10
  };
11
+ onEvent?: (event: string, data: unknown) => void;
11
12
  };
12
- declare function LivePlayer({ url, startDate, endDate, messages }: LivePlayerProps): import("react/jsx-runtime").JSX.Element;
13
+ declare function LivePlayer({ url, startDate, endDate, messages, onEvent, }: LivePlayerProps): import("react/jsx-runtime").JSX.Element;
13
14
  export { LivePlayer };
14
15
  export type { LivePlayerProps };
@@ -0,0 +1,5 @@
1
+ type PlayerEventListenerProps = {
2
+ callback: (event: string, data: unknown) => void;
3
+ };
4
+ declare function PlayerEventListener({ callback }: PlayerEventListenerProps): null;
5
+ export { PlayerEventListener };
@@ -0,0 +1,2 @@
1
+ declare function PlayerKeyboard(): null;
2
+ export { PlayerKeyboard };
@@ -0,0 +1,2 @@
1
+ declare function VodPlayerKeyboard(): import("react/jsx-runtime").JSX.Element;
2
+ export { VodPlayerKeyboard };
@@ -1,10 +1,8 @@
1
1
  type VodPlayerProps = {
2
2
  url: string;
3
- watchHistory?: {
4
- enabled: boolean;
5
- storageKey: string;
6
- };
3
+ startTime?: number;
4
+ onEvent?: (event: string, data: unknown) => void;
7
5
  };
8
- declare function VodPlayer({ url, watchHistory }: VodPlayerProps): import("react/jsx-runtime").JSX.Element;
6
+ declare function VodPlayer(props: VodPlayerProps): import("react/jsx-runtime").JSX.Element;
9
7
  export { VodPlayer };
10
8
  export type { VodPlayerProps };