После создания процессов FFmpeg для кодирования и декодирования на C# я попытался обработать следующий процесс. Я также применил Thread.Sleep(1000/30), потому что хотел делать это с интервалом 1/30 секунды вместо 1 секунды.
Получить фиктивные необработанные данные.
Передать их в процесс ffmpeg для кодирования.
Считать закодированные данные и передать их в процесс ffmpeg для декодирования.
После создания процессов FFmpeg для кодирования и декодирования на C# я попытался обработать следующий процесс. Я также применил Thread.Sleep(1000/30), потому что хотел делать это с интервалом 1/30 секунды вместо 1 секунды. [list] [*] Получить фиктивные необработанные данные. [*]Передать их в процесс ffmpeg для кодирования. [*]Считать закодированные данные и передать их в процесс ffmpeg для декодирования. [*]Вывод байта размер консоли [/list] Вот мой код, почему он не работает? [code]internal byte[] GetFrame(int width, int height) { int frameSize = width * height * 3;
byte[] frameData = new byte[frameSize];
Random random = new Random();
for(int i = 0; i < frameData.Length; i++) { frameData[i] = (byte)random.Next(256); }
//start process ffmpegEncodeProcess.Start(); ffmpegDecodeProcess.Start();
//input stream var ffmpegEncodeInput = ffmpegEncodeProcess.StandardInput.BaseStream; var ffmpegDecodeInput = ffmpegDecodeProcess.StandardInput.BaseStream;
//output stream var ffmpegEncodeOutput = ffmpegEncodeProcess.StandardOutput.BaseStream; var ffmpegDecodeOutput = ffmpegDecodeProcess.StandardOutput.BaseStream;
new Thread(async () => { try { while(true) { byte[] encodedChunk = new byte[width * height * 3]; byte[] decodedChunk = new byte[width * height * 3];
byte[] frameData = GetFrame(width, height);
Console.WriteLine($"[INFO] Original frame size: {frameData.Length}bytes.");
Console.WriteLine("[INFO]: FFmpeg process clean up."); } }).Start(); } [/code] Если быть точным, он выводит на консоль размеры «Исходный» и «Закодированный» только один раз, а затем ничего не делает. Что я делаю не так?