我有一个应用程序,从相机(MJPEG)读取流,并实时(在图片框中)在窗体上显示它。这是行得通的。当用户点击“开始”按钮时,此流读取开始。如何将MJPEG流保存到磁盘(C#.NET)?
我想要做的是,当用户点击一个按钮“停止”时,按钮“开始”和“停止”之间的流将作为一个.mpg保存在磁盘上。
现在,它在磁盘上写了一些东西,但我无法在Windows Media Player中打开它。
这里是写流
private void ReadWriteStream(byte[] buffer, int start, int lenght, Stream writeStream)
{
Stream readStream = new MemoryStream(buffer, start, lenght);
int bytesRead = readStream.Read(buffer, 0, m_readSize);
// write the required bytes
while (bytesRead > 0 && !m_bStopLecture)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = readStream.Read(buffer, 0, m_readSize);
}
readStream.Close();
}
下面是调用函数的地方的代码。这是一个循环,正如我所说,视频在PictureBox中播放。
// image at stop
Stream towrite = new MemoryStream(buffer, start, stop - start);
Image img = Image.FromStream(towrite);
imgSnapshot.Image = img;
// write to the stream
ReadWriteStream(buffer, start, stop - start, writeStream);
非常感谢!
可能是因为您没有保存在正确的格式文件。所有文件都有文件格式,包括描述文件的标题和数据。如果您只以字节保存流的一部分,则可能会弄乱文件格式,并且在将其保存到磁盘时可能会丢失重要数据。这将是我的猜测。 – 2010-12-07 16:32:36