如何快速创建 VTCompressionSession?

Mar*_*kov 5 macos cocoa objective-c swift xcode6

我一直在寻找如何创建 VTCompressionSession swift 中),正如2014 WWDC Video - 'Direct Access to Video Encoding and Decoding' 中简要提到的那样。

以下代码适用于 Objective-C:

#import <Foundation/Foundation.h>
#import <VideoToolbox/VideoToolbox.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        VTCompressionSessionRef session;
        VTCompressionSessionCreate(NULL, 500, 500, kCMVideoCodecType_H264, NULL, NULL, NULL, NULL, NULL, &session);

        NSLog(@"created VTCompressionSession");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但无论怎样我都试过,我不能找到一种方法,导入VTCompressionSessionCreate迅速

import Foundation
import VideoToolbox

VideoToolbox.VTCompressionSessionCreate()

println("created VTCompressionSession")
Run Code Online (Sandbox Code Playgroud)

例如,此代码中断:Module 'VideoToolbox' has no member named 'VTCompressionSessionCreate'
只是调用VTCompressionSessionCreate创建错误消息Use of unresolved identifier 'VTCompressionSessionCreate'

看起来 API 没有在swift 中公开,因为我可以VTCompressionSessionEncodeFrame很好地调用方法。我错过了一些明显的东西吗?

小智 3

我的解决方法是编写一个 Objective-C 函数并通过桥接标头将其公开给 swift:

压缩.h

#import <VideoToolbox/VideoToolbox.h>
VTCompressionSessionRef CreateCompressionSession();
Run Code Online (Sandbox Code Playgroud)

压缩.m

#import <Cocoa/Cocoa.h>
#import <Foundation/Foundation.h>
#import <VideoToolbox/VideoToolbox.h>

VTCompressionSessionRef CreateCompressionSession(){
    NSLog(@"CreateCompressionSession");
    VTCompressionSessionRef session;
    VTCompressionSessionCreate(NULL, 500, 500, kCMVideoCodecType_H264, NULL, NULL, NULL, NULL, NULL, &session);
    return session;
}
Run Code Online (Sandbox Code Playgroud)

流桥接标头.h

#import "CompressionSession.h"
Run Code Online (Sandbox Code Playgroud)

现在您可以在swift中运行以下代码:

import Cocoa
import Foundation
import VideoToolbox

let session = CreateCompressionSession()
Run Code Online (Sandbox Code Playgroud)