2009-12-05 4 views
8

비디오가 H264로 인코딩되고 오디오가없는 들어오는 RTP 스트림을 재생할 수있는 Qt 위젯을 만들고 싶습니다. 구현을위한Qt를 사용하여 RTP 비디오 스트림을 재생 하시겠습니까?

내 기본 계획은 이것이다 :

  • 포논 MediaSource 객체 (스트림 형)를 만듭니다.
  • 사용하여 비디오 데이터를 얻기 데이터
  • 을 제공하는 QIODevice 서브 클래스로 연결 중 하나를
    • JRTPLIB 클라이언트 라이브러리
    • GStreamergstrtpbin 플러그인. 이 플러그인은 패키지를 depayloading하고 비디오를 디코딩하는 데주의를 기울입니다. 어쩌면 포논이 데이터를 인식 할 가능성이 높아질 수 있습니다.

내 환경 :

  • 우분투 9.10
  • Qt는 4.6

내 질문 :

  • 내 접근 좋은가요? 아마도 좀 더 명백하거나 간단한 해결책을 간과 할 수 있습니까?
  • 현재이 문제가 발생합니다. 비디오 스트림을 재생하려고 할 때 MediaObject의 상태가 errorType FatalError 인 ErrorState로 바뀝니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 내가 찾은

편집
하나의 솔루션 내가이 thread에 대해 배운 Qt는,와 함께 libVLC을 사용하고 있습니다. 관심이 있으신 분은 code sample입니다. 저는 Phonon 기반 솔루션을 찾고 있습니다.
이상적으로는 SDP 파일 만 제공하면 작업이 완료됩니다.

답변

3

libVLC 솔루션을 사용하여 작동시킬 수있었습니다. 나는 이것이 단지 솔루션이라는 것을 garantuee 할 수는 없다.

여기는 link to the libVLC sample입니다.

+0

이 파일을 가져온 것 같습니다. 코드를 다시 게시 할 기회 또는 시간이 지났습니까? – Narcolei

+1

알려 주셔서 감사합니다. URL을 수정했습니다. – StackedCrooked

+0

@Stacked 어쨌든 파일을 사용하여 IP 캠에서 스트림을 가져 오지 않습니까? –

2

적어도 Windows에서 Phonon이 작동하는 방식은 QT가 DirectShow (\ plugins \ phonon_backend \ phonon_ds94.dll) 및 GStreamer에 대한 포톤 백엔드 플러그인을 제공한다는 것입니다. 그런 다음 RTP 스트림을 소스로 받아 들일 수있는 DirectShow 필터를 구하거나 씁니다. DirectShow가 디코딩을 처리하고 Phonon이 렌더링을 처리합니다.

 Phonon::MediaObject *media = new Phonon::MediaObject(); 
     Phonon::VideoWidget *video = new Phonon::VideoWidget(); 
     Phonon::createPath(media, video); 
     media->setCurrentSource(source); 
     media->play(); 

이 문제가 소스로 RTP를 수락있는 GStreamer 백엔드에있는 것을 보인다 : 백엔드가 작동하는 경우로

그래서, 응용 프로그램 코드는 간단합니다. 독립 실행 형 GStreamer에서 해당 소스를 아무런 문제없이 재생할 수 있습니까?

+0

아직 작동시키지 못했습니다. 로컬 파일 재생은 작동하지만 RTP 스트림을로드하려고 할 때 (RTP 패킷을 읽는 MediaSource (QIODevice) 객체를 통해) VideoPlayer는 LoadingState에 머물러 있습니다. 지금 당장 다른 접근법을 실험하고 있습니다. GStreamer의 gstrtpbin 플러그인을 사용하여 들어오는 RTP 데이터를 읽고, 비디오 스트림을 디코딩하고, 어떻게 든 Qt 위젯에 연결합니다. – StackedCrooked

관련 문제