为了远程播放媒体文件,我使用了UDP数据报。
我正在向客户端发送40 kb的数据包,但是为了同步所有客户端,我需要找到每个数据包的持续时间,以便如果丢失数据包,我可以使用SocketTimeOutExcpetion在客户端暂停播放器。
为了计算每个数据包的持续时间,我使用了以下公式
duration of packet= (duration of whole file)/SizeOfPacket
哪里,
duration of file = (length of file)/bitrate *8
目前,我正在使用ubuntu中的mediainfo包计算比特率。
如何使用VLCJ API获得音频或视频文件的比特率?
最佳答案
首先,您需要解析或播放媒体,播放媒体当然不是首选,但根据媒体的不同,可能有必要-假设解析适用于您的媒体:
mediaPlayer.parseMedia();
解析方法是同步的。
如果解析不起作用,那么很遗憾,您将需要在信息可用之前播放媒体。
取决于所使用的媒体编解码器,跟踪信息可能会在一段时间后立即或异步提供-因此,您可能需要收听媒体播放器事件或什至休眠一段时间(讨厌,但有时是必要的)。
接下来,您将获得曲目信息:
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()
几乎肯定无法正常工作,如果正在播放网络流,甚至可能会挂起。