Dav*_*ist 24 qtkit objective-c avfoundation ios
QTKit(QuickTime Kit)是10.3天的Mac框架,例如在10.5中添加了一些图层QTMovieLayer
.QTMovieLayer的一个好处是你可以使用content
图层上的常规属性访问电影内容并获取一个CAImageQueue
对象.这样做的好处是你可以创建一堆常规CALayer
s并将图像队列设置为它们的内容,并通过设置正确的方式为所有图层提供它们自己的电影部分contentRect
.这意味着您可以创建类似下图的图像,只运行一部电影,同时获得同步和内存效率.
我可以发布这段代码,但我怀疑它与我的问题有关,因为问题是iOS和QTKit在那里不存在.
我想在iOS上做同样的事情,但那里不存在QTKit.也就是说,我正在寻找存在于iOS 上的content
QTMovieLayer的替代品,其中属性不是nil(这是重要的部分),以便我可以在多个层之间共享内容.
此外,当我设法让视频在多个层中播放时,我希望能够指定视频的哪个部分应该在哪个层中播放(如上图所示)
在iOS上,您可以使用AVFoundation或MediaPlayer框架来播放电影.在AVFoundation中,您AVPlayerLayer
可以显示电影.(您还可以AVCaptureVideoPreviewLayer
显示摄像机输入的预览和AVSynchronizedLayer
同步但不显示视频).
注意: 在所有这些示例中,我成功地将视频播放到包含声音和所有内容的图层中.那不是我的问题.问题是我无法将内容与其他图层共享.
我已阅读技术说明TN2300 - 将QTKit代码转换为AV Foundation但无法找到有关在图层之间共享视频内容的任何信息.
如果我创建一个这样的玩家图层并尝试让contents
我只nil
回来
NSURL *videoURL = [[NSBundle mainBundle] URLForResource:@"video" withExtension:@"m4v"];
AVPlayer *player = [AVPlayer playerWithURL:videoURL];
[player play];
AVPlayerLayer *videoLayer = [AVPlayerLayer playerLayerWithPlayer:player];
id videoContent = videoLayer.contents // <-- this is nil :(
Run Code Online (Sandbox Code Playgroud)
即使我真的对播放电影文件感兴趣,但我尝试使用捕获预览图层,但内容与之前一样是零
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
AVCaptureSession *captureSession = [AVCaptureSession new];
[captureSession addInput:input];
AVCaptureVideoPreviewLayer *Layer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
[captureSession startRunning];
id videoContent = videoLayer.contents // <-- this is still nil :(
Run Code Online (Sandbox Code Playgroud)
从它的名称你可能会认为同步层将是我正在寻找的,但它不用于显示任何东西(表单头文档):
AVSynchronizedLayer类似于CATransformLayer,因为它本身不显示任何内容,只是在其子层子树上赋予状态.
媒体播放器框架没有图层变体,并且创建播放器视图控制器并获取播放器视图层对我来说似乎不是一个有效的选项.(是的,我甚至都懒得试试.)
在iOS上是否存在QTMovieLayer的替代方案,您可以在其中获取当前播放视频的内容并同时在多个其他图层中显示其中的部分内容?
为了从捕获会话或播放器会话获取视频/音频数据缓冲区,
CMSampleBufferRef 对象包含媒体帧数据、时间戳信息和媒体的格式描述。然后,您可以通过将其转换为 CGImageRef 来显示该帧,并将其显示在任何视图上。
您还可以在 AVCaptureVideoDataOutput.videoSettings 属性中指定所需的帧压缩格式(或未压缩帧格式)。
归档时间: |
|
查看次数: |
1193 次 |
最近记录: |