1
- const AWS = require ( 'aws-sdk' ) ;
1
+ const { S3Client, PutObjectCommand } = require ( '@aws-sdk/client-s3' ) ;
2
+ const { Upload } = require ( '@aws-sdk/lib-storage' ) ;
2
3
const ffmpeg = require ( 'fluent-ffmpeg' ) ;
3
4
const stream = require ( 'stream' ) ;
4
5
6
+
5
7
module . exports . handler = async ( event ) => {
6
-
7
- const s3 = new AWS . S3 ( ) ;
8
+ const s3Client = new S3Client ( ) ;
8
9
const url = event . streamingUrl ;
9
10
const referer = event . referer || null ;
10
11
const inputOptions = referer ? [ "-referer" , referer ] : [ ] ;
11
12
const bucket = event . destinationBucket ;
12
13
const key = event . destinationKey ;
13
14
const pass = new stream . PassThrough ( ) ;
15
+ const upload = new Upload ( {
16
+ client : s3Client ,
17
+ params : {
18
+ Bucket : bucket ,
19
+ Key : key ,
20
+ Body : pass ,
21
+ ContentType : 'audio/mp3'
22
+ }
23
+ } ) ;
24
+
25
+ upload . on ( "end" , ( { loaded, total, part, Key, Bucket } ) => {
26
+ console . log ( `Uploaded ${ total } bytes in ${ part } parts to s3://${ Bucket } /${ Key } ` ) ;
27
+ } ) ;
14
28
15
- return new Promise ( ( resolve , reject ) => {
16
- ffmpeg ( )
29
+ try {
30
+ ffmpeg ( { logger : console } )
17
31
. input ( url )
18
32
. inputOptions ( inputOptions )
19
- . format ( 'mp3' )
20
- . output ( pass , { end : true } )
21
- . on ( 'start' , ( ) => {
22
- s3 . upload ( {
23
- Bucket : bucket ,
24
- Key : key ,
25
- Body : pass ,
26
- } , ( error , _data ) => {
27
- if ( error ) {
28
- console . error ( 'upload failed' , error ) ;
29
- reject ( error ) ;
30
- } else {
31
- resolve ( { success : true } ) ;
32
- }
33
- } ) ;
33
+ . format ( "mp3" )
34
+ . output ( pass , { end : false } )
35
+ . on ( 'start' , function ( commandLine ) {
36
+ console . log ( 'Spawned Ffmpeg with command: ' + commandLine ) ;
34
37
} )
35
- . on ( 'error' , ( error ) => {
36
- console . error ( 'ffmpeg error' , error ) ;
37
- reject ( error ) ;
38
+ . on ( "error" , ( error ) => {
39
+ console . error ( "ffmpeg error" , error ) ;
40
+ } )
41
+ . on ( "end" , ( ) => {
42
+ console . log ( "ffmpeg finished" ) ;
43
+ pass . end ( ) ;
44
+ } )
45
+ . on ( "*" , ( event , ...args ) => {
46
+ console . log ( 'ffmpeg fired event:' , event , 'with' , args ) ;
38
47
} )
39
48
. run ( ) ;
40
- } ) ;
49
+ } catch ( error ) {
50
+ console . error ( "ffmpeg error" , error ) ;
51
+ reject ( error ) ;
52
+ }
53
+
54
+ await upload . done ( ) ;
55
+ return { status : 200 , message : 'done' } ;
41
56
}
0 commit comments