@@ -124,7 +124,10 @@ typedef struct {
124
124
125
125
typedef struct {
126
126
ngx_uint_t flags ;
127
- ngx_str_t path ;
127
+ ngx_str_t path ; /* /tmp/rec/myfile-123.flv */
128
+ ngx_str_t filename ; /* myfile-123.flv */
129
+ ngx_str_t basename ; /* myfile-123 */
130
+ ngx_str_t dirname ; /* /tmp/rec */
128
131
ngx_str_t recorder ;
129
132
u_char name [NGX_RTMP_MAX_NAME ];
130
133
u_char args [NGX_RTMP_MAX_ARGS ];
@@ -378,6 +381,18 @@ static ngx_rtmp_eval_t ngx_rtmp_exec_event_specific_eval[] = {
378
381
ngx_rtmp_exec_eval_ctx_str ,
379
382
offsetof(ngx_rtmp_exec_ctx_t , path ) },
380
383
384
+ { ngx_string ("filename" ),
385
+ ngx_rtmp_exec_eval_ctx_str ,
386
+ offsetof(ngx_rtmp_exec_ctx_t , filename ) },
387
+
388
+ { ngx_string ("basename" ),
389
+ ngx_rtmp_exec_eval_ctx_str ,
390
+ offsetof(ngx_rtmp_exec_ctx_t , basename ) },
391
+
392
+ { ngx_string ("dirname" ),
393
+ ngx_rtmp_exec_eval_ctx_str ,
394
+ offsetof(ngx_rtmp_exec_ctx_t , dirname ) },
395
+
381
396
{ ngx_string ("recorder" ),
382
397
ngx_rtmp_exec_eval_ctx_str ,
383
398
offsetof(ngx_rtmp_exec_ctx_t , recorder ) },
@@ -1290,6 +1305,8 @@ ngx_rtmp_exec_close_stream(ngx_rtmp_session_t *s, ngx_rtmp_close_stream_t *v)
1290
1305
static ngx_int_t
1291
1306
ngx_rtmp_exec_record_done (ngx_rtmp_session_t * s , ngx_rtmp_record_done_t * v )
1292
1307
{
1308
+ u_char c ;
1309
+ ngx_uint_t ext , dir ;
1293
1310
ngx_rtmp_exec_ctx_t * ctx ;
1294
1311
ngx_rtmp_exec_app_conf_t * eacf ;
1295
1312
@@ -1310,6 +1327,29 @@ ngx_rtmp_exec_record_done(ngx_rtmp_session_t *s, ngx_rtmp_record_done_t *v)
1310
1327
ctx -> recorder = v -> recorder ;
1311
1328
ctx -> path = v -> path ;
1312
1329
1330
+ ctx -> dirname .data = ctx -> path .data ;
1331
+ ctx -> dirname .len = 0 ;
1332
+
1333
+ for (dir = ctx -> path .len ; dir > 0 ; dir -- ) {
1334
+ c = ctx -> path .data [dir - 1 ];
1335
+ if (c == '/' || c == '\\' ) {
1336
+ ctx -> dirname .len = dir - 1 ;
1337
+ break ;
1338
+ }
1339
+ }
1340
+
1341
+ ctx -> filename .data = ctx -> path .data + dir ;
1342
+ ctx -> filename .len = ctx -> path .len - dir ;
1343
+
1344
+ ctx -> basename = ctx -> filename ;
1345
+
1346
+ for (ext = ctx -> filename .len ; ext > 0 ; ext -- ) {
1347
+ if (ctx -> filename .data [ext - 1 ] == '.' ) {
1348
+ ctx -> basename .len = ext - 1 ;
1349
+ break ;
1350
+ }
1351
+ }
1352
+
1313
1353
ngx_rtmp_exec_unmanaged (s , & eacf -> conf [NGX_RTMP_EXEC_RECORD_DONE ],
1314
1354
"record_done" );
1315
1355
0 commit comments