我正在尝试编写模块,用于监控用户观看流的时长。这不是直播,而是视频点播。
我的问题是什么是最有效的方法。我走了这条路:
创建实现IMediaStreamActionNotify2
的类,然后当触发onPlay
事件时,我将创建新线程,该线程将定期检查自流开始以来经过的时间并更新duration
变量。
这是我决定运行其他线程的方式:
BalanceTimerMonitor btm = new BalanceTimerMonitor(...);
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(btm, 0, 5, TimeUnit.SECONDS);
BalanceTimerMonitor实现Runnable
现在所有这些都有效,但我担心为每个流创建的新线程数量,因为我假设每个流已经作为主wowza应用程序的单独线程运行。这大量的线程会减慢我的服务器吗?还有另一种更优雅的测量流持续时间的方法吗?
答案 0 :(得分:0)
我的方法是我有一个循环连接客户端的单个线程,Wowza API允许我查询每个连接客户端的已用时间。我在另一个项目中使用相同的技巧,但在这种情况下,我不会处理玩家的身份。您可以使用IClient.getTimeRunningSeconds()
来获取时间,而不是自己管理它。希望它有所帮助!