【发布时间】:2011-07-05 05:43:30
【问题描述】:
一直在努力完成本应快速而简单的任务。
我有一个自托管的 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);
}
我面临的问题是返回的 Stream 只给了我在返回时写入文件的内容 - 导致视频文件相当短:)
我在这里玩过显而易见的东西,但无论我做什么,它只会返回那里可用的东西。
我需要做的是在不考虑输出文件的实际当前长度的情况下返回 Stream - 还涉及其他代码,以确保数据永远不会比 FFMpeg 管理的速度更快地发送到客户端编码,所以基本上我只需要一个开放式流。
有接受者吗?
【问题讨论】: