使用 AVFoundation 框架 iPhone 进行视频录制?

2023-12-01

我正在借助示例代码开发一个应用程序2010 年全球开发者大会AVCamDemo 示例。在应用程序中,我需要从 iPhone 的前置摄像头录制视频,但由于我的地方没有新的 iPhone 4,我无法正确测试代码。

如果有人能给我提示,无论我是否朝着正确的方向前进,我都会非常感激。当我设置时,我可以在 iPhone 3G(升级到 iOS 4.1)上测试的有限代码崩溃了AVCaptureSession,如下代码所示:

- (void)recordVideo
{
    NSLog(@"video recording on");

    AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    AVCaptureDeviceInput *videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:videoCaptureDevice error:nil];  
    AVCaptureMovieFileOutput *movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];

    [movieFileOutput release];

    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    [session addInput:videoInput];
    [session addOutput:movieFileOutput];
    [self setSession:session]; // crashes

    if (![session isRunning])
    {
        [self performSelector:@selector(startRecording) withObject:nil afterDelay:1.0];
        [session startRunning];
    }
}


- (void)startRecording
{

    AVCaptureConnection *videoConnection = [playVideo connectionWithMediaType:AVMediaTypeVideo fromConnections:[[self movieFileOutput] connections]];

    if ([videoConnection isVideoOrientationSupported]) {
        [videoConnection setVideoOrientation:[self orientation]]; 
    }

    [[self movieFileOutput] startRecordingToOutputFileURL:[self tempFileURL]
                                        recordingDelegate:self];
}


- (void) stopRecording
{
    NSLog(@"stop recording");
    [[self movieFileOutput] stopRecording];
}

- (NSURL *) tempFileURL
{

    NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"];
    NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:outputPath]) {
        NSLog(@"file saved");
    }
    [outputPath release];
    return [outputURL autorelease];
}

+ (AVCaptureConnection *)connectionWithMediaType:(NSString *)mediaType fromConnections:(NSArray *)connections;
{
    for ( AVCaptureConnection *connection in connections ) {
        for ( AVCaptureInputPort *port in [connection inputPorts] ) {
            if ( [[port mediaType] isEqual:mediaType] ) {
                return [[connection retain] autorelease];
            }
        }
    }
    return nil;
}

- (void)captureOutput:(AVCaptureFileOutput *)captureOutput
didStartRecordingToOutputFileAtURL:(NSURL *)fileURL
                   fromConnections:(NSArray *)connections
{

}

- (void)captureOutput:(AVCaptureFileOutput *)captureOutput
didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
                    fromConnections:(NSArray *)connections
                              error:(NSError *)error
{
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:outputFileURL])
    {
        [library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
                                    completionBlock:^(NSURL *assetURL, NSError *error)];
    }

    [library release];       
}

movieFileOutput分配后立即释放。 (9号线)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AVFoundation 框架 iPhone 进行视频录制? 的相关文章

  • 如何适配iPhone 4屏幕分辨率?

    根据Apple http www apple com iphone specs html iPhone 4 拥有新的 更好的屏幕分辨率 3 5 英寸 对角线 宽屏多点触控显示屏960 x 640 像素分辨率 326 ppi 这个小细节对我们
  • UIWebView 中的 PDF

    我正在创建一个杂志应用程序 我在 UIWebView 中显示杂志的每一页 不过 Web 视图不会用 PDF 填满屏幕 它周围有一个边界 我怎样才能全屏显示它 我还没有使用 UIWebView 尝试过此操作 但您也许可以执行类似的操作来以编程
  • iPhone 崩溃日志?

    我已经配置了一部 iPhone 并让用户安装了该应用程序 它失败 是否有崩溃日志可以让我看到 iPhone 上失败的原因 Ian 如果您可以使用 xcode 将 iPhone 连接到计算机 则在管理器窗口中它会显示每个应用程序崩溃的崩溃日志
  • 有什么方法可以让我知道按屏幕的力度有多大

    我想找到触摸的压力 我只是不知道如何在不越狱并获取原始触摸数据的情况下实现该结果 有谁知道我会怎么做 你无法获得来自SDK的压力nor未记录的方法 然而你can使用未记录的方法检测触摸的大小 在 GSEvent UIEvent 的较低级别表
  • MPMusicPlayerController 和 setNowPlayingItem

    我在用着MPMusicPlayerController 特别是与setNowPlayingItem协议 它是为了cydia 但我在制作时遇到了一些问题和理论的警告 似乎某些协议和方法不起作用 我收到如下警告 Tweak xm 177 war
  • 如何检测Retina高清显示屏?

    UIScreen有一个新的 nativeScaleiOS 8 中的属性 但文档没有提及它 property nonatomic readonly CGFloat nativeScale 还有一个scale属性 但文档说它是 2 用于视网膜显
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • 自定义 MKAnnotationView - 如何捕获触摸而不忽略标注?

    我有一个自定义 MKAnnotationView 子类 它完全按照我想要的方式显示视图 在那个视图中 我有一个按钮 我想捕获按钮上的事件来执行操作 这很好用 但是 我不希望标注被忽略或消失 基本上 触摸标注中的按钮将开始播放声音 但我想保留
  • 按下表格视图单元格时更改视图?

    我需要帮助 当我的 tableView 的单元格被选择时 我希望该单元格转到它自己的页面 我不希望每个单元格都转到同一页面 我尝试使用 FirstFolderViewController first FirstFolderViewContr
  • UINavigationController 在 UITabBarController 的 moreNavigationController 中不起作用

    我正在处理UINavigationControllers在我的应用程序中 全部由UITabBarController 一切工作正常 直到我的控制器落入自动生成的 更多 选项卡 我在简单的示例中重现了该问题 难道我做错了什么 我想不通 感谢您
  • 使用 WebRTC 构建 iOS 本机应用程序

    我找了4天了 还是没找到 我构建了所有库并将其集成到我的自定义项目中 但我不知道应该采取哪些步骤才能使其正常工作 我在代码示例 解释中发现的唯一内容是 tech appear in 2015 05 25 Getting started wi
  • 如何在 iOS (safari) 中获取 mailto 链接以打开 Outlook 应用程序?

    我注意到 在使用 Outlook 应用程序且未配置本机邮件应用程序的 iPhone 用户上 当他们单击 mailto 链接时 系统会提示他们在 iOS 中创建新的电子邮件帐户 而不是打开 Outlook 应用程序 是否可以将 Outlook
  • Objective-C - NSNotificationCenter 放在哪里?

    我有一个 NSNotificationCenter 选择器 把它放在哪里 在委托中 如果是 那么在哪里 在控制器中 方法也放在哪里 我需要解除分配 NSNotificationCenter 吗 NSNotificationCenter de
  • 如何在 iOS 上捕获的视频中添加水印[重复]

    这个问题在这里已经有答案了 我想知道是否有人可以告诉我如何实现这一目标 如果一直在考虑几个解决方案 从捕获的视频创建单独的图像 然后将它们合并到每个图像中 然后创建一个新的 AVAsset 听起来有点复杂 您不觉得吗 合并2个视频 一个是透
  • 将 NSString 转换为 NSInteger?

    我想转换string data to NSInteger 如果字符串是人类可读的数字表示 您可以这样做 NSInteger myInt myString intValue
  • 如何在 UIWebView 中启用放大/缩小选项?

    如何在 UIWebView 中启用放大 缩小选项 这是 UIWebView 的默认功能 用你的手指
  • 如何让 Chrome Cast 在 iOS 后台运行?

    我有一个简单的问题 当您进入 iPhone 的主屏幕并且不退出应用程序时 chrome Cast 设备会停止在屏幕上播放视频 当应用程序在后台运行时 我如何才能保持播放状态 如果您有一个视频应用程序并且它在投射设备中运行 您可能需要以下行为
  • 如何在UiView中添加UIImagePickerController

    如何在TabBarApplication中的UiView中添加UIImagePickerController 无论您是否在选项卡中 此代码都会进入您视图的 ViewController 类 当您需要时创建一个选择器 UIImagePicke
  • 渐变方向从左到右

    我完全被这个问题难住了 它应该如此简单 以至于让我发疯 我正在使用这个苹果反射教程 苹果反射示例 http developer apple com library ios samplecode Reflection Listings MyV
  • Google Cardboard - Cardboard VR 套件有 iPhone / iOS 入门项目吗?

    我正在看Google Cardboard 套件 一种廉价的 VR 设置 https developers google com cardboard 使用 Android 设备玩 3d VR 游戏 我看到他们有一个 Android 演示项目

随机推荐

  • 重新打开窗口抛出 Gtk-CRITICAL **:gtk_widget_get_window:断言“GTK_IS_WIDGET(小部件)”失败

    我有简单的 python3 gtk3 代码 它连接到 dbus 并监听所有事件 当用户单击托盘中的图标时 他必须看到包含所有显示的早期事件的窗口 代码 我不知道问题出在哪里并且代码大小 gt 100行 https github com ra
  • string.h 中的 strupr() 和 strlwr() 是 ANSI 标准的一部分吗?

    我在互联网上寻找这个 并且在每个具有 string h 功能的地方都没有提到这两个 是因为什么 它们并不存在于每个编译器中 它们是来自 Microsoft C 库的非标准函数 此后 MS 已弃用它们 转而采用重命名的函数 strlwr an
  • C++ 中的 OpenID 库?

    我需要在 C 网站中使用 openid 但找不到可以使用的工作库 我正在尝试使用这个 http kin klever net libopkele requirements 但它会停止配置并显示以下消息 检查 OPENSSL 配置 错误 未找
  • Django 在调试模式下损坏管道

    我在 Nginx 后面的远程服务器上有 django 1 3 如果我使用 apache mod wsgi 运行 django 我可以查看 apache 日志文件中的错误 没关系 但我想在控制台中使用 如果我运行 django 自己的开发服务
  • TFS 构建代理用户功能的值可以在构建步骤中获得吗?

    我正在尝试在 TFS 中编写一个构建步骤 该步骤依赖于了解构建代理存储 nuget exe 的位置 标准 nuget install 步骤以破坏构建执行的方式破坏了参数的顺序 所以我想使用batch shell ps 步骤之一自己运行exe
  • 检查连续元素之间的差异是否相同

    我是在 Prolog 中使用算术的新手 我做过一些小程序 但主要涉及逻辑 我正在尝试实现一个将返回的函数true or false每个连续元素对之间的差异是否相同 我的输入如下所示 sameSeqDiffs 3 5 7 9 2 我觉得我需要
  • Gradle 替代 mvn install

    我在 mvn 上构建了 2 个不同的项目 我正在尝试更换为 Gradle 项目 1 是一个 SDK 项目 2 使用该 sdk 示例 在 maven 的时候 它使用 mvn install 创建工件 将整个项目添加到本地存储库中 我喜欢这样在
  • 如何将 linq 结果转换为 HashSet 或 HashedSet

    我有一个 ISet 类的属性 我正在尝试将 linq 查询的结果获取到该属性中 但不知道如何执行此操作 基本上 寻找最后一部分 ISet
  • 执行程序时,代码块打开 2 个控制台窗口

    我最近安装了 Code Blocks 并使用它进行 C 编程 我编写了一个基本的 Hello World 程序 当我运行该程序时 会打开 2 个控制台窗口而不是 1 个 如果只有输出 则第一个控制台在显示输出后关闭 然后第二个窗口保持打开状
  • 如果数据库发生变化,自动刷新内容

    当 mysql 数据库表更改时 如何自动将数据库行 PHP 的值添加到页面 而不刷新页面本身 所以 它有点像这样 自动刷新浏览器以响应文件系统更改 but当数据库发生变化时 不要刷新浏览器来更改文件系统 而是更新内容 而不刷新任何内容 谢谢
  • 使用Session存储Datatable

    目前 我们使用会话在页面中存储数据表 这样我们就不必一次又一次地访问数据库来获取相同的数据表 但我担心它会占用服务器内存 如果有一天大量用户登录 服务器的响应会变慢 我们的应用程序也可能崩溃 请告诉我将数据表存储到会话中是个好主意还是我们应
  • flex / bison:如何在同一输入文件上切换两个词法分析器

    我如何移交打开的文件 例如由另一个扫描仪读取到下一个扫描仪 并将其交给解析器 Flex 缓冲区无法轻松地从一台扫描仪传输到另一台扫描仪 许多细节对于扫描仪来说是私有的 需要进行逆向工程 从而导致可维护性的丧失 然而 只要语义类型兼容 将两个
  • 在辅助监视器上运行单独的应用程序

    Android 支持将应用程序渲染到辅助屏幕 4 2 中添加 但是否可以在主显示器上运行一个应用程序 在辅助显示器上运行另一个应用程序 Android SDK 附带一个Presentation允许前台活动在外部显示器上显示替代内容的类 这是
  • 远程:致命:内存不足,使用 post-receive 挂钩在 git Push 上重新分配失败

    当我做git push remotename branchname到我与 1and1 共 享主机上的远程时 我收到以下错误消息 Counting objects 7 done Delta compression using up to 8
  • 当混合中有新行字符时,UITextView firstRectForRange 不起作用

    我使用此方法将 NSRange 转换为 CGRect 因为它与 UITextView 相关 CGRect frameOfTextRange NSRange range inTextView UITextView textView UITex
  • Spring Data Neo4J 存储库 findAll() 导致 nullpointerException

    我制作了一个简单的存储库 其中包含系统中的所有人员 一切似乎都工作正常 我可以根据给定的键和值添加 删除甚至检索单个人员 但由于某种原因我无法直接检索存储在存储库中的所有人员 我尝试使用 findAll 方法来完成此操作 该方法应该返回一个
  • IIS不使用用户环境变量

    我将 NET Core 应用程序部署到同一服务器两次 一次用于 QA 一次用于生产 目前 我让他们每个人都使用不同的本地用户来运行 IIS 应用程序池 并相应地将 ASPNETCORE ENVIRONMENT 变量设置为 qa 和 生产 这
  • java.lang.OutOfMemoryError:调用 Files.readAllBytes 时直接缓冲内存

    我有以下代码 旨在读取目录并将其压缩到 tar gz 存档中 当我将代码部署到服务器上并使用一批文件对其进行测试时 它在前几个测试批次中工作 但在第 4 或第 5 批次之后 它开始持续给出 java lang OutOfMemoryErro
  • 从数组中删除负数

    我有一个来自数据库的数组 它从一组元素中获取所有 id 然而 它似乎也从发生的一些后端事件中获取了一些负 ID 并且它破坏了我需要对这些 id 执行的操作 在循环数组并将其放入应用程序之前 有没有办法从数组中删除这些负 ID 在我抓住它们之
  • 使用 AVFoundation 框架 iPhone 进行视频录制?

    我正在借助示例代码开发一个应用程序2010 年全球开发者大会AVCamDemo 示例 在应用程序中 我需要从 iPhone 的前置摄像头录制视频 但由于我的地方没有新的 iPhone 4 我无法正确测试代码 如果有人能给我提示 无论我是否朝