2012-05-01 2 views
2

현재 GStreamer 오디오 스트리밍과 관련된 대학 프로젝트에서 작업하고 있습니다. 클라이언트/서버와 TCP간에 스트리밍 작업을 성공적으로 처리했습니다.GStreamer가 파이프 라인의 filesrc 위치를 동적으로 변경합니다. 소리가 나지 않습니다.

다음 과제는 사용자 입력에 따라 오디오 스트림을 동적으로 변경하는 것입니다. 나는 다음과 같은 시도 :

pp.setState(State.PAUSED); 

    pp.setState(State.READY); 

    pp.unlink(src); 

    source = ElementFactory.make("filesrc", "src"); 

    pp.link(source); 

    source.set("location", fpath); 

    pp.setState(State.PLAYING); 

FPATH 오디오 파일의 위치입니다. 사용자 입력이 수신되면 상태는 PAUSE로 설정되고 소스는 연결 해제되며 새 소스가 추가됩니다. 상태가 PLAYING으로 설정됩니다.

클라이언트 쪽에서 GST_DEBUG를 사용했는데 오류가 없으면 클라이언트에 버퍼가 보내지지만 소리는 들리지 않습니다.

의견을 보내 주시면 감사하겠습니다.

답변

1

새 소스의 링크를 해제하고 추가 할 필요가 없습니다. 그냥 READY로 곧장 가면 (PAUSED로 갈 필요없이 준비가되면 암시 적으로 일어날 것입니다.) 새로운 위치를 설정하고 다시 게임으로 돌아갑니다.

+0

감사를 확장 할 수 있습니다. 위의 시도한 및 클라이언트 이제 막 및 버퍼가 보내집니다. –

+0

오류를 모니터링하기 위해 버스를 추가했는데 다음과 같은 오류가 발생합니다. 경고 ** : 파일이 열렸을 때 filesrc의'location '속성을 변경할 수없고 버스 오류 : Error occurred : 읽기 위해 열 수 없습니다 . BaseSink : [serversink] –

+0

오류는 filesrc가 여전히 READY 상태가 아님을 나타냅니다. 변경 사항을 반영하도록 위의 코드를 업데이트 할 수 있습니까? – ensonic

관련 문제