2014-12-16 3 views
2

smem 콜백을 사용하여 모든 미디어 (rtsp, mjpeg, mp4, avi ...)에서 원시 프레임을 검색하는 데 libvlc를 사용하고 있으며 모든 것이 잘 재생됩니다.libvlc_media_player_stop 반환 할 30 초 반환

하지만 내 문제는 libvlc_media_player_stop 또는 libvlc_media_player_release를 호출하면 30 초 동안 내 프로그램이 멈추는 것입니다.

나는 검색을 많이 할 시도 많은 해결 방법 :

정지를 호출하는 새 스레드를 확인 : 내가 미디어 새롭게 재생하려는 경우 MediaPlayer를 여전히에 걸어 때문에 내 문제가 해결되지 않습니다 주 스레드.

마우스 이벤트가 아닌 주 스레드에서 전화를 끊습니다. 30 초도 걸렸습니다.

다른 버전 2.1.3에서 최신 버전 3.0.0으로 시도해 보았는데 문제가 동일하므로 어떻게 중지할까요?

초기화 :

char smem_options[1000]; 
sprintf(smem_options 
, "#transcode{vcodec=RV24}:smem{" 
"video-prerender-callback=%lld," 
"video-postrender-callback=%lld," 
"video-data=%lld}," 
, (long long int)(intptr_t)(void*)&cbVideoPrerender 
, (long long int)(intptr_t)(void*)&cbVideoPostrender 
, (long long int)(void*)this); 

const char * const vlc_args[] = { 
"-I", "dummy",  
"--verbose=0", 
"--clock-jitter=0", 
"--no-audio", 
"--sout", smem_options // Stream to memory 
}; 
mpLibVlc = libvlc_new(sizeof(vlc_args)/sizeof(vlc_args[0]), vlc_args); 

시작 :

mpMedia = libvlc_media_new_path(mpLibVlc, mMediaPath.c_str()); 
mpMediaPlayer = libvlc_media_player_new_from_media(mpMedia); 
libvlc_media_player_play(mpMediaPlayer); 

정지 : 내가 VLC와 다른 문제를 많이 찾았지만, 그 easyly 모든 유일한 라이브러리 느릅 나무 핸들의

libvlc_media_player_set_hwnd(mpMediaPlayer, NULL); 
libvlc_media_release(mpMedia); 
libvlc_media_player_stop(mpMediaPlayer); 
libvlc_media_player_release(mpMediaPlayer); 

논문 미디어.

그래서 어떻게 멈추지 않고 멈출 수 있습니까?

감사합니다.

+0

libvlc_media_player_stop을'libvlc_media_release' 전에 시도 했습니까? – i486

+0

예, libvlc_media_player_stop 만 시도하고 libvlc_media_player_release도 멈추지 않고 항상 30 초가 걸렸습니다. – Maypeur

+0

나는 똑같은 문제에 직면 해있다. 해결 했니? – Temak

답변

0

@ serg.v.gusev 내 게시물은 오래된 것이지만 기억하는 것은 다음과 같습니다. 존중해야합니다 : - 로컬 파일을로드하려면 libvlc_media_player_new_from_media를 사용하십시오. - libvlc_media_player_new_from_location을 사용하여 IP 카메라에 연결하십시오.

어쨌든 제 경우 원래 비디오가 깨졌고 30 초 동안 정지하라는 전화를 걸었습니다. 동일한 코드는 잘 인코딩 된 비디오 파일과 함께 작동합니다.

추신 : 저는 비디오 미디어를 읽고 녹화하는 중 ffmpeg로 이동했습니다. 조금 더 복잡하지만 vlc는 ffmpeg를 기반으로하기 때문에 더 많은 제어, 가능성 및 업데이트가 가능합니다.

+0

libvlc_media_player_new_from_location 함수를 찾을 수 없습니다. 아마도 더 이상 사용되지 않으며 제거되었습니다 (3.0.0-git 버전에서 작동합니다). 하지만 이미 libvlc_media_new_location을 사용하여 libvlc_media 인스턴스를 만듭니다. 나는 똑같은 것 같아. 내 비디오 스트림이 확실히 맞습니다. 따라서이 방법은 저에게 효과적이지 않습니다. 특히 30 초가 아니라 내 프로세스가 영구적으로 잠겼다는 점을 감안할 때 좋습니다. 어쨌든 귀하의 답변 주셔서 감사합니다! –