第一次写博客心情好激动。。。。
大家都知道QT跨平台,在QT下写了一个解码FFMPEG的案例,能显示,但是性能不好。用的是FFMPEG那套大家都知悉的软解码。
ios硬解码多的是object-c写的,(我基本没有看到有c++写的),这就很坑爹了。。。因为本人工程就是QTc++!!!
然后硬着头皮看了一下各种莫名其妙符号的object-c;摸索了一下怎么在QT里面写oc的代码,没想到成功了!!!
来,上代码分析:(怎么贴图啊 ,哈哈,尴尬)首先记录一下oc编程,然后记录c++调用oc,最后记录怎么qt下实现ios硬解码
内容挺多,慢慢来看。。。
c++与o混合编程,你需要将文件名称定义为:*.mm
然后在.mm文件里面,写下你要的oc类:
@interface OCClass : NSObject
-(void) receivedRawVideoFrame: (NSString *)path ;
-(void) createDecompSession;
@property (nonatomic, copy) VideoDecodeCompleteBlock completeBlock;
-(BOOL)initH264Decoder ;
- (BOOL)readStream;
@property VTDecompressionSessionRef decodeSession;
@property CMFormatDescriptionRef formatDescription;
@property CVPixelBufferRef pixelBuffer;
@property uint8_t *buffer;
@property long bufferSize;
@property long maxSize;
- (void)setupDecodeSession;
-(CVPixelBufferRef)decode;
@property uint8_t *frame_buffer;
@property long frame_size;
@property long sps_size;
@property uint8_t *pps_buffer;
@property long pps_size;
@property uint8_t *sps_buffer;
@property (nonatomic, strong) NSInputStream *inputStream;
@end
写惯c++的是看起来很别扭对吧, @interface OCClass : NSObject这个就是c++中定义一个类继承自NSObject
@property 后面定义成员变量,可以跟c++或者oc的类型都可以。。。注意!!!!坑爹的是使用,你需要加_成员变量,
例如你需要用pps_buffer这个变量,实际上应该写_pps_buffer;- (void)setupDecodeSession;-代表非静态方法;
oc里面的类对象都只能是new出来的。类定义后面需要加@end;@这个在oc很常见,例如区分c++字符串的时候;