Я потянулся за то, что должно было быть быстрой и легкой задачей.
У меня есть сервис WCF, в котором мне нужно реализовать транскодирование видео в реальном времени, транскодирование непроблема как таковая, с использованием FFMpeg для локального временного файла.
Быстрый пример того, как выглядит мой код;
public Stream StreamMedia(int a)
{
String input = @"\media\" + a + ".mkv";
String output = @"\temp\transcoded\" + a + DateTime.Now.Ticks.ToString() + ".wmv";
ProcessStartInfo pi = new ProcessStartInfo("ffmpeg.exe");
pi.Arguments = "-i " + input + " -y -ab 64k -vcodec wmv2 -b 800k -mbd 2 -cmp 2 -subcmp 2 -s 320x180 -f asf " + output;
Process p = new Process;
p.StartInfo = pi;
p.Start();
Thread.Sleep(2500);
return new FileStream(output, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
}
Проблема, с которой я сталкиваюсь, заключается в том, что возвращенный поток дает мне толькочто было записано в файл при его возврате - в результате получился довольно короткий видеофайл:)
Я поиграл с очевидным здесь, но независимо от того, что я делаю, он вернет только то, что доступно там, изатем.
Мне нужно, чтобы поток возвращался независимо от фактической текущей длины выходного файла - здесь задействован другой код, который гарантирует, что данные никогда не отправляются клиенту быстреечем то, что FFMpeg удается закодировать, так что в основном мне просто нужен открытый поток.
Любые получатели?