Получение большого объема вывода от Должностного лица палаты общин Apache

WINVER означает версию Windows. Короче говоря, если вы разрабатываете для определенной версии Windows, доступны некоторые API, которые не были доступны в предыдущих версиях.

5
задан Esteban Küber 29 August 2009 в 11:54
поделиться

1 ответ

Проблема заключается в методе выполнения класса YUV4MPEGPipeParser. Есть две последовательные петли. Второй цикл немедленно завершается, если в потоке нет доступных в настоящее время данных (например, весь ввод до сих пор был обработан синтаксическим анализатором, а ffmpeg или потоковый насос были недостаточно быстрыми, чтобы передать для него некоторые новые данные -> available () == 0 -> цикл завершен -> поток насоса завершается.

Просто избавьтесь от этих двух циклов и сна и просто выполните простую блокирующую read () вместо проверки, доступны ли какие-либо данные для обработки. Также, вероятно, нет необходимости в wait () / notify () или даже в sleep (), потому что код парсера запускается в отдельном потоке.

Вы можете переписать код метода run () следующим образом:

public class YUV4MPEGPipeParser extends Thread {

    ...

    // optimal size of buffer for reading from pipe stream :-)
    private static final int BUFSIZE = PipedInputStream.PIPE_SIZE; 

    public void run() {
        try {
            byte buffer[] = new byte[BUFSIZE];
            int len = 0;
            while ((len = is.read(buffer, 0, BUFSIZE) != -1) {
                // we have valid data available 
                // in first 'len' bytes of 'buffer' array.

                // do stuff.... like write out YUV frames
            }
         } catch ...
     }
 }
4
ответ дан 15 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: