小编Reg*_*egs的帖子

是否可以从VLC获取视频文件中帧的精确时间戳?

我希望使用VLC作为我在C#中编写的应用程序中的视频播放器的基础(因为VLC是能够正确解码我正在使用的格式的少数播放器之一),但是我需要它的主要任务表演是:

  1. 能够在视频文件中向前和向后浏览不同的帧.
  2. 显示每个帧的精确时间戳,直到毫秒,以及将时间戳中继到应用程序的能力.

现在我通过VLC扩展LUA脚本执行此操作,但VLC通过vlc.var.get返回的时间(输入,"时间")缺乏精度,并且可能因同一视频文件中的同一帧而异文件读数.帧浏览也不太可靠.另外,以这种方式接收的值不能自动转发到另一个应用程序.

我尝试使用libVLC的LibVLC.NET包装器,但我仍然无法在帧之间浏览,并且返回的毫秒计数值相当奇怪.这几乎就像VLC(libVLC)在回放期间没有返回实际时间值,而是某种舍入值,当读取精度低至毫秒时,该值有很大的延迟.标准VLC接口既不能显示精确的时间值,也不能显示毫秒,也不能在帧之间浏览.

有没有可行的方法通过以某种方式从使用.NET编写的应用程序运行VLC来执行VLC的上述两个任务?或者我应该考虑其他选择?

.net c# vlc libvlc

10
推荐指数
1
解决办法
4285
查看次数

线程安全的最终一致计数器

我有一个高度并发的代码,它应该能够同时增加\减少几个计数器并读取值。我不需要在每次读取时都使用精确的值,所以它也可能是最终一致的。我的主要目标是写操作是非阻塞的,不需要等待时间,基本上有几个线程想要递增相同的计数器,调用一些递增函数而不等待它被处理。但是,我很难想出一种方法来制作这样的计数器。

我正在考虑使用ConcurrentLinkedQueue<Boolean>. 向队列中添加一个元素,并让另一个线程弹出元素并计算增量\减量。但是,这不是一个,BlockingQueue所以我必须创建一个不断尝试轮询队列的线程,让一个完全专用于此任务的线程感觉是一种巨大的浪费。仅仅要求size()不是一种选择,因为ConcurrentLinkedQueue操作不是恒定时间,并且每个调用都必须遍历整个队列,这将是疯狂的浪费时间。

我也看过AtomicInteger但是只有惰性设置操作,没有惰性增量,incrementAndGet如果我理解正确会导致基于锁定的增量读取行为,这绝对不是我需要的。

使用一个ConcurrentLinkedQueue<Boolean>和一个专用的轮询线程是我最终一致计数器的唯一选择吗?特别是考虑到我不知道有多少线程会在任何时候尝试写入和读取这个计数器,这些是动态产生的。

java multithreading

3
推荐指数
1
解决办法
203
查看次数

标签 统计

.net ×1

c# ×1

java ×1

libvlc ×1

multithreading ×1

vlc ×1