国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS使用AVFoundation展示視頻

2020-07-26 02:20:32
字體:
來源:轉載
供稿:網友

本文實例為大家分享了iOS使用AVFoundation展示視頻的具體代碼,供大家參考,具體內容如下

//// Capter2ViewController.m// IosTest//// Created by garin on 13-7-19.// Copyright (c) 2013年 garin. All rights reserved.// #import "Capter2ViewController.h" @interface Capter2ViewController ()@end@implementation Capter2ViewController-(void) dealloc{  [session release];  [super dealloc];} - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  if (self) {    // Custom initialization  }  return self;} - (void)viewDidLoad{  [super viewDidLoad];  videoPreviewView=[[UIView alloc] initWithFrame:CGRectMake(10, 10, 320, 200)];  [self.view addSubview:videoPreviewView];  [videoPreviewView release]; // Do any additional setup after loading the view.    //在viewdidload調用下面的函數顯示攝像信息  [self setupCaptureSession];  //  imgView=[[UIImageView alloc] initWithFrame:CGRectMake(10, 230, 320, 100)];//  imgView.backgroundColor=[UIColor grayColor];//  [self.view addSubview:imgView];//  [imgView release];    UIButton *cloeseBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];  cloeseBtn.frame=CGRectMake(10, 220, 300, 50);  [cloeseBtn setTitle:@"Press" forState:UIControlStateNormal];  [cloeseBtn addTarget:self action:@selector(closeBtnClick:) forControlEvents:UIControlEventTouchUpInside];  [self.view addSubview:cloeseBtn];} -(void) closeBtnClick:(id) sender{  [session stopRunning];} - (void)didReceiveMemoryWarning{  [super didReceiveMemoryWarning];  // Dispose of any resources that can be recreated.} - (void)setupCaptureSession{  NSError *error = nil;    // Create the session  session = [[AVCaptureSession alloc] init];    // Configure the session to produce lower resolution video frames, if your  // processing algorithm can cope. We'll specify medium quality for the  // chosen device.  session.sessionPreset = AVCaptureSessionPresetLow;    // Find a suitable AVCaptureDevice  AVCaptureDevice *device = [AVCaptureDevice                defaultDeviceWithMediaType:AVMediaTypeVideo];    // Create a device input with the device and add it to the session.  AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device                                    error:&error];  if (!input) {    // Handling the error appropriately.  }  [session addInput:input];    // Create a VideoDataOutput and add it to the session  AVCaptureVideoDataOutput *output = [[[AVCaptureVideoDataOutput alloc] init] autorelease];  [session addOutput:output];    // Configure your output.  dispatch_queue_t queue = dispatch_queue_create("myQueue", NULL);  [output setSampleBufferDelegate:self queue:queue];  dispatch_release(queue);    // Specify the pixel format  output.videoSettings =  [NSDictionary dictionaryWithObject:   [NSNumber numberWithInt:kCVPixelFormatType_32BGRA]                forKey:(id)kCVPixelBufferPixelFormatTypeKey];      // If you wish to cap the frame rate to a known value, such as 15 fps, set  // minFrameDuration.  //output.minFrameDuration = CMTimeMake(1, 15);  //AVCaptureConnection *avcaptureconn=[[AVCaptureConnection alloc] init];  //[avcaptureconn setVideoMinFrameDuration:CMTimeMake(1, 15)];  // Start the session running to start the flow of data  [session startRunning];  AVCaptureVideoPreviewLayer* previewLayer = [AVCaptureVideoPreviewLayer layerWithSession: session];  previewLayer.frame = videoPreviewView.bounds; //視頻顯示到的UIView  previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;//  [previewLayer setOrientation:AVCaptureVideoOrientationLandscapeRight];  //  if(previewLayer.orientationSupported){  //   previewLayer.orientation = mOrientation;  //  }    [videoPreviewView.layer addSublayer: previewLayer];    if(![session isRunning]){    [session startRunning];  }    // Assign session to an ivar.  //[self setSession:session];} //得到視頻流- (void)captureOutput:(AVCaptureOutput *)captureOutputdidOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer    fromConnection:(AVCaptureConnection *)connection{  // Create a UIImage from the sample buffer data  return;    UIImage *image = [self imageFromSampleBuffer:sampleBuffer];  //得到的視頻流圖片  imgView.image=image;} // Create a UIImage from sample buffer data- (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer{  // Get a CMSampleBuffer's Core Video image buffer for the media data  CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);  // Lock the base address of the pixel buffer  CVPixelBufferLockBaseAddress(imageBuffer, 0);    // Get the number of bytes per row for the pixel buffer  void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);    // Get the number of bytes per row for the pixel buffer  size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);  // Get the pixel buffer width and height  size_t width = CVPixelBufferGetWidth(imageBuffer);  size_t height = CVPixelBufferGetHeight(imageBuffer);    // Create a device-dependent RGB color space  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();    // Create a bitmap graphics context with the sample buffer data  CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8,                         bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);  // Create a Quartz image from the pixel data in the bitmap graphics context  CGImageRef quartzImage = CGBitmapContextCreateImage(context);  // Unlock the pixel buffer  CVPixelBufferUnlockBaseAddress(imageBuffer,0);    // Free up the context and color space  CGContextRelease(context);  CGColorSpaceRelease(colorSpace);    // Create an image object from the Quartz image  UIImage *image = [UIImage imageWithCGImage:quartzImage];    // Release the Quartz image  CGImageRelease(quartzImage);    return (image);} @end

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 焦作市| 和田市| 万荣县| 汝南县| 涿鹿县| 梁平县| 当阳市| 周至县| 张家川| 桐柏县| 井研县| 遵义市| 汉源县| 潮安县| 九江县| 辽中县| 大连市| 龙川县| 灌云县| 绥棱县| 于都县| 邢台市| 三原县| 汶上县| 巍山| 万载县| 诸暨市| 望城县| 雷山县| 宕昌县| 砀山县| 潢川县| 桃源县| 崇明县| 沁源县| 白水县| 西城区| 双峰县| 二手房| 新昌县| 洞头县|