2016-07-29 5 views
0

나는 ip 카메라 스트림을위한 GUI를 만들기 위해 Qt와 libvlc를 사용하고 있습니다. 내가 그것을 마친 후에는 잘못된 값 NULLs ...에 대한 테스트를 시작했다. 내 문제는 네트워크 링크로 잘못된 문자열을 반환 할 때 반환 값으로 NULL을 얻지 못한다는 것이다. 코드의 일부는 다음과 같습니다.qt ip 카메라 스트림 libvlc 반환 값

const char * const vlc_args[] = { 
    "--preferred-resolution=576", 
    "--network-caching=250", 
    "--no-audio" 
}; 
my_vlcInstance = libvlc_new(3, vlc_args); 
if (my_vlcInstance == NULL){ 
    emit sendDebugMessage("Couldn't create vlc instance", "Red"); 
    return; 
} 
my_LiveMedia = libvlc_media_new_location(my_vlcInstance, link.toStdString().c_str()); 
if (my_LiveMedia == NULL){ 
    emit sendDebugMessage("Error installing media", "Red"); 
    return; 
} 
my_LiveMediaPlayer = libvlc_media_player_new_from_media(my_LiveMedia); 
if (my_LiveMediaPlayer == NULL){ 
    emit sendDebugMessage("Error creating media player", "Red"); 
    return; 
} 

이제 link는 네트워크 링크가 포함 된 QString입니다. 비주얼 스튜디오 디버그 창에서 오류를 볼 수 있기 때문에 나쁜 일이 발생한다는 것을 알고 있습니다. "핵심 입력 오류 :`dsfgdfgfg '열기가 실패했습니다." "입력을 열 수 없습니다. 그렇다면 왜 이러한 오류를 발견 할 수 있습니까?

더우기 ... 시작 녹음 버튼을 누르면 파일이 생성되고 (스트림이 없으면 분명히 손상됨) libvlc 함수 호출이 설명서에 지정된대로 오류를 반환하지 않습니다. 예를 들면 다음과 같습니다.

if (libvlc_media_player_play(my_LiveMediaPlayer) == 0){ 
    emit sendDebugMessage("Live mode started successfully", "Green"); 
    isLive = true; 
} 

그럼 어떻게 나쁜 링크를 잡을 수 있습니까?

+0

vlc-qt를 사용해 보셨습니까? 그게 당신을 도울 수 – Zen

+0

내가 DLL과 버전과 함께 일하는 데 문제가 있었고 나는 중간 남자를 건너 뛰기로 결정 ... –

답변

0

libvlc_media_player_get_state 함수로 문제를 해결했습니다. 나는 libvlc_media_player_play 반환 값을 무시하고, IDLE/CLOSE 및 OPENING과 다른 상태가 될 때까지 미디어 플레이어의 현재 상태를 폴링합니다. 나쁜 링크에서 나는 ERROR 상태를 얻고 정확한 링크에서 나는 PLAYING 상태가된다.