如何在Windows 8 Metro应用程序中保存捕获的视频文件?

4
这里是捕获视频并保存视频的代码。然而,它并没有保存视频内容,而是返回了错误信息:JavaScript运行时错误:类型不匹配。问题出现在saveVideo函数的copyAsync方法中。
function captureVideo() {      
        var cam = Windows.Media.Capture.CameraCaptureUI();
        cam.videoSettings.allowTrimming = true;
        cam.videoSettings.format = Windows.Media.Capture.CameraCaptureUIVideoFormat.mp4;
        cam.videoSettings.maxResolution = Windows.Media.Capture.CameraCaptureUIMaxVideoResolution.standardDefinition;
               cam.captureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.video).then(function (file) {
            if (file) {
                photoBlobUrl = URL.createObjectURL(file, { oneTimeOnly: true });
                var myVideo = document.getElementById("videoId");                  
                myVideo.src = photoBlobUrl;
                myVideo.play();
            }
            else {
            }
        });
    }
function saveVideo() {
        var output;
        var input;
        var outputStream;           
        var picturesLib = Windows.Storage.KnownFolders.picturesLibrary;

         picturesLib.createFileAsync("v1.mp4",
                                        Windows.Storage.CreationCollisionOption.replaceExisting).
                                    then(function(file) {
                                        return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
                                    }).then(function (stream) {

                                        outputStream = stream;
                                        output = stream.getOutputStreamAt(0);
                                        input = photoBlobUrl;
                                        return Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output);
                                    }).then(function() {
                                        return output.flushAsync();
                                    }).done(function() {
                                        input.close();
                                        output.close();
                                        outputStream.close();

                                    });

    }
1个回答

1

StorageFile 通常表示已经保存的文件。如果你在拍照后查看 StorageFile.Path,它应该是这样的:

C:\Users\[username]\AppData\Local\Packages\[appname]\TempState\picture003.jpg

由于文件已经保存,因此您可以像这样将其移动或复制到其他位置:

storageFile.moveAsync(Windows.Storage.KnownFolders.picturesLibrary)

我希望这可以帮助到您。


不,我是说要保存视频。我想把视频内容保存到图片库中。在我的代码中,视频文件已经创建了,但是它是空的,并且还出现了错误。照片已经成功保存了。我做到了。 - Darshana Dinushal
使用CameraCaptureUI.CaptureFileAsync会创建一个输出文件。如果您得到了一个零长度的文件或其他错误,您应该先解决这些问题。由于文件已经保存,所以没有必要再保存一次。您只需要将其移动或复制到输出位置即可。 - James Dailey - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接