Java Media Framework: как получить частоту кадров из видеопотока - PullRequest
2 голосов
/ 14 июня 2011

Я использую Java Media Framework для воспроизведения видеофайла.

Теперь я хотел бы узнать частоту кадров видеопотока?

Как это возможно? Спасибо!

редактирование: доступны следующие экземпляры:

javax.media.Manager
javax.media.MediaLocator
javax.media.NoProcessorException
javax.media.Processor

1 Ответ

3 голосов
/ 17 июня 2011

попробуйте следующее

        try {
            Processor myProcessor = Manager.createProcessor( myMediaLocator );
            Format relax = myProcessor.getContentDescriptor().relax();
            if(relax instanceof VideoFormat) {
                double frameRate = ((VideoFormat)relax).getFrameRate();
            }
        } catch( NoProcessorException e ) {
        } catch( NotConfiguredError e ) {
        } catch( IOException e ) {
        }

или, возможно, сформируйте дескриптор содержимого из источника данных.Для URLDataSource:

DataSource dataSource = myProcessor.getDataOutput();
if(dataSource instanceof URLDataSource){
    PullSourceStream[] streams = ((URLDataSource)dataSource).getStreams();
    if(streams.length > 0){
        Format relax = streams[0].getContentDescriptor().relax();
        if(relax instanceof VideoFormat) {
            System.out.println(((VideoFormat)relax).getFrameRate());
        }
    }
}

или хотя бы попытайтесь получить Формат из javax.media.Buffer:

DataSource dataSource = myProcessor.getDataOutput();
if(dataSource instanceof PullBufferDataSource){ // or PushBufferDataSource
    PullBufferStream[] streams = ((PullBufferDataSource)dataSource).getStreams();
    if(streams.length > 0){
        Format relax = streams[0].getFormat();
        if(relax instanceof VideoFormat) {
            System.out.println(((VideoFormat)relax).getFrameRate());
        }
    }
}
...