示例

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()