直播:效率JPEG与MJPEG

时间:2016-05-01 19:43:06

标签: xcode swift performance live-streaming mjpeg

我有一个显示livecam的网络服务器。
它有两种模式:

  1. JPEG(在页面刷新时显示当前图像)
  2. MJPEG(显示MJPEG流)
  3. 目前我正在使用JPEG模式。我下载并显示每秒20x的图像。
    这没有任何延迟完美地工作。
    但它具有相当高的CPU使用率(在我的iPhone 6S上大约70%的200%)。

    代码:

    if let url = NSURL(string: "http://1.1.1.181:8085/?action=snapshot") {
        let request = NSURLRequest(URL: url, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData , timeoutInterval: 1)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
            (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
            if data != nil {
                self.imageView.image = UIImage(data: data!)                    
            } 
        }
    }
    

    我的问题:

    • 是否有更有效的方式从中下载和显示图像 一个网页?
    • 使用MJPEG流更有效。 (如是: 你能推荐哪个框架)?

2 个答案:

答案 0 :(得分:2)

是的,您需要使用某种视频编解码器,因为您有视频。尝试发送这样的单个帧是浪费带宽和CPU。我很高兴您从目前的设置中获得了20 FPS。

MJPEG是一种视频编解码器,通过不断增强图像,与JPEG工作方式完全相同。更改的帧的内容将作为已有内容的增强功能进行推送,从而节省大量带宽。 MJPEG也很容易实现,因为如果你可以解码JPEG渐进式,你可以解码MJPEG(可能有一些小的改进)。

无论如何,目前有更好的视频编解码器可用。其中许多都有硬件编解码器,这意味着工作被卸载到该编解码芯片而不是由CPU直接处理。这就是高性能视频在硬件上运行的方式,否则无法跟上。根据目标平台上已存在的系统支持,确定要使用的编解码器。 H.264和VP8非常受欢迎,VP9即将推出。

答案 1 :(得分:0)

两者之间几乎没有区别。唯一的区别是,对于M-JPEG,流会发送一系列JPEG s,而不是每个请求一个,因此您不会浪费带宽为每个帧打开一个新连接,在这种情况下与图像大小相比可以忽略不计,而且由于缓冲而不是丢帧,M-JPEG可能导致低带宽连接中的图像延迟。

Motion JPEG — Encoding — Wikipedia

video surveillance on C# — CodeProject