0

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

        duration of packet= (duration of whole file)/SizeOfPacket

在哪里,

        duration of file = (length of file)/bitrate *8

目前我正在使用ubuntu 中的mediainfo包计算比特率。

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

4

1 回答 1

1

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

mediaPlayer.parseMedia();

parse 方法是同步的。

如果解析不起作用,那么很遗憾,您需要在信息可用之前播放媒体。

根据所使用的媒体编解码器,轨道信息可能会立即可用或稍后异步可用 - 因此您可能需要监听媒体播放器事件甚至休眠一段时间(讨厌,但有时这是必要的)。

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

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

然后,您可以迭代返回的列表。

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

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

一个额外的复杂情况是,mediaPlayer.parse()如果您正在播放网络流,它几乎肯定不会工作,甚至可能会挂起。

于 2013-11-13T20:09:44.953 回答