Java 不发送额外线程的Wowza流时间测量

Java 不发送额外线程的Wowza流时间测量,java,multithreading,wowza,Java,Multithreading,Wowza,我正在尝试编写一个模块,它将监视用户观察流的时间。这不是直播,而是视频点播 我的问题是这样做最有效的方式是什么。我走了这条路: 创建了一个类,该类实现了IMediaStreamActionNotify2,然后当触发onPlay事件时,我将创建一个新线程,该线程将定期检查自流开始以来经过的时间,并更新持续时间变量 这是我决定运行附加线程的方式: BalanceTimerMonitor btm = new BalanceTimerMonitor(...); ScheduledExecutorSer

我正在尝试编写一个模块,它将监视用户观察流的时间。这不是直播,而是视频点播

我的问题是这样做最有效的方式是什么。我走了这条路:

创建了一个类,该类实现了
IMediaStreamActionNotify2
,然后当触发
onPlay
事件时,我将创建一个新线程,该线程将定期检查自流开始以来经过的时间,并更新
持续时间
变量

这是我决定运行附加线程的方式:

BalanceTimerMonitor btm = new BalanceTimerMonitor(...);

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(btm, 0, 5, TimeUnit.SECONDS);
BalanceTimerMonitor实现
Runnable


现在所有这些都可以工作了,但我关心的是为每个流创建的新线程的数量,因为我假设每个流已经作为单独的线程从主wowza应用程序运行。这么多线程会使我的服务器变慢吗?有没有其他更优雅的方法来测量流持续时间

我的方法是使用一个线程在连接的客户机上循环,Wowza API允许我查询每个连接的客户机的运行时间。我在另一个项目中使用相同的技巧,但在这种情况下,我不处理玩家的身份。您可以使用
IClient.getTimeRunningSeconds()
获取时间,而无需自行管理。希望有帮助

我的方法是使用一个线程在连接的客户机上循环,Wowza API允许我查询每个连接的客户机的运行时间。我在另一个项目中使用相同的技巧,但在这种情况下,我不处理玩家的身份。您可以使用
IClient.getTimeRunningSeconds()
获取时间,而无需自行管理。希望有帮助

嗨,Dexa,有帮助吗?嗨,Dexa,有帮助吗?当你说每个连接的客户端的运行时间时,它会接受暂停的视频计数吗?由于客户端可以连接,但视频暂停,在这种情况下,它不应计算观看的秒数。需要检查API文档,不确定。但也有连接时间戳,所以希望暂停不算数。谢谢您的努力。我已经测试了上面提到的方法,但它只返回创建流的持续时间,而不是播放时间。我明白了。顺便说一句,您的代码只在池中使用一个线程,所以不用担心…-)当您说每个连接的客户端的运行时间时,它是否会计算暂停的视频?由于客户端可以连接,但视频暂停,在这种情况下,它不应计算观看的秒数。需要检查API文档,不确定。但也有连接时间戳,所以希望暂停不算数。谢谢您的努力。我已经测试了上面提到的方法,但它只返回创建流的持续时间,而不是播放时间。我明白了。顺便说一句,您的代码只在池中使用一个线程,所以不用担心…-)