1. <dd id="erndk"></dd>
                1. iOS使用AVFoundation展示視頻

                  yongyinmg 2019/7/9 23:32:29

                  這篇文章主要為大家詳細介紹了iOS使用AVFoundation展示視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下

                  本文實例為大家分享了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 *)captureOutput
                  didOutputSampleBuffer:(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

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

                  隨時隨地學軟件編程-關注百度小程序和微信小程序
                  關于找一找教程網

                  本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
                  本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
                  [iOS使用AVFoundation展示視頻]http://www.yachtsalesaustralia.com/tech/detail-66736.html

                  贊(0)
                  關注微信小程序
                  程序員編程王-隨時隨地學編程

                  掃描二維碼或查找【程序員編程王】

                  可以隨時隨地學編程啦!

                  技術文章導航 更多>
                  国产在线拍揄自揄视频菠萝

                        1. <dd id="erndk"></dd>