c# - 在 C# 中创建 MJPEG 视频流

标签 c# video video-streaming mjpeg

我有图像从远程视频源以每秒约 5 帧的速度作为 JPEG 图像发送到我的数据库。我正在尝试弄清楚如何将这些图像转换成视频格式,以便我可以将实时视频源流式传输到 Silverlight。

创建 MJPEG 流似乎很有意义,但我遇到了一些问题。首先,我试图通过 HTTP 请求进行流式传输,所以我没有处理套接字,但也许这会破坏我的代码。

如果我尝试从 QT 浏览我的流,我会收到视频错误,媒体播放器显示第一帧图像并且 Silverlight 崩溃:)

这是流式传输的代码 - 因为我使用这种方式使用的内容类型只有在我知道它不理想并且可能是根本原因时才能发送。所有图像都通过 LINQ2SQL 对象传入。

我已经尝试在 Silverlight 中简单地更新图像控件的图像源,但闪烁是 Not Acceptable 。如果 Silverlight 不支持 MJPEG,那么继续下去就没有意义了,但它看起来支持。我确实可以访问传入的 h.264 帧,但通过 MP4 似乎更复杂。

    Response.Clear();
    Response.ContentType = "multipart/x-mixed-replace; boundary=--myboundary";
    ASCIIEncoding ae = new ASCIIEncoding();
    HCData data = new HCData();
    var videos = (from v in data.Videos
                 select v).Take(50); // sample the first 50 frames
    foreach (Video frame in videos)
    {
        byte[] boundary = ae.GetBytes("\r\n--myboundary\r\nContent-Type: image/jpeg\r\nContent-Length:" + frame.VideoData.ToArray().Length + "\r\n\r\n");
        var mem = new MemoryStream(boundary);
        mem.WriteTo(Response.OutputStream);
        mem = new MemoryStream(frame.VideoData.ToArray());
        mem.WriteTo(Response.OutputStream);
        Response.Flush();
        Thread.Sleep(200);
    }

谢谢!

编辑:我的流在 firefox 中工作,所以如果我浏览该页面,我会看到视频!但没有别的接受格式。不是 IE、SL、媒体播放器 - 什么都不是。

最佳答案

我很久以前(3-4 年前)做过 MJPEG,现在我正在挠头试图记住细节,但我就是记不住。但是,如果可能的话,我会建议找到某种流式传输 MJPEG 内容并启动 wireshark/ethereal 的网站,看看您通过网络获得了什么。我的猜测是您缺少一些必需的 HTTP header ,而 firefox 对此稍微宽容一些。

如果您无法在 Internet 上找到示例 MJPEG 流,许多网络摄像头都有可以为您提供 MJPEG 流的软件。我使用的应用程序是多个安全摄像头的控制台,所以我知道这是所有类型摄像头的常见实现(如果它们支持 Web 界面)。

关于c# - 在 C# 中创建 MJPEG 视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216664/

相关文章:

java - 需要在一台计算机上使用多个 IP 来测试聊天应用程序

c# - 如何在.NET Framework 4.6.1中使用IActionResult?

c# - 静态 ConfigurationManager 访问类操作

c# - .NET 4 WCF REST 服务 404 一些请求

python - 如何对文件夹中的所有视频进行下采样?

video - 将 FFMPEG : How to do a Scene Change Detection? 与时间码一起使用?

c# - 在这种情况下我应该使用接口(interface)还是抽象类?

iphone - 编写一个应用程序将视频流式传输到 iPhone

python - ffmpeg rtmp 在 youtube 上播放速度低于 1x

azure - 使用 Azure 媒体服务通过 shaka packager 提供 DRM 许可证?