【问题标题】:Wowza stream time measurement without spamming additional threadsWowza 流时间测量,无需额外线程
【发布时间】:2015-11-14 11:13:48
【问题描述】:

我正在尝试编写模块来监控用户观看流媒体的时间。这不是直播,而是点播视频。

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

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

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

BalanceTimerMonitor btm = new BalanceTimerMonitor(...);

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

BalanceTimerMonitor 实现Runnable

现在所有这些都有效,但我担心为每个流创建的新线程的数量,因为我假设每个流已经作为独立线程从主 wowza 应用程序运行。这么多线程会减慢我的服务器速度吗?还有另一种更优雅的测量流持续时间的方法吗?

【问题讨论】:

  • 嗨 Dexa,有帮助吗?

标签: java multithreading wowza


【解决方案1】:

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

【讨论】:

  • 当您说每个连接的客户端的经过时间时,是否计入暂停视频?由于客户端可以连接但视频暂停,在这种情况下,它不应该计入观看秒数。
  • 需要查看 API 文档,不确定。但是也有可用的连接时间戳,所以希望暂停不算数。
  • 感谢您的努力。我已经测试过提到的方法,但它只返回创建流的持续时间,而不是播放时间。
  • 我明白了。顺便说一句,您的代码仅在池中使用单个线程,所以不用担心.. :-)
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
相关资源
最近更新 更多