У меня есть приложение, которое считывает поток с камеры (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