国产探花免费观看_亚洲丰满少妇自慰呻吟_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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海伦市| 德保县| 屏东县| 西昌市| 东方市| 永安市| 望都县| 九江县| 庆阳市| 溧水县| 福州市| 舒城县| 定州市| 普定县| 沈阳市| 富锦市| 灌南县| 耿马| 铁岭市| 正安县| 托克托县| 桐城市| 萨嘎县| 宝清县| 海口市| 民勤县| 黎城县| 徐汇区| 当阳市| 平果县| 平昌县| 平陆县| 车致| 东莞市| 达州市| 许昌市| 启东市| 郁南县| 保山市| 宁海县| 秭归县|