2012-08-23 5 views
2

같은 하드웨어 자원을 동시에 공유하는 GStreamer 프레임 워크를 기반으로하는 응용 프로그램 (둘 이상)을 작성하려고합니다.GStreamer를 사용하는 여러 응용 프로그램

예 : 비디오 디코딩을위한 HW 가속 기능이있는 하드웨어가 있습니다. HW 가속을 사용하여 서로 다른 비디오 스트림을 디코딩 할 수있는 두 가지 응용 프로그램을 동시에 시작하려고합니다. 물론 HW가 이러한 요청을 처리 할 수 ​​있다고 가정하고,이를 위해 적절한 드라이버 (GStreamer 요소는 아님)가 있지만, 별도의 프로세스간에 이러한 리소스 공유를 지원하는 GStreamer 요소를 작성하는 방법은 무엇입니까?

내가 어떤 링크를 부탁드립니다, 시작하는 제안 ...

+0

아마도 gstreamer 멀티플렉서 (mux)가 시작할 장소일까요? –

답변

1

당신은이 시간 /이 동시에 액세스 할 수 있습니다 승. 따라서 동시에 액세스하는 두 개의 gstreamer 요소가 작동해야합니다! 여기에는 Gstreamer만의 특징이 없습니다.

디코딩 요소를 쓰고 싶다면 모든 디코딩 요소와 같으며 하드웨어에 올바르게 액세스해야합니다. 운전자는 동시 접근을 처리해야합니다. 시작 지점은 Gstreamer 플러그인 작성자 가이드입니다.

+0

고맙습니다.하지만 필자가 말하고자하는 것은 하나의 phisical 비디오 디코더가 있고, (멀티플렉싱 디코딩을 통해) 몇 개의 스트림을 디코딩 할 수 있다는 것입니다. 사용자 공간에서 액세스 할 수있는 API-lib를 통해 표시됩니다. 나는 2 개의 가상 VID 디코더를 열 수있는 라이브러리를 가지고 있지만, 한 프로세스에서 수행 할 경우에만 vid0을 사용하고 vid1은 무료라는 것을 알고 있습니다. 프로세스를 요청할 때 인스턴스를 제공하는 가상 비디오 디코더 인스턴스의 '관리자'가 필요합니다 ... –

+0

이상적인 쿼리도 있어야합니다. 그렇지 않은 경우 vid0 및 vid1을 프로그램 인스턴스에 인수로 전달하여 응용 프로그램에서 사용할 인스턴스를 제어 할 수 있습니다. – av501

1

따라서 HW 디코더를 제어하고 여러 소스의 스트림을 디코딩하는 단일 프로세스가 필요합니다.

GStreamer를 기반으로 데몬을 구축하는 것이 좋습니다. gdppay와 gdpdepay는 데이터를 소켓을 통해 데몬으로 전달하는 매우 간단한 방법을 제공합니다. 데몬은 지정된 포트 (또는 유닉스 소켓)에서 연결을 기다리고 각 연결마다 가상 디코더를 엽니 다. 개별 응용 프로그램의 비디오 디코더 요소는 내부적으로 데몬에 연결되어 디코딩 된 비디오를 가져옵니다.

관련 문제