在LIVEOP,我们致力于以简洁的方式为急救人员提供最相关的信息,同时又不影响我们的无缝用户体验。 当我们与全球领先的无线(随身)摄像头系统提供商Zepcam合作时,我们希望确保我们提供的体验符合我们的高标准,而不影响性能或效率。 Zepcam托管的摄像机流有几种不同的格式,最重要的是,HTTP Live Streaming(HLS)是iOS生态系统中的一流公民,内置了AVFoundation和RTSP(实时流协议)的内置支持。 HLS流通常用于直播电视和新闻广播。 它专注于为观看者带来无缝体验:不允许丢帧,不允许无序播放帧,并保留少量即将出现的帧缓冲区以确保流畅的播放体验。 Zepcam流被激活的情况通常会危及生命。 警员可能在试图装防暴动时从佩戴在身上的摄像机进行实时直播,或者在顶部装有摄像机的梯形引擎可能会鸟瞰大建筑物的火灾,包括消防员在地面上的位置。 我们对无缝用户体验的定义与HTTP Live Streaming所规定的不同:在我们的案例中,向用户显示的帧尽可能实时是很重要的。 它们可以无序到达,并且可以丢弃几帧,只要这有利于流的实时性。 加上我们的要求,我们开始在UDP上使用RTSP。 Apple不在任何高级框架中提供对RTSP流回放的支持。 用于回放视频流的所有高级系统类MPMoviePlayerController , AVPlayerItem和AVPlayer不支持RTSP流。 幸运的是,瑞士的音频/视频处理军刀FFMPEG配备了正确的工具来处理和解码RTSP流。 FFMPEG在开源社区已有17年的历史了,自那时起,它就已经成为VLC,Google Chrome和Chromium¹等各种最终用户应用程序背后的可靠力量。 设置FFMPEG Zepcam提供的RTSP流使用H264编解码器进行编码。 为了防止最终iOS应用程序文件(.ipa)的二进制文件大量增加,我们选择从头开始编译最新版本的FFMPEG(v4.0.1),仅启用我们希望使用的那些功能。 我们使用此处找到的出色的构建脚本,并进行了一些调整: 将FF_VERSION变量更改为4.0.1 将DEPLOYMENT_TARGET更改为iOS应用程序的部署目标 更改CONFIGURE_FLAGS以启用位码,并禁用除流所需的所有功能之外的所有功能: CONFIGURE_FLAGS =“-启用交叉编译–disable-debug –disable-programs –disable-doc –extra-cflags = -fembed-bitcode –extra-cxxflags = -fembed-bitcode –disable-ffmpeg –disable-ffprobe –disable-avdevice –disable-avfilter –disable-encoders –disable-parsers –disable-decoders –disable-protocols –disable-filters –disable-muxers –disable-bsfs –disable-indevs –disable-outdevs –disable-demuxers –enable-protocol = file […]
我已经完成了本文的大部分示例项目。 您可以在这里查看: chriswebb09 / CoreCamera 通过在GitHub上创建一个帐户为CoreCamera开发做出贡献。 github.com 这篇文章标志着我将要在Core Image上写的一系列文章的开始。 那么为什么要使用Core Image? 低级处理图形可能会很混乱。 您走得越低,您对UIKit和Cocoa的追求就越远。 对于开发人员而言,幸运的是,Apple提供了用于与较低级图形进程进行交互的抽象/接口。 Core Image是这些抽象之一,它是在Apple生态系统中进行编码时经常会遇到的一个库。 从编辑静态图像到在实时视频内容上使用过滤器,Core Image的用途十分广泛,可以处理各种用例。 在我们开始之前,我只想警告您Core Image严重依赖KVO,这会使探索它有些困惑。 与您能够与之合作和操纵的世界相比,这个障碍显得苍白,所以我希望您坚持下去。 Core Image是一种图像处理和分析技术,旨在为静止图像和视频图像提供近乎实时的处理。 它使用GPU或CPU渲染路径处理来自Core Graphics,Core Video和Image I / O框架的图像数据类型。 -Apple文件 定义 CIImage:是用于在Core Image中处理图像数据的图像数据格式。 这是有关如何处理图像的食谱书/说明。 CIFilters将CIImage用作输入,然后将它们传递回去。 由于CIImages的执行是延迟执行的,因此只有在将它们放入可渲染格式后,配方/指令才会被遵循。 CIContext:是用于使用Quartz 2D,Metal或OpenGL进行Core Image处理的图形处理和分析的评估上下文。 CIContext是线程安全的不可变对象,但与它们一起使用的CIFilter不是。 CIDetector:是图像处理过程,用于注意和分类图像上的区别特征。 对于可能是眼睛,耳朵,鼻子等的脸,或者可能是形状,例如盒子。 核心图像内核:核心图像内核是在每个单个像素上运行的小型算法。 内核使用过滤器的参数并基于该参数执行其算法。 每个过滤器至少包裹一个内核。 内核是在目标图像上的每个单个像素上执行的功能。 内核包含我们运行以生成输出图像的处理算法。 执行量高是GPU按其设计方式进行设计的原因。 每次执行看起来可能并不多,但是与所有像素协同工作,同时进行渲染,很明显,我们需要专门的东西来处理它们。 扭曲内核:扭曲内核专为移动,变形,平移图像而设计。 如果您已经阅读了我在ARKit上撰写的较早的系列文章,我们将使用矩阵转换将节点放置在3D空间中。 扭曲内核对像素执行操作以完成这些操作。 颜色内核:颜色内核是负责仅使用颜色的颜色的内核。 它接收一个作为分量向量的参数。 这些成分是红色,绿色,蓝色和Alpha。 […]
我从这里下载Brad Larson的代码。 当我运行它。 它显示构build成功,但它不在模拟器中运行。 请指导我正确的方向。 我检查应用程序委托文件中的方法 – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ ……. } 不叫。 谢谢
比方说,我有一个100×100的图像。 我想将图像放置到500×500的较大的canvas上。 我目前的做法是使用UIGraphics创build一个Context,然后将图像绘制到上下文中。 UIGraphics.BeginImageContext(….); ImageView.Draw (….); 这很好,但不像我希望的那样快。 我注意到CIFilters速度非常快。 有没有一种方法可以使用CIFilters或使用GPU而不是CPU的另一种方法在较大的canvas上放置图像? 我已经用CIFilters CICrop和CIPerspectiveTransform进行了实验,但似乎无法得到我想要的结果… 原始图片100×100 我想要的结果图像在500×500。 我只是想要使用CIFilters或某些GPU操作来增加图像大小。 我尝试使用CICrop做一个“反向作物”,但是这不起作用。 注意我指定了CIVector的大小为500×500,即使图像本身是100×100,结果图像完全忽略了额外的空间,如果closures,剪切。 这是我的代码: CICrop crop = new CICrop(); crop.Image = ImageView.Image.CGImage; crop.Rectangle = new CIVector(0, 0, 500, 500); ImageView.Image = new UIImage(crop.OutputImage); Console.WriteLine("ImageView.Image.size = "+ ImageView.Image.Size);
如何debugging“使用低GPU优先级进行背景渲染”。 我看到在AVFoundation上使用AVFoundation的应用程序的控制台? 我想我正在做一些不必要的工作,我可以跳过保存电池,并消除我绊倒的信息
我想为计算机视觉问题写一个跨平台的代码。 这个代码应该在具有GPU(nVidia)的PC上运行,具有GPU的iPhone以及可能包含GPU的一些基于Android的设备可能不运行。 我想获得现有硬件的最大可能利用率。 我的编程语言是C ++ 11,我的计算机视觉库是OpenCV。 什么是最好的框架,图层,技术等等来使用,以便编写一个可以利用GPU的隔离的高级代码(如果可用的话)。 PS这可能会显示为要求推荐的话题。 但是,在这里,我并没有问很多可用的选项。 我只是问这个问题通常是怎么做的,或者这个领域的艺术状况如何。
我正在尝试开发一个iOS应用程序,它可以对来自摄像机的video执行实时特效,就像iPad上的Photobooth一样。 我熟悉OpenCV的API,但是如果大多数处理是在CPU上完成的,那么我担心iOS上的性能。 像GPUImage这样的图书馆很可能会这样做,但我宁愿留下我熟悉的东西。 那么,有没有人知道如果为iOS编译的OpenCV使用GPU?
http://jsfiddle.net/ES4xG/8/崩溃大多数视网膜设备。 iOS Safari使用一些-webkit-transform指令时,“容易”内存不足,崩溃。 这种方法提供令人印象深刻的graphics,但特别是在视网膜显示器,似乎只消耗大量的内存,导致崩溃。 上面的演示显示了一个文本显示的150倍,否则将在PC浏览器上正常运行: 字体大小和元素数量被夸大,导致崩溃。 -webkit-transform: translate3d(0,0,0)旨在强制GPU加速绘制每个元素。 在实际应用中,我们使用的是translateX , Y , Z , scale和其他似乎与GPU使用相同的方式。 图像和精灵也被使用,但它们并没有直接连接到崩溃。 鉴于以上情况: 1)iOS Safari崩溃了吗? 2)插入苹果公司仪器内存监视器,虚拟内存攀升,似乎是崩溃的罪魁祸首。 究竟是什么使用这个内存? 3)有没有其他GPU加速的方法,不会消耗大量的内存?