1import { Button, Navigation, NavigationStack, Script, useEffect, useMemo, useState, VideoPlayer, VStack } from "scripting"
2
3function Example() {
4 const dismiss = Navigation.useDismiss()
5 const [status, setStatus] = useState<TimeControlStatus>(TimeControlStatus.paused)
6
7 const player = useMemo(() => {
8 const player = new AVPlayer()
9 player.setSource("https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
10 player.onTimeControlStatusChanged = (status) => {
11 setStatus(status)
12 }
13 SharedAudioSession.setActive(true)
14 SharedAudioSession.setCategory(
15 'playback',
16 ['mixWithOthers']
17 )
18 return player
19 }, [])
20
21 useEffect(() => {
22 return () => {
23 player.dispose()
24 }
25 }, [])
26
27 return <NavigationStack>
28 <VStack
29 navigationTitle={"VideoPlayer"}
30 navigationBarTitleDisplayMode={"inline"}
31 toolbar={{
32 cancellationAction: <Button
33 title={"Done"}
34 action={dismiss}
35 />
36 }}
37 >
38 <VideoPlayer
39 player={player}
40 frame={{
41 height: 300
42 }}
43 />
44 <Button
45 title={status === TimeControlStatus.paused
46 ? "Play"
47 : "Pause"
48 }
49 action={() => {
50 if (status === TimeControlStatus.paused) {
51 player.play()
52 } else {
53 player.pause()
54 }
55 }}
56 />
57 </VStack>
58 </NavigationStack >
59}
60
61async function run() {
62 await Navigation.present({
63 element: <Example />
64 })
65
66 Script.exit()
67}
68
69run()