media.captureVideo()

类型 函数
media.*
返回值
版本 发行版 2024.3703
关键词 media、摄像头、视频
参见 media.hasSource()

概述

打开设备摄像头的平台特定界面。此函数是异步的,这意味着它会立即返回,所以调用代码会继续执行,直至其作用域结尾;之后,应用程序将会挂起,直到该会话完成。需要一个监听器来处理已捕获对象(URL),该对象可用于 native.newVideo()media.playVideo()

陷阱

常规

Windows、macOS 或 tvOS 不支持此 API。

安卓

  • 为了使用摄像头,你必须在 build.settings 文件中设置以下权限。即使你的应用程序没有将摄像头拍摄的内容写入文件,也需要外部存储权限,因为 Android 摄像头应用程序需要此权限来将其摄像头拍摄的内容保存到公用存储空间,以便你的应用程序可以使用。
settings =
{
    android =
    {
        usesPermissions =
        {
            "android.permission.CAMERA",
            "android.permission.WRITE_EXTERNAL_STORAGE",
        },
    },
}
  • preferredMaxDuration 设置可能无法在所有设备上正常工作。在这种情况下,用户可以拍摄任意长时间的视频。你可以检查视频长度的值以获取录制视频的实际长度和大小。

  • 此函数无法在 Corona 摄像头内部活动上运行,而必须启动外部摄像头活动。

iOS

在 iOS 上,为了使用摄像头,你必须在 build.settingsplist 表中包含以下键/描述信息。当系统提示用户允许访问时,相关描述信息会作为提示的一部分显示。请注意,这些描述信息可以根据你的喜好进行定制,甚至可以进行本地化 (指南)。

settings =
{
    iphone =
    {
        plist =
        {
            NSCameraUsageDescription = "This app would like to access the camera.",
            NSPhotoLibraryUsageDescription = "This app would like to access the photo library.",
            NSPhotoLibraryAddUsageDescription = "This app would like to add the photo library.",
        },
    },
}

语法

media.captureVideo ( { listener [, preferredQuality] [, preferredMaxDuration] } )
listener (必需)

监听器可以是函数监听器或表格监听器。如果是表格,则它必须具有完成方法。分派给监听器的事件将是一个带以下附加属性的完成事件

  • event.url 是一个 String,即视频的 URL。如果操作被取消,此值将会是 nil
  • 如果用户捕获了视频,event.completed 将为 true;如果用户取消了视频捕获,则为 false
  • 如果用户捕获了视频,则 event.duration 将是视频的秒数;如果用户取消了视频捕获或者无法获取该值,则为 nil
  • 如果用户捕获了视频,则 event.fileSize 将是所用字节数;如果用户取消了视频捕获或者无法获取该值,则为 nil
preferredQuality (可选)

String一个表示你想要拍摄的视频质量的字符串。可接受的值有 "high""medium""low"。默认值是 "low"。在安卓上,没有 "medium" 质量级别,如果传递了该值,则会使用 "low" 来代替。

preferredMaxDuration (可选)

Number. 录制视频的最大持续时间(秒)。此设置可能无法适用于所有设备,建议对事件进行检查以验证。

示例

-- Video completion listener
local onVideoComplete = function( event )
    print( "video session ended" )
end

-- Capture completion listener
local function onComplete( event )
    if event.completed then
        media.playVideo( event.url, media.RemoteSource, true, onVideoComplete )
        print( event.duration )
        print( event.fileSize )
    end
end

if media.hasSource( media.Camera ) then
    media.captureVideo( { listener=onComplete } )
else
    native.showAlert( "Corona", "This device does not have a camera.", { "OK" } )
end