【问题标题】:Creating an MJPEG video from still images using C#使用 C# 从静止图像创建 MJPEG 视频
【发布时间】:2018-03-28 09:07:55
【问题描述】:

我正在尝试从 JPEG 图像创建延时摄影。我读过 M-JPEG 的结构相当简单,本质上只是大多数浏览器都可以播放的拼接 JPEG 图像。

var result = new List<byte>();
var converter = new ImageConverter();

foreach (var file in Directory.GetFiles(srcFolder, "*.jpg", SearchOption.TopDirectoryOnly)) {
      using (var image = Image.FromFile(file) as Bitmap) {
          var bytes = converter.ConvertTo(image, typeof(byte[])) as byte[];
          result.AddRange(bytes);
          image.Dispose();
      }
}

File.WriteAllBytes($"{destFolder}video.mjpeg", result.ToArray());

但是,它不起作用。任何浏览器都无法播放生成的视频。它可以在 VLC 中播放,显示正确的第一张图像,但在其十秒的持续时间内不会更改为任何进行中的图像。

有人可以说我做错了什么吗?另外,是否可以通过标头调整帧速率?

更新:感谢建议,我让它在 VLC 中正常工作。仍然不能在浏览器中播放,但至少是朝着正确方向迈出的一步。

var result = new List<byte>();
var converter = new ImageConverter();

var header = "HTTP/1.1 200 OK\r\n" +
             "Content-Type: multipart/x-mixed-replace; boundary=" +
             "--boundary" +
             "\r\n";
result.AddRange(Encoding.ASCII.GetBytes(header));

foreach (var file in Directory.GetFiles(srcFolder, "*.jpg", SearchOption.TopDirectoryOnly)) {
    using (var image = Image.FromFile(file) as Bitmap) {
        var bytes = converter.ConvertTo(image, typeof(byte[])) as byte[];

        StringBuilder sb = new StringBuilder();

        sb.AppendLine();
        sb.AppendLine("--boundary");
        sb.AppendLine("Content-Type: image/jpeg");
        sb.AppendLine("Content-Length: " + image.Size.ToString());
        sb.AppendLine();
        result.AddRange(Encoding.ASCII.GetBytes(sb.ToString()));
        result.AddRange(bytes);
        result.AddRange(Encoding.ASCII.GetBytes("\r\n"));
        image.Dispose();
    }
}

File.WriteAllBytes($"{destFolder}hat.mjpeg", result.ToArray());

【问题讨论】:

  • 不包括音频,对吧?
  • @Fildor 正确,没有音频。

标签: c# image video mjpeg


【解决方案1】:

查了谷歌,发现了这个:

https://www.codeproject.com/Articles/371955/Motion-JPEG-Streaming-Server

这篇文章是关于流式传输的,但我相信它可能会对您的项目有所帮助。有一个可下载的代码示例。

【讨论】:

  • 谢谢,有帮助。该视频现在有效。缺少文件的标题。不过,仍然需要弄清楚如何调整帧速率。
  • @KagemandAndersen 你算出帧率了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2012-10-05
  • 1970-01-01
相关资源
最近更新 更多