Java 使用VLCJ计算媒体文件的比特率

Java 使用VLCJ计算媒体文件的比特率,java,vlcj,bitrate,Java,Vlcj,Bitrate,为了远程播放媒体文件,我使用了UDP数据报。 我正在向客户端发送40KB的数据包,但要同步所有客户端,我需要找到每个数据包的持续时间,以便在数据包丢失时,我可以使用SocketTimeoutException在客户端暂停播放器。 为了计算每个数据包的持续时间,我使用了以下等式 duration of packet= (duration of whole file)/SizeOfPacket 在哪里, duration of file = (length of f

为了远程播放媒体文件,我使用了UDP数据报。 我正在向客户端发送40KB的数据包,但要同步所有客户端,我需要找到每个数据包的持续时间,以便在数据包丢失时,我可以使用SocketTimeoutException在客户端暂停播放器。 为了计算每个数据包的持续时间,我使用了以下等式

        duration of packet= (duration of whole file)/SizeOfPacket
在哪里,

        duration of file = (length of file)/bitrate *8
目前我正在使用ubuntu中的包计算比特率


如何使用VLCJ API获取音频或视频文件的比特率?

首先,您需要解析或播放媒体,播放媒体当然不太可取,但根据媒体的不同,这可能是必要的-假设解析适用于您的媒体:

mediaPlayer.parseMedia();
解析方法是同步的

如果解析不起作用,那么不幸的是,您需要在信息可用之前播放媒体

根据使用的媒体编解码器的不同,曲目信息可能会在一段时间后立即或异步提供,因此您可能需要收听媒体播放器事件,甚至需要睡眠一段时间(讨厌,但有时是必要的)

接下来,您将获得曲目信息:

List<TrackInfo> audioTrackInfo = mediaPlayer.getTrackInfo(TrackType.AUDIO);
List<TrackInfo> videoTrackInfo = mediaPlayer.getTrackInfo(TrackType.VIDEO);

另一个复杂问题是,如果您正在播放网络流,几乎肯定无法使用
mediaPlayer.parse()
,甚至可能挂起。

kb=kilo位,kb=kilo字节。你想要哪一个?你好。我正在尝试获取播放流的fps和比特率。我试过mediaPlayer.getTrackInfo(TrackType.VIDEO);但它返回null。另外,mediaPlayer.getRate()和mediaPlayer.getFps()返回1.0和0.0。有什么我遗漏的吗?(不能将它们与rtsp流一起使用吗?)
for (TrackInfo trackInfo : audioTrackInfo) {
    int bitRate = trackInfo.bitRate();
    // ...
}

for (TrackInfo trackInfo : videoTrackInfo) {
    int bitRate = trackInfo.bitRate();
    // ...
}