我用蓝屏录制了一段视频。我们有将该视频转换为透明背景的软件。在自定义UIView上覆盖这个视频的最佳方式是什么?每当我在iPhone上看到视频时,它总会启动该播放器界面。有什么方法可以避免这种情况吗?
答案 0 :(得分:9)
除了我之外,不知道是否还有人对此感兴趣,但我正在使用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,但这就是我们使用的
答案 1 :(得分:3)
您需要使用AVFoundation.framework构建自定义播放器,然后使用带alpha通道的视频。 AVFoundation框架允许更加强大的视频处理,而没有MPMedia框架的许多限制。建立一个自定义播放器并不像人们想象的那么难。我在这里写了一个教程: http://www.sdkboy.com/?p=66
答案 2 :(得分:1)
我假设你要做的实际上是从视频中实时删除蓝屏:你需要通过OpenGL播放视频,在帧上运行像素着色器,最后使用具有透明背景的OpenGL图层。
请参阅WWDC 2011的Capturing from the Camera using AV Foundation on iOS 5会话,其中介绍了完全相同的技巧(在9:00观看色度键演示)。据推测,可以下载源代码,但我现在找不到链接。
答案 3 :(得分:1)
GPUImage可以使用,但它并不完美,因为iOS设备不适合进行视频处理。您应该使用处理色度键的专业视频工具在桌面上完成所有操作,然后使用Alpha通道导出视频。然后按照playing-movies-with-an-alpha-channel-on-the-ipad中的说明将视频导入iOS应用程序包。在将视频加载到iOS设备之前,确保将视频正确转换为Alpha通道视频,可以避免许多质量和加载时间问题。
答案 4 :(得分:0)
唯一可以避免使用播放器界面的方法就是推出自己的视频播放器,这很难做到。您可以在播放器界面的顶部插入自定义叠加层,使其看起来像用户仍在您的应用中,但您实际上无法控制视图。您可能想尝试在播放器界面中播放透明视频,看它是否显示为透明。查看播放器中是否有背景颜色属性。您可能希望将其设置为透明。
- 麦克
答案 5 :(得分:0)
我不确定iPhone API会让你在另一个视图的顶部有一个电影视图,但仍然具有透明度。
答案 6 :(得分:-3)
如果您想使用内置播放器,则无法避免启动播放器界面。
以下是我要尝试的内容:
我认为如果不编写自己的播放器,你可以做得比这更好,我不知道这种方法是否有效。
根据视频的大小和您尝试的操作,您还可以尝试使用动画GIF。
答案 7 :(得分:-3)
如果您可以从视频中提取帧并将其保存为图像,则可以通过更改图像来再现视频。以下是如何重现图像以使其看起来像视频的示例:
在此图片中我上传的图片名称有不同的名称,但如果您将图片命名为:frame1,fram2,fram3 ....那么您可以将其放在循环中。
我从未尝试过它我只知道它适用于简单的动画。希望它有效。