📄 vlm.c
字号:
{ vlm_schedule_t *p_schedule; p_schedule = vlm_ScheduleNew( p_vlm, ppsz_command[1] ); if( !p_schedule ) { p_message = vlm_MessageNew( "new", "could not create schedule" ); goto error; } } /* Media */ else { vlm_media_t *p_media; p_media = vlm_MediaNew( p_vlm, ppsz_command[1], i_type ); if( !p_media ) { p_message = vlm_MessageNew( "new", "could not create media" ); goto error; } } if( i_command <= 3 ) { p_message = vlm_MessageNew( "new", NULL ); goto success; } /* Properties will be dealt with later on */ } else if( !strcmp(ppsz_command[0], "setup") ) { if( i_command < 2 ) goto syntax_error; /* Properties will be dealt with later on */ } else if( !strcmp(ppsz_command[0], "del") ) { vlm_media_t *p_media; vlm_schedule_t *p_schedule; if( i_command < 2 ) goto syntax_error; p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] ); p_schedule = vlm_ScheduleSearch( p_vlm, ppsz_command[1] ); if( p_schedule != NULL ) { vlm_ScheduleDelete( p_vlm, p_schedule, NULL ); } else if( p_media != NULL ) { vlm_MediaDelete( p_vlm, p_media, NULL ); } else if( !strcmp(ppsz_command[1], "media") ) { while( p_vlm->i_media ) vlm_MediaDelete( p_vlm, p_vlm->media[0], NULL ); } else if( !strcmp(ppsz_command[1], "schedule") ) { while( p_vlm->i_schedule ) vlm_ScheduleDelete( p_vlm, p_vlm->schedule[0], NULL ); } else if( !strcmp(ppsz_command[1], "all") ) { while( p_vlm->i_media ) vlm_MediaDelete( p_vlm, p_vlm->media[0], NULL ); while( p_vlm->i_schedule ) vlm_ScheduleDelete( p_vlm, p_vlm->schedule[0], NULL ); } else { p_message = vlm_MessageNew( "del", "%s: media unknown", ppsz_command[1] ); goto error; } p_message = vlm_MessageNew( "del", NULL ); goto success; } else if( !strcmp(ppsz_command[0], "show") ) { vlm_media_t *p_media; vlm_schedule_t *p_schedule; if( i_command == 1 ) { p_message = vlm_Show( p_vlm, NULL, NULL, NULL ); goto success; } else if( i_command > 2 ) goto syntax_error; p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] ); p_schedule = vlm_ScheduleSearch( p_vlm, ppsz_command[1] ); if( p_schedule != NULL ) { p_message = vlm_Show( p_vlm, NULL, p_schedule, NULL ); } else if( p_media != NULL ) { p_message = vlm_Show( p_vlm, p_media, NULL, NULL ); } else { p_message = vlm_Show( p_vlm, NULL, NULL, ppsz_command[1] ); } goto success; } else if( !strcmp(ppsz_command[0], "help") ) { if( i_command != 1 ) goto syntax_error; p_message = vlm_Help( p_vlm, NULL ); goto success; } else if( !strcmp(ppsz_command[0], "control") ) { vlm_media_t *p_media; if( i_command < 3 ) goto syntax_error; if( !(p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] ) ) ) { p_message = vlm_MessageNew( "control", "%s: media unknown", ppsz_command[1] ); goto error; } else { char *psz_command, *psz_arg = 0, *psz_instance = 0; int i_index = 2; if( strcmp( ppsz_command[2], "play" ) && strcmp( ppsz_command[2], "stop" ) && strcmp( ppsz_command[2], "pause" ) && strcmp( ppsz_command[2], "seek" ) ) { i_index++; psz_instance = ppsz_command[2]; if( i_command < 4 ) goto syntax_error; } psz_command = ppsz_command[i_index]; if( i_command >= i_index + 2 ) psz_arg = ppsz_command[i_index + 1]; vlm_MediaControl( p_vlm, p_media, psz_instance, psz_command, psz_arg ); p_message = vlm_MessageNew( "control", NULL ); goto success; } } else if( !strcmp(ppsz_command[0], "save") ) { if( i_command != 2 ) goto syntax_error; if( vlm_Save( p_vlm, ppsz_command[1] ) ) { p_message = vlm_MessageNew( "save", "Unable to save to file" ); goto error; } else { p_message = vlm_MessageNew( "save", NULL ); goto success; } } else if( !strcmp(ppsz_command[0], "load") ) { if( i_command != 2 ) goto syntax_error; switch( vlm_Load( p_vlm, ppsz_command[1] ) ) { case 0: p_message = vlm_MessageNew( "load", NULL ); goto success; case 2: p_message = vlm_MessageNew( "load", "read file error" ); goto error; case 3: p_message = vlm_MessageNew( "load", "error while loading file" ); goto error; default: p_message = vlm_MessageNew( "load", "Unable to load from file" ); goto error; } } else { p_message = vlm_MessageNew( ppsz_command[0], "Unknown command" ); goto error; } /* Common code between "new" and "setup" */ if( !strcmp(ppsz_command[0], "new") || !strcmp(ppsz_command[0], "setup") ) { int i_command_start = strcmp(ppsz_command[0], "new") ? 2 : 3; vlm_media_t *p_media; vlm_schedule_t *p_schedule; if( i_command < i_command_start ) goto syntax_error; p_media = vlm_MediaSearch( p_vlm, ppsz_command[1] ); p_schedule = vlm_ScheduleSearch( p_vlm, ppsz_command[1] ); if( !p_media && !p_schedule ) { p_message = vlm_MessageNew( ppsz_command[0], "%s unknown", ppsz_command[1] ); goto error; } if( p_schedule != NULL ) { for( i = i_command_start ; i < i_command ; i++ ) { if( !strcmp( ppsz_command[i], "enabled" ) || !strcmp( ppsz_command[i], "disabled" ) ) { vlm_ScheduleSetup( p_schedule, ppsz_command[i], NULL ); } /* Beware: everything behind append is considered as * command line */ else if( !strcmp( ppsz_command[i], "append" ) ) { if( ++i >= i_command ) break; for( j = i + 1; j < i_command; j++ ) { ppsz_command[i] = realloc( ppsz_command[i], strlen(ppsz_command[i]) + strlen(ppsz_command[j]) + 1 + 1 ); strcat( ppsz_command[i], " " ); strcat( ppsz_command[i], ppsz_command[j] ); } vlm_ScheduleSetup( p_schedule, ppsz_command[i - 1], ppsz_command[i] ); break; } else { if( i + 1 >= i_command && !strcmp(ppsz_command[0], "new") ) { vlm_ScheduleDelete( p_vlm, p_schedule, NULL ); p_message = vlm_MessageNew( ppsz_command[0], "Wrong properties syntax" ); goto error; } else if( i + 1 >= i_command ) { p_message = vlm_MessageNew( ppsz_command[0], "Wrong properties syntax" ); goto error; } vlm_ScheduleSetup( p_schedule, ppsz_command[i], ppsz_command[i+1] ); i++; } } } else if( p_media != NULL ) { for( i = i_command_start ; i < i_command ; i++ ) { if( !strcmp( ppsz_command[i], "enabled" ) || !strcmp( ppsz_command[i], "disabled" ) ) { vlm_MediaSetup( p_vlm, p_media, ppsz_command[i], NULL ); } else if( i + 1 >= i_command && !strcmp( ppsz_command[i], "mux") ) { if( p_media->i_type != VOD_TYPE ) { p_message = vlm_MessageNew( ppsz_command[0], "mux only available for broadcast" ); } else { vlm_MediaSetup( p_vlm, p_media, ppsz_command[i], ppsz_command[i+1] ); i++; } } else if( !strcmp( ppsz_command[i], "loop" ) || !strcmp( ppsz_command[i], "unloop" ) ) { if( p_media->i_type != BROADCAST_TYPE ) { p_message = vlm_MessageNew( ppsz_command[0], "loop only available for broadcast" ); } else { vlm_MediaSetup( p_vlm, p_media, ppsz_command[i], NULL ); } } else { if( i + 1 >= i_command && !strcmp(ppsz_command[0], "new") ) { vlm_MediaDelete( p_vlm, p_media, NULL ); p_message = vlm_MessageNew( ppsz_command[0], "Wrong properties syntax" ); goto error; } else if( i + 1 >= i_command ) { p_message = vlm_MessageNew( ppsz_command[0], "Wrong properties syntax" ); goto error; } vlm_MediaSetup( p_vlm, p_media, ppsz_command[i], ppsz_command[i+1] ); i++; } } } p_message = vlm_MessageNew( ppsz_command[0], NULL ); goto success; }success: for( i = 0 ; i < i_command ; i++ ) FREE( ppsz_command[i] ); FREE( ppsz_command ); *pp_message = p_message; return VLC_SUCCESS;syntax_error: p_message = vlm_MessageNew( ppsz_command[0], "Wrong command syntax" );error: for( i = 0 ; i < i_command ; i++ ) FREE( ppsz_command[i] ); FREE( ppsz_command ); *pp_message = p_message; return VLC_EGENERIC;}static vlm_media_t *vlm_MediaSearch( vlm_t *vlm, char *psz_name ){ int i; for( i = 0; i < vlm->i_media; i++ ) { if( strcmp( psz_name, vlm->media[i]->psz_name ) == 0 ) { return vlm->media[i]; } } return NULL;}/***************************************************************************** * Media handling *****************************************************************************/static vlm_media_instance_t *vlm_MediaInstanceSearch( vlm_t *vlm, vlm_media_t *media, char *psz_name ){ int i; for( i = 0; i < media->i_instance; i++ ) { if( ( !psz_name && !media->instance[i]->psz_name ) || ( psz_name && media->instance[i]->psz_name && !strcmp( psz_name, media->instance[i]->psz_name ) ) ) { return media->instance[i]; } } return NULL;}vlm_media_t *vlm_MediaNew( vlm_t *vlm, char *psz_name, int i_type ){ vlm_media_t *media = malloc( sizeof( vlm_media_t ) ); if( !media ) { msg_Err( vlm, "out of memory" ); return NULL; } /* Check if we need to load the VOD server */ if( i_type == VOD_TYPE && !vlm->i_vod ) { vlm->vod = vlc_object_create( vlm, VLC_OBJECT_VOD ); vlc_object_attach( vlm->vod, vlm ); vlm->vod->p_module = module_Need( vlm->vod, "vod server", 0, 0 ); if( !vlm->vod->p_module ) { msg_Err( vlm, "cannot find vod server" ); vlc_object_detach( vlm->vod ); vlc_object_destroy( vlm->vod ); vlm->vod = 0; free( media ); return NULL; } vlm->vod->p_data = vlm; vlm->vod->pf_media_control = vlm_MediaVodControl; } if( i_type == VOD_TYPE ) vlm->i_vod++; media->psz_name = strdup( psz_name ); media->b_enabled = VLC_FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -