标签: avcapturesession

AVCapture在iOS 7中以60 fps捕获和获取帧缓冲

我正在开发一个应用程序,它需要尽可能多地捕获帧缓冲区.我已经想出如何强制iPhone以60 fps的速度捕获但是

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
Run Code Online (Sandbox Code Playgroud)

方法每秒只被调用15次,这意味着iPhone将捕获输出降级为15 fps.

有人遇到过这样的问题吗?是否有可能提高捕获帧率?

更新我的代码:

camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if([camera isTorchModeSupported:AVCaptureTorchModeOn]) {
   [camera lockForConfiguration:nil];
   camera.torchMode=AVCaptureTorchModeOn;
   [camera unlockForConfiguration];
}
[self configureCameraForHighestFrameRate:camera];

// Create a AVCaptureInput with the camera device
NSError *error=nil;
AVCaptureInput* cameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error];
if (cameraInput == nil) {
   NSLog(@"Error to create camera capture:%@",error);
}

// Set the output
AVCaptureVideoDataOutput* videoOutput = [[AVCaptureVideoDataOutput alloc] init];

// create a queue to run the capture on
dispatch_queue_t captureQueue=dispatch_queue_create("captureQueue", NULL);

// setup …
Run Code Online (Sandbox Code Playgroud)

iphone camera frame-rate ios avcapturesession

18
推荐指数
2
解决办法
2万
查看次数

移动到背景和返回后,AVCaptureVideoPreviewLayer(相机预览)冻结/卡住

无法想象这一个.当应用程序处于活动状态时,一切正常,有时当我将应用程序移动到后台(按下主页按钮)而不是返回时,预览层会冻结/卡住.我使用viewWillAppear和viewDidAppear进行设置.这是我如何设置一切:

  var backCamera = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
  var global_device : AVCaptureDevice!
  var captureSession: AVCaptureSession?

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)

captureSession = AVCaptureSession()
        captureSession!.sessionPreset = AVCaptureSessionPresetPhoto
        CorrectPosition = AVCaptureDevicePosition.Back
        for device in backCamera {
            if device.position == AVCaptureDevicePosition.Back {
                global_device = device as! AVCaptureDevice
                CorrectPosition = AVCaptureDevicePosition.Back
                break
            }
        }


        configureCamera()
        var error: NSError?
        var input = AVCaptureDeviceInput(device: global_device, error: &error)


        if error == nil && captureSession!.canAddInput(input) {
            captureSession!.addInput(input)

            stillImageOutput = AVCaptureStillImageOutput()
            stillImageOutput!.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
            if captureSession!.canAddOutput(stillImageOutput) {
                captureSession!.addOutput(stillImageOutput) …
Run Code Online (Sandbox Code Playgroud)

camera preview ios avcapturesession avcapturedevice

18
推荐指数
2
解决办法
9019
查看次数

找到设备的相机分辨率iOS的方法

什么是使用设置找到要捕获的图像分辨率的最佳方法AVCaptureSessionPresetPhoto.
我想在捕获图像之前找到分辨率.

iphone avfoundation ios avcapture avcapturesession

17
推荐指数
3
解决办法
2万
查看次数

在iPhone应用程序中捕获60fps

我正在开发一个项目,我们将使用iPhone作为捕捉场景的摄像头.录制时我们需要录制@ 60fps而不是30fps(原生支持).所以我正在开发一个应用来做这个,因为iPhone 4S硬件支持720p @ 60fps(如果你越狱你的手机,你可以实现这一点).

有没有人知道如何在iOS上的Objective-C中做到这一点?今天我看到一个应用程序(slopro)可以在非越狱手机上录制60fps.任何建议或提示非常感谢.

iphone recording ios avcapturesession

16
推荐指数
2
解决办法
1万
查看次数

运行多个AVCaptureSessions或添加多个输入

我想在两个相互靠近的UIViews中显示iPad2的前置和后置摄像头的流.要流式传输一个设备的图像,我使用以下代码

AVCaptureDeviceInput *captureInputFront = [AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:nil];

AVCaptureSession *session = [[AVCaptureSession alloc] init];
session addInput:captureInputFront];
session setSessionPreset:AVCaptureSessionPresetMedium];
session startRunning];

AVCaptureVideoPreviewLayer *prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
prevLayer.frame = self.view.frame;
[self.view.layer addSublayer:prevLayer];
Run Code Online (Sandbox Code Playgroud)

这适用于任何一台相机.为了并行显示流,我尝试创建另一个会话,但是第二个会话建立后,第一个会话冻结.

然后我尝试向会话添加两个AVCaptureDeviceInput,但目前最多支持一个输入.

任何有用的想法如何从两个相机流?

video-capture objective-c avcapture avcapturesession ipad-2

16
推荐指数
1
解决办法
7048
查看次数

从Swift中的AVCaptureSession获取输出以发送到服务器

我设法写了一些打开相机并预览视频的代码.我现在想要从输出捕获帧以发送到理想编码为H.264的服务器

这是我得到的:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    let captureSession = AVCaptureSession()
    var previewLayer : AVCaptureVideoPreviewLayer?

    // If we find a device we'll store it here for later use
    var captureDevice : AVCaptureDevice?

    override func viewDidLoad() {
        super.viewDidLoad()            
        // Do any additional setup after loading the view, typically from a nib.

        captureSession.sessionPreset = AVCaptureSessionPresetHigh

        let devices = AVCaptureDevice.devices()

        // Loop through all the capture devices on this phone
        for device in devices {
            // Make sure this particular …
Run Code Online (Sandbox Code Playgroud)

video stream ios avcapturesession swift

16
推荐指数
1
解决办法
7315
查看次数

iOS 8 iPad AVCaptureMovieFileOutput在录制13 - 14秒后丢失/丢失/永远不会获得音轨

我有以下代码适用于iOS 6和7.x.

在iOS 8.1中,我有一个奇怪的问题,如果你捕获会话大约13秒或更长时间,结果AVAsset只有1个轨道(视频),音频轨道就不存在.

如果您录制的时间较短,则AVAsset会有预期的2个音轨(视频和音频).我有足够的磁盘空间,该应用程序有权使用相机和麦克风.

我用最少的代码创建了一个新项目,它重现了这个问题.

任何想法将不胜感激.

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
{
    enum RecordingState { Recording, Stopped };
    enum RecordingState recordingState;

    AVCaptureSession *session;
    AVCaptureMovieFileOutput *output;
    AVPlayer *player;
    AVPlayerLayer *playerLayer;
    bool audioGranted;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setupAV];
    recordingState = Stopped;
}

-(void)setupAV
{
    session = [[AVCaptureSession alloc] init];
    [session beginConfiguration];
    AVCaptureDevice *videoDevice = nil;

    for ( AVCaptureDevice *device in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo] ) {
        if ( device.position == AVCaptureDevicePositionBack ) {
            videoDevice = device;
            break; …
Run Code Online (Sandbox Code Playgroud)

ipad ios avcapturesession avcapturemoviefileoutput ios8.1

16
推荐指数
1
解决办法
1654
查看次数

AVCaptureSession没有任何理由得到内存警告和崩溃

我正在开发一款操纵高清照片的应用程序.我正在用AVCaptureSession拍照,停止它然后对该照片应用效果.

令我疯狂的是,一切正常,仪器告诉我,我按时正确地释放了我使用的所有内存.它真的很高,有时达到100mb.但它迅速下降.

然后我重新开始我的捕获会话,我收到了内存警告.绝对没有理由; _; 我释放时使用的所有内存...然后下次我将重新启动捕获会话时应用程序崩溃.没有消息,没有日志,什么都没有.

我不知道如何解决这个问题,我不知道在哪里寻找...如果有人能帮助我一点点我会很高兴的!

提前致谢!

iphone warnings avcapturesession

15
推荐指数
2
解决办法
5526
查看次数

如何使用RTMPStreamPublisher发布视频时在iPhone上存储视频?

现在我正在使用RTMPStreamPublisherwowzaserver发布视频.它正在成功上传,但有人能告诉我如何在上传到服务器时将相同的视频存储在iPhone上吗?

我使用https://github.com/slavavdovichenko/MediaLibDemos,但没有太多可用的文档.如果我可以存储发送的数据,那么我的工作就会成功.

以下是他们用于上传流的方法,但我找不到在iPhone设备上存储相同视频的方法:

// ACTIONS

-(void)doConnect {
#if 0 // use ffmpeg rtmp 
    NSString *url = [NSString stringWithFormat:@"%@/%@", hostTextField.text, streamTextField.text];
    upstream = [[BroadcastStreamClient alloc] init:url  resolution:RESOLUTION_LOW];
    upstream.delegate = self;
    upstream.encoder = [MPMediaEncoder new];
    [upstream start];
    socket = [[RTMPClient alloc] init:host]
    btnConnect.title = @"Disconnect";     
    return;
#endif

#if 0 // use inside RTMPClient instance
    upstream = [[BroadcastStreamClient alloc] init:hostTextField.text resolution:RESOLUTION_LOW];
    //upstream = [[BroadcastStreamClient alloc] initOnlyAudio:hostTextField.text];
    //upstream = [[BroadcastStreamClient alloc] initOnlyVideo:hostTextField.text resolution:RESOLUTION_LOW];

#else // use outside RTMPClient instance

    if …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c rtmp ios avcapturesession

15
推荐指数
1
解决办法
1126
查看次数

如何从AVCapturePhoto生成具有正确方向的UIImage?

我正在调用AVFoundation的委托方法来处理照片捕获,但是我很难将它生成的AVCapturePhoto转换为具有正确方向的UIImage.虽然下面的例程是成功的,但我总是得到一个面向右侧的UIImage(UIImage.imageOrientation = 3).使用UIImage(数据:图像)并尝试首先使用photo.cgImageRepresentation()时,我无法提供方向?takeRetainedValue()也没有帮助.请协助.

在此处,图像方向至关重要,因为生成的图像将被输入Vision框架工作流程.

func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
    // capture image finished
    print("Image captured.")
    if let imageData = photo.fileDataRepresentation() {
        if let uiImage = UIImage(data: imageData){
            // do stuff to UIImage
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新1: 阅读Apple的Photo Capture编程指南(iOS11过时),我确实找到了一件我做错的事情:

  1. 在每次捕获调用(self.capturePhotoOutput.capturePhoto)时,必须与PhotoOutput对象建立连接并更新其方向以匹配拍摄照片时设备的方向.为此,我创建了UIDeviceOrientation的扩展,并在我创建的snapPhoto()函数上使用它来调用捕获例程并等待执行didFinishProcessingPhoto委托方法.我添加了代码的快照,因为这里的代码示例分隔符似乎没有正确显示它们. 在此输入图像描述 在此输入图像描述

更新2 链接到GitHub上的完整项目:https://github.com/agu3rra/Out-Loud

avfoundation avcapturesession swift4 ios11

15
推荐指数
4
解决办法
6399
查看次数