2016-11-09 1 views
2

저는 Starboard에서 미디어 핸들러를 구현하고 있습니다. 코발트의 클라이언트 애플리케이션이 컨텐츠를 충분히 공격적으로 버퍼링하지 않는 상황에 처해 있습니다. 그 결과 빈 버퍼로 유휴 상태가됩니다. 플랫폼의 버퍼가 고갈되었을 때 트리거 할 적절한 Starboard 이벤트는 무엇입니까? 어떻게 든 오류를 버블 링해야할까요, 아니면 클라이언트 앱에 더 많은 데이터를 요청할 수있는 신호가 있습니까?버퍼 언더런을 처리하는 가장 좋은 방법은 무엇입니까?

답변

5

언더런이있는 경우 플레이어 구현은 비디오 재생을 내부적으로 일시 중지하여 처리해야합니다. 최종 사용자에게는 미디어 스택의 상태가 "재생 중"으로 간주되는 동안 미디어 재생이 일시 중지됩니다. 이렇게하면 재생을 다시 시작하기 전에 플레이어가 일부 비디오 데이터를 수신 할 수 있습니다. 레퍼런스 구현에서 PlayerWorker는 오디오 재생을 일시 정지하여이를 구현합니다. 미디어 시간과 비디오 재생이 오디오 시간과 연결되면 전체 플레이어가 일시 중지됩니다.

새 데이터가 오면 플레이어는 자동으로 재생을 재개해야합니다. 플레이어 구현은 향후 언더런을 피하기 위해 프리 롤/다시 시작에 필요한 버퍼 양을 늘릴 수도 있지만 일반적으로 필요하지는 않습니다.

귀하의 앱이 지속적으로 언더런에 빠져 있다고 언급 했으므로. 언더런이 제대로 처리 될 수있는 경우에도 더 나은 사용자 환경을 위해이 문제를 해결하는 것이 좋습니다.

먼저 테스트 환경에서 요청한 비디오 품질에 충분한 네트워크 대역폭이 있는지 확인해야합니다. 앱의 네트워크가 매우 취약한 시장을 타겟팅하는 경우 더 많은 미디어 데이터를 버퍼링하는 것이 좋습니다.

네트워크 대역폭이 충분하지 않은 경우 응용 프로그램이 언더런하는 경우 미디어 데이터가 충분히 빠르게 처리되지 않음을 나타냅니다. 좋은 방법은 kSbPlayerDecoderStateNeedsData가 자주 실행되는지 확인하고 SbPlayerWriteSample()이 StarBoard 경계를 넘어 미디어 데이터를 이동시키는 유일한 장소이기 때문에 많은 지연없이 호출되는지 확인하는 것입니다.

관련 문제