@@ -5,14 +5,14 @@ import { toBlobURL, fetchFile } from "@ffmpeg/util";
5
5
function App ( ) {
6
6
const [ loaded , setLoaded ] = useState ( false ) ;
7
7
const ffmpegRef = useRef ( new FFmpeg ( ) ) ;
8
- const videoRef = useRef ( null ) ;
9
- const messageRef = useRef ( null ) ;
8
+ const videoRef = useRef < HTMLVideoElement | null > ( null )
9
+ const messageRef = useRef < HTMLParagraphElement | null > ( null )
10
10
11
11
const load = async ( ) => {
12
12
const baseURL = "https://unpkg.com/@ffmpeg/[email protected] /dist/esm" ;
13
13
const ffmpeg = ffmpegRef . current ;
14
14
ffmpeg . on ( "log" , ( { message } ) => {
15
- messageRef . current . innerHTML = message ;
15
+ if ( messageRef . current ) messageRef . current . innerHTML = message ;
16
16
} ) ;
17
17
// toBlobURL is used to bypass CORS issue, urls with the same
18
18
// domain can be used directly.
@@ -35,10 +35,13 @@ function App() {
35
35
const ffmpeg = ffmpegRef . current ;
36
36
await ffmpeg . writeFile ( "input.avi" , await fetchFile ( videoURL ) ) ;
37
37
await ffmpeg . exec ( [ "-i" , "input.avi" , "output.mp4" ] ) ;
38
- const data = await ffmpeg . readFile ( "output.mp4" ) ;
39
- videoRef . current . src = URL . createObjectURL (
40
- new Blob ( [ data . buffer ] , { type : "video/mp4" } )
41
- ) ;
38
+ const fileData = await ffmpeg . readFile ( 'output.mp4' ) ;
39
+ const data = new Uint8Array ( fileData as ArrayBuffer ) ;
40
+ if ( videoRef . current ) {
41
+ videoRef . current . src = URL . createObjectURL (
42
+ new Blob ( [ data . buffer ] , { type : 'video/mp4' } )
43
+ )
44
+ }
42
45
} ;
43
46
44
47
return loaded ? (
0 commit comments