YUV 420P IOS中的呈现

经过3个工作日(周六下午及加班,周一,今天上午)总算将解码的图像展现出来了,期间经历一些曲折,主要是前述中的"想通过原始YUV数据,重建CVPixelBufferRef类型的数据,进而可   

1)转为CIImage,UIImage然后调用performSelectorOnMainThread来呈现:(经验还不足,这个api还是google了很多才找到的)

    CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer];
    UIImage *image= [UIImage imageWithCIImage:ciImage];//:newImage scale:1.0  orientation:UIImageOrientationRight];
    [self.mainContentView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];

2)使用苹果官方demo GLCameraRipple(https://developer.apple.com/library/ios/samplecode/GLCameraRipple/GLCameraRipple.zip)来显示(这个Demo是用opengl来显示的,效率应该比上面的方法高,而且本身这个demo还有其它的功能----触屏水波纹)

两个方法都是要得到CVPixelBufferRef类型的数据,无奈,使用CVPixelBufferCreateWithPlanarBytes得到了数据,不过其中iosuface是0,导致opengle和ciimage都没法处理(参看http://blog.csdn.net/dabang_007/article/details/19701301) 相应的http://stackoverflow.com上似乎也没有很好的解决掉(有帖子http://stackoverflow.com/questions/15316534/cvpixelbuffer-to-ciimage-always-returning-nil说搞定,但是我用那种方式还是没有成功).

后来想直接用opengl es来处理(因为查linphone相应代码就是如此),发现这个很复杂,昨天有多半天就是查看相关资料,感觉这样会影响功能开发,继续求助google,终于,在http://stackoverflow.com/questions/12428108/ios-how-to-draw-a-yuv-image-using-opengl 这个尾部,看到github上一个代码/kxmovie ,down下来,只用其中的KxMovieGLView.h/KxMovieGLView.m然后视图控制器也做些适配,YUV 420P的数据终于正常显示了!


记录下这个功能点的开发过程:感觉基本功太差(视频相关的知识太少,opengl也基本不会),解决这个问题全靠东拼西凑,不过还好,为何我们那么难看的代码训练出来对代码有一定的掌控力.

优化代码去了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值