Я пытаюсь прочитать необработанный поток h.264 из вывода FFMPEG, обработать его в Matlab, отправить в FFPLAY и отобразить оттуда.Я использую библиотеки .NET в Matlab, и я могу читать поток из стандартного вывода FFMPEG в Matlab.Однако мне не удалось отправить обработанные данные на стандартный вход FFPLAY.Что я делаю не так?
Я настроил процесс ffmpeg для чтения из его вывода, используя System.Diagnostics .NET в Matlab.Точно так же я настроил другой процесс для ffplay.Я перенаправил стандартный вывод ffmpeg и стандартный ffplay.Затем я читаю строки из ffmpeg и записываю их в ffplay.Однако ffplay ничего не отображал.
Кроме того, когда я пытаюсь записать файл из stfout ffmpeg и отправить в этот файл ffplay, он тоже не работает.Это заставляет меня подозревать, что данные сбрасываются из stfout ffmpeg, но я не знаю, как это проверить.
pFFMPEG = System.Diagnostics.Process();
pFFMPEG.StartInfo = System.Diagnostics.ProcessStartInfo;
pFFMPEG.StartInfo.FileName = 'ffmpeg.exe';
pFFMPEG.StartInfo.Arguments = '-y -nostdin -f dshow -framerate 5 -i video="Logitech Webcam C925e" -vf scale=160:120 -vcodec h264 -an -map 0:v -f nut -';
pFFMPEG.StartInfo.UseShellExecute = false;
pFFMPEG.StartInfo.RedirectStandardOutput = true;
pFFMPEG.StartInfo.RedirectStandardInput = false;
pFFMPEG.StartInfo.RedirectStandardError = false;
pFFMPEG.StartInfo.CreateNoWindow = true;
pFFPLAY = System.Diagnostics.Process();
pFFPLAY.StartInfo = System.Diagnostics.ProcessStartInfo;
pFFPLAY.StartInfo.FileName = 'ffplay.exe';
pFFPLAY.StartInfo.Arguments = '-i - -autoexit';
pFFPLAY.StartInfo.UseShellExecute = false;
pFFPLAY.StartInfo.RedirectStandardInput = true;
pFFPLAY.StartInfo.RedirectStandardOutput = false;
pFFPLAY.StartInfo.RedirectStandardError = false;
pFFPLAY.StartInfo.CreateNoWindow = false;
t = zeros(150,1);
ctr = 0;
L = 0;
arr = zeros(10000, 1);
pFFMPEG.Start();
ffmpegOut = pFFMPEG.StandardOutput;
temp = ffmpegOut.ReadLine();
temp_arr = uint8(char(temp));
%here, process temp_arr and convert back to char arr temp%
pFFPLAY.Start();
ffplayIn = pFFPLAY.StandardInput;
ffplayIn.WriteLine(temp);
while ~(isempty(temp)) && ctr < 150 && L < length(arr)
L_end = L+temp.Length;
arr(L+1:L_end) = temp_arr;
temp = ffmpegOut.ReadLine();
L = L_end;
temp_arr = uint8(char(temp));
%here, process temp_arr and convert back to char arr temp %
ffplayIn.WriteLine(temp);
ctr = ctr + 1;
end
Когда я смотрю в рабочую область Matlab, мне кажется, что вывод ffmpeg в Matlab в arr,хотя я не уверен, есть ли капли.Когда я пытаюсь отправить данные в ffplay, ничего не происходит.Я вижу, что процесс ffplay запущен, но окно видео не отображается.
Любая помощь очень ценится.