Есть ли способ получить FFPLAY из стандартного ввода в Matlab, используя .NET? - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь прочитать необработанный поток 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 запущен, но окно видео не отображается.

Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...