ios 获取视频数据每一帧播放
来源:互联网 发布:福州seo基础培训 编辑:程序博客网 时间:2024/06/09 14:32
话不多说 ,直接上码,(无优化,只是实现了功能,测试播放起来飞快)
- (void)doit:(NSURL *)moviePath{
static CALayer *layer=nil;
if(!layer){
layer=[CALayer layer];
layer.frame=CGRectMake(20,0, 320, 320);
layer.contentsGravity=kCAGravityBottomLeft;
layer.contentsScale=[UIScreenmainScreen].scale;
[self.view.layeraddSublayer:layer];
[CATransaction setDisableActions:YES];
}
AVURLAsset *set=[AVURLAssetURLAssetWithURL:moviePathoptions:nil];
NSError *error;
AVAssetReader *asset_reader = [[AVAssetReaderalloc]initWithAsset:set error:&error];
AVAssetTrack* video_track=[[settracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0];
NSMutableDictionary *dictionary = [[NSMutableDictionaryalloc]init];
[dictionary setObject:[NSNumbernumberWithInt:kCVPixelFormatType_32BGRA]forKey:(NSString *)kCVPixelBufferPixelFormatTypeKey];
AVAssetReaderTrackOutput *asset_reader_output=[[AVAssetReaderTrackOutputalloc]initWithTrack:video_track outputSettings:dictionary];
if([asset_reader canAddOutput:asset_reader_output]){
[asset_reader addOutput:asset_reader_output];
}
if([asset_reader startReading]){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
CMSampleBufferRef buffer=NULL;
while ([asset_reader status]==AVAssetReaderStatusReading) {
buffer=[asset_reader_output copyNextSampleBuffer];
if(buffer){
CVImageBufferRef imageBuffer =CMSampleBufferGetImageBuffer(buffer);
CVPixelBufferLockBaseAddress(imageBuffer,0);
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();
CGContextRef newContext =CGBitmapContextCreate(baseAddress,
width, height,
8,
bytesPerRow,
colorSpace,
kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
CGContextRelease(newContext);
CGColorSpaceRelease(colorSpace);
[layer performSelectorOnMainThread:@selector(setContents:)withObject:(id)newImage waitUntilDone:YES];
CFRelease(newImage);
CFRelease(buffer);
}
}
});
}
}
- ios 获取视频数据每一帧播放
- iOS 播放视频进行滑动获取每一帧图片并且通过UIImageView展示出来
- IOS获取视频每一帧的图片方法
- iOS 获取本地视频播放路径
- iOS 获取本地视频播放路径
- 使用MATLAB获取视频中每一帧的图像
- OpenCV之从视频获取每一帧图像
- 获取视频的每一帧,并保存为.jpg图片
- 使用opencv:从视频中获取每一帧图片
- 提取视频每一帧
- iOS 视频的每一帧图片关键帧
- iOS 之从影片中获取每一帧图片
- opencv提取视频每一帧
- iOS-获取视频长度和当前播放时间
- iOS开发:获取一个视频、音频文件的播放时长
- iOS-获取视频长度和当前播放时间
- ios获取所有相册的视频并播放
- ios获取所有相册的视频并播放
- EventLoopThread (30)
- XP系统ftp服务器的搭建
- Socket封装(31)
- ural 1963. Kite
- HSSFCell:You cannot get a string value from a numeric cell
- ios 获取视频数据每一帧播放
- HDU4533 威威猫系列故事――晒被子
- 每天学点Linux--(File_status_flag和File_description_flag的区别/atoi函数的使用
- window下memcached安装
- SQL查找删除重复行
- NYOJ-33-蛇形填数-2013年08月08日16:46:54
- SQL SERVER 2005 复制表
- Acceptor (32)
- ubunntu 12.04 安装QT 4.5.3 (QT 4.5.3 开发环境的搭建)