Рассчитать битрейт медиафайла с помощью VLCJ

Для удаленного воспроизведения медиафайла я использовал дейтаграмму UDP. Я отправляю клиентам пакет размером 40 КБ, но для синхронизации всех клиентов мне нужно найти продолжительность каждого пакета, чтобы в случае потери пакета я мог приостановить проигрыватель на стороне клиента с помощью SocketTimeOutExcpetion. Для расчета продолжительности каждого пакета я использовал следующее уравнение

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

куда,

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

В настоящее время я рассчитываю битрейт, используя пакет mediainfo в Ubuntu.

Как я могу получить битрейт аудио- или видеофайла с помощью VLCJ API?


person bhushan23    schedule 13.11.2013    source источник
comment
kb = килобит, kB = килобайт. Какой из них вы имели в виду?   -  person Peter Lawrey    schedule 13.11.2013


Ответы (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() почти наверняка не будет работать и даже может зависнуть, если вы воспроизводите сетевые потоки.

person caprica    schedule 13.11.2013
comment
Привет. Я пытаюсь получить fps и битрейт воспроизводимого потока. Я пробовал mediaPlayer.getTrackInfo(TrackType.VIDEO); но он возвращает ноль. Также mediaPlayer.getRate() и mediaPlayer.getFps() возвращают значения 1,0 и 0,0. Есть что-то, что мне не хватает? - person Null Pointer; 05.01.2018
comment
(Разве нельзя использовать их с потоками rtsp?) - person Null Pointer; 05.01.2018