Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中创建MJPEG视频流#_C#_Video_Video Streaming_Mjpeg - Fatal编程技术网

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

C# 在c中创建MJPEG视频流#,c#,video,video-streaming,mjpeg,C#,Video,Video Streaming,Mjpeg,我有图像从远程视频源以大约每秒5帧的速度作为JPEG图像发送到我的数据库。我正试图找出如何将这些图像转换成视频格式,以便将实时视频流传送到Silverlight 创建一个MJPEG流似乎是有道理的,但我有一些问题。首先,我试图通过HTTP请求进行流传输,所以我没有处理套接字,但这可能破坏了我的代码 如果我尝试从QT浏览我的流,我会收到一个视频错误,Media player显示第一帧图像,Silverlight崩溃:) 以下是流式传输的代码——因为我知道这种方式使用的内容类型不理想,可能是根本原因

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

创建一个MJPEG流似乎是有道理的,但我有一些问题。首先,我试图通过HTTP请求进行流传输,所以我没有处理套接字,但这可能破坏了我的代码

如果我尝试从QT浏览我的流,我会收到一个视频错误,Media player显示第一帧图像,Silverlight崩溃:)

以下是流式传输的代码——因为我知道这种方式使用的内容类型不理想,可能是根本原因,所以只能在这种情况下发送。所有图像都是通过LINQ2SQL对象输入的

我已经尝试过在Silverlight中简单地更新图像控件的图像源,但是闪烁是不可接受的。如果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、媒体播放器-什么都没有。

首先,将mjpeg帧写入单独的文件。然后,您应该能够在Phototshop中打开这些文件(这将独立验证您是否正确解析流)。如果失败,可以打赌的是,您的图像数据中嵌入了HTTP头。

您看过网络上存在的各种网络摄像头设置吗?他们中的很多人都会在不闪烁的情况下进行某种低分辨率的更新。您应该能够对这些类型的站点进行反向工程,以获得问题的其他线索


一些网站创建GIF动画,也许这是一个选项,用户可以看到过去的一分钟左右。

我远不是MJPEG流媒体方面的专家,但看看OnSourceFourge的源代码,我认为你应该分别发送每一帧,在每一帧之前和之后写下边界。当然,您不应该在结束边界中写入内容类型。

我很久以前(3-4年前)就写过MJPEG了,我正在挠头试图记住细节,但我就是记不住。但是,如果可能的话,我会建议你找一个能流式传输MJPEG内容的网站,启动wireshark/ethereal,看看你能从中得到什么。我猜您缺少了一些firefox更能原谅的必要HTTP头


如果你在互联网上找不到MJPEG流的样本,很多网络摄像头都有软件可以提供MJPEG流。我使用的应用程序是一个用于多个安全摄像头的控制台,因此我知道这是所有类型摄像头的常见实现(如果它们支持web界面)。

关于编辑:Firefox和Safari支持MJPEG。但是,其他应用程序不支持,像Explorer或Silverlight,这取决于你用它做什么。

是的,我已经这样做了-图像可以独立于视频用于其他事情,因此我可以查看它们,它们看起来很好。这是否意味着你已经在程序处理完帧后查看了它们?是的,我也在Firefox中使用它,我可以看到完美的视频但是,是的,我也将图像作为单个jpg文件写入磁盘,它们很好。你解决过这个问题吗?没有使用这种方法-我只是在浏览器中使用JS加载背景图像,然后在图像到达后尽快将其切换出去。工作正常。你基本上掌握了基础知识,这里有一个实现@