WINVER означает версию Windows. Короче говоря, если вы разрабатываете для определенной версии Windows, доступны некоторые API, которые не были доступны в предыдущих версиях.
Проблема заключается в методе выполнения класса 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 ...
}
}