我有一个显示livecam的网络服务器。
它有两种模式:
目前我正在使用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!)
}
}
}
我的问题:
答案 0 :(得分:2)
是的,您需要使用某种视频编解码器,因为您有视频。尝试发送这样的单个帧是浪费带宽和CPU。我很高兴您从目前的设置中获得了20 FPS。
MJPEG是一种视频编解码器,通过不断增强图像,与JPEG工作方式完全相同。更改的帧的内容将作为已有内容的增强功能进行推送,从而节省大量带宽。 MJPEG也很容易实现,因为如果你可以解码JPEG渐进式,你可以解码MJPEG(可能有一些小的改进)。
无论如何,目前有更好的视频编解码器可用。其中许多都有硬件编解码器,这意味着工作被卸载到该编解码芯片而不是由CPU直接处理。这就是高性能视频在硬件上运行的方式,否则无法跟上。根据目标平台上已存在的系统支持,确定要使用的编解码器。 H.264和VP8非常受欢迎,VP9即将推出。
答案 1 :(得分:0)
两者之间几乎没有区别。唯一的区别是,对于M-JPEG
,流会发送一系列JPEG
s,而不是每个请求一个,因此您不会浪费带宽为每个帧打开一个新连接,在这种情况下与图像大小相比可以忽略不计,而且由于缓冲而不是丢帧,M-JPEG可能导致低带宽连接中的图像延迟。