Я использую C # для записи на стороне сервера вместе с ffmpeg для работы с некоторыми видеофайлами. После того, как я загружаю видеофайл из клиента и записываю поток в новый файл, я не смог использовать ffmpeg для извлечения некоторых часть исходного файла, код как показано ниже
string cmd = "-ss " + string.Format("{0:F}", startTime) + " -t " + string.Format("{0:F}", endTime - startTime) + " -i " + filePath + " -vcodec copy -acodec copy " + filePath + " -y";
показывает ошибку [mov, mp4, m4a, 3gp, 3g2, mj2 @ 000002336e7da340] поток 1, смещение 0x8fab: частичный файл; при обработке ввода * 1004 обнаружены неверные данные
после исследования я обнаружил, что файл, который я упомянул как filePath (на стороне сервера), может быть занят командой windows (я использовал Process для работы с ffmpeg)
Process myPro = new Process();
myPro.StartInfo.FileName = WebConfigurationManager.AppSettings["FFMPEGPath"];
myPro.StartInfo.UseShellExecute = false;
myPro.StartInfo.RedirectStandardInput = true;
myPro.StartInfo.RedirectStandardOutput = true;
myPro.StartInfo.RedirectStandardError = true;
myPro.StartInfo.CreateNoWindow = true;
myPro.Start();
myPro.StandardInput.AutoFlush = true;
myPro.WaitForExit();
myPro.Close();
myPro.Dispose();
return output;
Я решил создать новый файл для выполнения операции извлечения, и он работает.
string cmd = "-ss " + string.Format("{0:F}", startTime) + " -t " + string.Format("{0:F}", endTime - startTime) +
" -i " + filePath + " -vcodec copy -acodec copy " + filePathfull + " -y";
Но когда я попытался отправить обратно имя файла с помощью ajax клиенту и использовать тег видео в html, он не смог загрузить файл mp4, я думаю, возможно, файл mp4, созданный ffmpeg, все еще занят системным потоком Вы когда-нибудь встречались с такой ситуацией? Как это можно исправить? Большое спасибо!