我使用Wowza GoCoder向自定义的Wowza实时应用程序发布视频。在我的应用程序中,我在IRTSPActionNotify回调中附加了一个onRTPSessionCreate事件侦听器。在我的onRecord回调IRTSPActionNotify中,我执行各种任务--开始记录活动流,以及其他事情。在我的onTeardown回调中,我停止了录制,并对录制的视频进行了一些附加处理,比如将视频文件移动到不同的存储位置。
我刚刚注意到的是,如果编码器超时,由于连接丢失、电源故障或其他突发事件,我将不会接收onTeardown事件--即使在RTSP会话超时时也不会。这对我来说是个大问题,因为在通过另一个应用程序将发布的流提供给随需应变视图之前,我需要做这个额外的处理。
我一直在浏览文献资料,寻找一个可以帮助我解决问题的事件或实用程序类,但到目前为止都没有效果。
是否有可靠的事件,或者其他可靠的方式来知道连接超时了,以便我也可以对不触发拆卸事件的流触发此处理?
我第一次发现这个问题是当我在移动设备上使用Wowza GoCoder应用程序为iOS编码视频时失去了连接,但我想这个问题对任何编码器来说都是一样的。
发布于 2014-09-30 05:43:16
在我的Wowza模块中,我有以下模式,到目前为止已经证明是相当可靠的:
我有一个自定义工作线程,它可以迭代所有客户端类型。现在,这允许我跟踪客户端,我发现最终所有类型的灾难都会导致客户端在不清楚的超时之后被从这些列表中删除。
我认为尝试在您自己的Set中跟踪(添加/删除)客户端,看看这是否更准确。
您还可以尝试在IMediaStreamActionNotify2中查看在这种情况下是否调用了任何内容。
我已经看到onStreamCreate(IMediaStream stream)和onStreamDestroy(IMediaStream stream)在ModuleBase中被调用,以便GoCoder on iOS,并且我通过调用stream.addClientListener(actionNotify)将IMediaStreamActionNotify2的一个实例附加到流中。
在GoCoder平台上:我不确定它在安卓上是否相同,GoCoder Android和iOS版本有一个根本的区别,那就是流媒体协议本身,这会导致后端不同的API调用和行为。不要在没有测试的情况下在两个平台上进行现场测试。:-)
https://stackoverflow.com/questions/26102971
复制相似问题