2013-07-03 1 views
1

나는 최신 vlc 버전을 사용하고 있습니다. 모두 볼 수있는 한 동일한 창 또는 여러 창에 있으면 상관 없습니다 동시에. 여기 libvlc (ubuntu)를 사용하여 멀티 트랙 파일/스트림 재생

내가하려고했던 내용은 다음과 같습니다

int main(int argc, char **argv) 
{ 
    libvlc_instance_t *inst; 
    libvlc_media_player_t *mp; 
    libvlc_media_t *m; 

    inst = libvlc_new(0, NULL); 
    m = libvlc_media_new_path(inst, "/tmp/mpt-smart-travels-classical-clip.ts"); 
    mp = libvlc_media_player_new_from_media(m); 
    libvlc_media_release(m); 
    libvlc_media_player_play(mp); 


    libvlc_track_description_t *videoIDs = libvlc_video_get_track_description(mp); 
    int numberOfTracks = sizeof videoIDs; 
    int count = 0; 
    int id; 
    while (count <= numberOfTracks) { 
     id = videoIDs[count]; 
     libvlc_video_set_track(mp,id); 
     count += 1; 
     } 

    sleep(10); 

    libvlc_media_player_stop(mp); 
    libvlc_media_player_release(mp); 
    libvlc_release(inst); 


    return 0; 
} 

$ gcc를 $ (PKG-설정 --cflags libvlc) -c TEST.C -o test.o

$ gcc가 test.o -o test $ (pkg-config --libs libvlc)

'p_next'라는 포인터를 사용하여 다음 스트림의 ID를 가져와야 할 수 있습니다. videolan.org/developers/vlc/doc/doxyge/html/structlibvlc_ 트랙 _description__t.html

답변

0

당신은 당신이하려는 일에 대해 더 구체적으로 할 수 있습니까?

질문의 코드가 컴파일되지 않으며 스트림의 트랙을 열거 할 수 없습니다. 다음은 해당 코드가 의미있는 것으로 변경된 최소 변경 사항입니다.

#include <vlc/vlc.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
    libvlc_instance_t *inst; 
    libvlc_media_player_t *mp; 
    libvlc_media_t *m; 

    if (argc < 2) 
    { 
     fprintf(stderr, "Please provide a file name to open.\n"); 
     exit(1); 
    } 

    inst = libvlc_new(0, NULL); 
    m = libvlc_media_new_path(inst, argv[1]); 
    mp = libvlc_media_player_new_from_media(m); 
    libvlc_media_release(m); 
    libvlc_media_player_play(mp); 

    sleep(1); 

    libvlc_track_description_t *track_desc = libvlc_video_get_track_description(mp); 
    int numberOfTracks = libvlc_video_get_track_count(mp); 

    fprintf(stderr, "numberOfTracks=%d\n", numberOfTracks); 

    while (track_desc != NULL) 
    { 
     int id = track_desc->i_id; 

     if (id == -1) 
     { 
      fprintf(stderr, "Not switching to pseudo-track id=%d name=%s\n", id, track_desc->psz_name); 
     } 
     else 
     { 
      fprintf(stderr, "Switching to video track id=%d name=%s\n", id, track_desc->psz_name); 
      libvlc_video_set_track(mp, id); 
     } 

     sleep(1); 
     track_desc = track_desc->p_next; 
    } 

    fprintf(stderr, "Finished enumerating tracks. Waiting a little.\n"); 

    sleep(10); 

    libvlc_media_player_stop(mp); 
    libvlc_media_player_release(mp); 
    libvlc_release(inst); 


    return 0; 
} 

다시 한 번 당신이하려는 일에 대해 구체적으로 설명 할 수 있습니까?

관련 문제