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)