要远程播放媒体文件,我使用了UDP数据报。 我向客户端发送40 kb的数据包,但要同步我需要的所有客户端来查找每个数据包的持续时间,这样如果数据包丢失,我可以使用SocketTimeOutExcpetion在客户端暂停播放器。 为了计算每个数据包的持续时间,我使用了以下等式
duration of packet= (duration of whole file)/SizeOfPacket
其中,
duration of file = (length of file)/bitrate *8
目前我在ubuntu中使用mediainfo包计算比特率。
如何使用VLCJ API获取音频或视频文件的比特率?
答案 0 :(得分:1)
首先你需要解析或播放媒体,播放媒体当然不太可取,但视媒体情况而定 - 可能是必要的 - 假设解析适用于你的媒体:
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()
几乎肯定无法正常工作,如果您正在播放网络流,甚至可能会挂起。