2013-12-13 7 views
1

Windows 8.1 (64 비트)에서 Wowza 3.6.2를 실행하고 Transcoder 부가 기능을 활성화했습니다. 트랜스 코더를 사용하여 라이브 스트림에서 JPEG 스냅 샷을 가져옵니다. here과 비슷한 사용자 정의 HTTPProvider를 작성했습니다. 이 잘 작동하고 내 HTTPProvider 통해 스트림에서 JPG 스냅 샷을 가져올 수 있습니다.Wowza Transcoder 추가 기능 throw ArrayIndexOutOfBoundsException

문제점은 트랜스 코더를 활성화 한 후 모든 서버에서 내 서버 로그에 onPublishonUnPublish의 오류 메시지가 표시된다는 것입니다.

트랜스 코더 템플릿으로 Wowza 설치와 함께 제공되는 기본 transrate.xml을 수정없이 사용했습니다.

ERROR server comment - TranscoderSessionDestination.init[livereceiver/_definst_/asdf]: [asdf_160p]:java.lang.ArrayIndexOutOfBoundsException: 1 
java.lang.ArrayIndexOutOfBoundsException: 1 
    at com.foo.wms.module.IncomingStreamEventHandler.getQueryStringMap(IncomingStreamEventHandler.java:191) 
    at com.foo.wms.module.IncomingStreamEventHandler.onPublish(IncomingStreamEventHandler.java:83) 
    at com.wowza.wms.stream.MediaStream.notifyActionPublish(Unknown Source) 
    at com.wowza.wms.stream.publish.Publisher.publish(Unknown Source) 
    at com.wowza.wms.stream.publish.Publisher.publish(Unknown Source) 
    at com.wowza.wms.transcoder.model.TranscoderSessionDestination.init(Unknown Source) 
    at com.wowza.wms.transcoder.model.TranscoderSession.a(Unknown Source) 
    at com.wowza.wms.transcoder.model.TranscoderSession.handleOnMetadata(Unknown Source) 
    at com.wowza.wms.transcoder.model.LiveStreamTranscoder.handleOnMetadata(Unknown Source) 
    at com.wowza.wms.stream.live.LiveStreamTranscoderRunner.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 

을 내가 스트림의 게시를 취소 할 때 나는이 얻을 : 내가 스트림 asdf에 게시 할 때

나는 비슷한이 오류를 얻을

ERROR server comment - TranscoderSessionDestination.shutdown: [asdf_160p]:java.lang.NullPointerException 
java.lang.NullPointerException 
    at com.foo.wms.module.IncomingStreamEventHandler.onUnPublish(IncomingStreamEventHandler.java:166) 
    at com.wowza.wms.stream.MediaStream.notifyActionUnPublish(Unknown Source) 
    at com.wowza.wms.stream.publish.Publisher.publish(Unknown Source) 
    at com.wowza.wms.stream.publish.Publisher.unpublish(Unknown Source) 
    at com.wowza.wms.transcoder.model.TranscoderSessionDestination.shutdown(Unknown Source) 
    at com.wowza.wms.transcoder.model.TranscoderSession.c(Unknown Source) 
    at com.wowza.wms.transcoder.model.TranscoderSession.shutdown(Unknown Source) 
    at com.wowza.wms.transcoder.model.LiveStreamTranscoder.shutdown(Unknown Source) 
    at com.wowza.wms.stream.live.LiveStreamTranscoderRunner.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 

내가 각 예외의 세 가지 얻을 때 publish/unpublish (transrate.xml 파일에서 사용할 수있는 각 Encode 블록에 하나씩)

누군가이 문제의 원인에 대해 아이디어를 갖고 있습니까?

답변

0

내 질문을 게시 한 후 stacktrace를 다시보고 문제가 무엇인지 깨달았습니다. 전체 시간을 잘못보고있었습니다. 트랜스 코더를 사용할 때 문제가 발생했기 때문에 문제가 어디에서 발생했는지 결론을 내 렸습니다. 내가 깨닫지 못했던 것은 트랜스 코더를 사용할 때 수신 스트림에 대해 한 번, 트랜스 코딩 된 스트림마다 한 번씩 onPublishonUnPublish이 여러 번 발사된다는 것입니다.

내 모듈의 onPublishonUnPublish 개의 메서드 내에서 코드 변환 된 스트림에 존재하지 않는 querystring-paramters를 읽는 것과 같은 작업을 수행합니다. 따라서 변환 된 스트림에 onPublishonUnPublish 메쏘드가 호출 될 때 예외가 발생합니다.

이 문제를 해결하기 위해 onPublishonUnPublish 메쏘드의 시작 부분에 두 줄을 추가했습니다.

if (streamName.contains("_")) 
    return; 

다소 못생긴 솔루션,하지만 난 모든 스트림 이름을 제어 오전이 잘 작동 내 경우에는, 그래서 어쨌든에 밑줄을 허용하지 않습니다.

업데이트 :

@flux 스트림은 트랜스 코딩 작업의 결과인지 확인하는 방법에 대한 훨씬 더 좋은 솔루션을 제공하고 있습니다. 자세한 내용은 his answer을 참조하십시오.

1

여기 스트림은 트랜스 코딩 스트림이 아닌 원본 스트림 실제로 훨씬 더 나은 솔루션입니다

if(stream.isTranscodeResult()) return; 
+0

여부를 결정하는 더 나은 방법입니다, 해당 속성을 인식하지 않았다. 나는 그에게 +1을주었습니다. 그러나 예외에 대한 이유를 설명하기 때문에 지금은 받아 들였습니다. –