【问题标题】:iOS - How to play a video with transparency?iOS - 如何播放具有透明度的视频?
【发布时间】:2019-01-14 10:18:54
【问题描述】:

我录制了一个蓝屏视频。我们有软件可以将该视频转换为透明背景。在自定义 UIView 上播放此视频的最佳方式是什么?每当我在 iPhone 上看到视频时,它总是会启动播放器界面。有什么办法可以避免这种情况?

【问题讨论】:

  • 嗨亚当,你能告诉我你用什么软件把视频变成透明背景吗?
  • 软件方面,DaVinci Resolve 不错,也可以用 Blender。

标签: ios video


【解决方案1】:

不知道除了我还有没有人对此感兴趣,但我正在使用 GPUImage 和 Chromakey 滤镜来实现这个^^ https://github.com/BradLarson/GPUImage

编辑:我所做的示例代码(现在可能已过时):

-(void)AnimationGo:(GPUImageView*)view {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mov"];

    movieFile = [[GPUImageMovie alloc] initWithURL:url];
    filter = [[GPUImageChromaKeyBlendFilter alloc] init];

    [movieFile addTarget:filter];

    GPUImageView* imageView = (GPUImageView*)view;
    [imageView setBackgroundColorRed:0.0 green:0.0 blue:0.0 alpha:0.0];
    imageView.layer.opaque = NO;
    [filter addTarget:imageView];

    [movieFile startProcessing];

    //to loop
    [imageView setCompletionBlock:^{
        [movieFile removeAllTargets];
        [self AnimationGo:view];
    }];
}

我可能不得不稍微修改一下 GPUImage,它可能不适用于最新版本的 GPUImage,但这是我们使用的

【讨论】:

  • 非常。我必须对 GPUImage 进行一些更改才能使其循环播放,但其余的几乎只是插入。^^
  • 您可以同时播放视频和应用滤镜吗? (换句话说,实时转换)
  • 是的,它使用 GPU 使用 opengles 过滤所有内容,因此只要您只执行 1 或 2 个过滤器,它就会非常灵敏^^
  • 并且您可以在色度键控视频的透明部分下方看到 UIView?你可以发布一些示例代码吗?我被困了好几天了。
  • 这个答案缺少一个关键细节:您需要创建一个透明的GPUImagePicture(例如从透明的 PNG)与GPUImageMovie 混合,因为GPUImageChromaKeyBlendFilter 需要两个输入。
【解决方案2】:

您需要使用 AVFoundation.framework 构建自定义播放器,然后使用带有 Alpha 通道的视频。 AVFoundation 框架允许对视频进行更健壮的处理,而不受 MPMedia 框架的许多限制。构建自定义播放器并不像人们想象的那么难。我在这里写了一个教程: http://www.sdkboy.com/?p=66

【讨论】:

  • 链接失效,答案变得毫无价值......除了 AVFoundation 从来不支持开箱即用的 alpha 通道播放。
【解决方案3】:

我假设您实际上要从视频中实时移除蓝屏:您需要通过 OpenGL 播放视频,在帧上运行像素着色器,最后使用具有透明背景的 OpenGL 层。

请参阅 WWDC 2011 的 Capturing from the Camera using AV Foundation on iOS 5 会议,其中解释了实现这一目标的技术(观看 9:00 的 色度键 演示)。想必源码可以下载,但我现在找不到链接。

【讨论】:

    【解决方案4】:

    GPUImage 可以工作,但它并不完美,因为 iOS 设备不是进行视频处理的地方。您应该使用处理色键的专业视频工具在桌面上完成所有操作,然后导出带有 Alpha 通道的视频。然后按照playing-movies-with-an-alpha-channel-on-the-ipad 中的说明将视频导入您的iOS 应用程序包。通过确保您的视频在加载到 iOS 设备之前正确转换为 Alpha 通道视频,您可以避免很多质量和加载时间问题。

    【讨论】:

    • 我们可以讨论质量,但在性能方面,GPUImage 中的色度键控操作都是简单的 OpenGL ES 着色器。它们在更旧的 iOS 设备上以 60 FPS 的速度运行,但最大的视频除外。与视频解码时间相比,这方面的开销可以忽略不计。在播放性能方面,AVAnimator 与 AV Foundation 中的硬件加速解码相比如何?
    • ChromaKey 的问题是源视频有问题,比如sonycreativesoftware.com/…。如果我们生活在一个完美的世界里,那么所有的视频都是完美的,永远不会有问题。但是,在显卡上进行视频处理意味着当出现问题时很难检测到。它在一款 iPhone 型号上可能看起来不错,但在 iPad 上可能看起来很糟糕。我的观点是,这些问题已经通过专业的视频包在桌面上得到了解决。
    • 就性能而言,AVAnimator 只是从映射内存执行 blit 或从映射内存加载到纹理而不传输到显卡(CoreGraphics 实现了这一点),因此它也可以获得 60FPS结果。与 AVAnimator 相比,解码 h.264 的时间实际上可能需要更长的时间,但 AVAnimator 必须从 7zip 项目资源开始解码,因此这实际上取决于应用程序的设置方式。
    • GPUImage确实有真正的性能优势。较旧的 iOS 设备的屏幕要小得多,因此帧缓冲区的 W x H 大小并没有那么大。但是,在更新的 iOS 硬件上,例如具有 2048 x 1536 显示屏的 iPad,硬件甚至无法以足够快的速度 memcpy() 以 30 FPS 传输全屏视频。即便如此,GPUImage 中绿屏方法的质量仍然是一个问题:modejong.com/blog/post18_green_screen
    【解决方案5】:

    避免使用播放器界面的唯一方法是滚动您自己的视频播放器,这很难做到正确。您可以在播放器界面顶部插入自定义叠加层,使其看起来用户仍在您的应用程序中,但您实际上无法控制视图。您可能想尝试在播放器界面中播放透明视频,看看它是否显示为透明。查看播放器中是否有背景颜色的属性。您也希望将其设置为透明的。

    --麦克

    【讨论】:

      【解决方案6】:

      我不确定 iPhone API 是否会让您在另一个视图的顶部有一个电影视图并且仍然具有透明度。

      【讨论】:

        【解决方案7】:

        如果你想使用内置播放器,你不能避免启动播放器界面。

        这是我会尝试的:

        • 获取由 MPMoviePlayerController (see here) 创建的新窗口
        • 使用 [window subviews] 和 [view subviews] 探索该窗口中的视图层次结构
        • 尝试找出其中哪个视图是实际的玩家视图
        • 尝试在播放器视图后面插入一个视图 (sendSubviewToBack)
        • 查看播放器是否支持透明度。

        如果不编写自己的播放器,我认为你不能做得比这更好,而且我不知道这种方法是否可行。

        根据您的视频大小和您想要做什么,您还可以尝试使用动画 GIF。

        【讨论】:

          【解决方案8】:

          如果您可以从视频中提取帧并将它们保存为图像,则可以通过更改图像来复制您的视频。以下是如何复制图像使其看起来像视频的示例:

          在我上传的这张图片中,图片的名称具有不同的名称,但如果您将图片命名为:frame1、fram2、fram3....,那么您可以将其放在循环中。

          我从未尝试过,我只知道它适用于简单的动画。希望它有效。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-10-13
            • 2011-04-09
            • 2020-06-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多