Video 如何在WinJS中对Windows.Storage.Streams.IBuffer(视频)进行编码

Video 如何在WinJS中对Windows.Storage.Streams.IBuffer(视频)进行编码,video,encoding,winjs,Video,Encoding,Winjs,我有一个应用程序,它可以用网络摄像头拍照,然后获取字节,然后我使用一种方法在base64上转换,一切正常 然后我想添加视频并对其执行相同的操作(获取字节并将其转换为base 64),但它不起作用,代码如下: var f = Windows.Storage.StorageFile.getFileFromPathAsync(capturedItem.path); return f.then(function (file) { return file.openAsyn

我有一个应用程序,它可以用网络摄像头拍照,然后获取字节,然后我使用一种方法在base64上转换,一切正常

然后我想添加视频并对其执行相同的操作(获取字节并将其转换为base 64),但它不起作用,代码如下:

        var f = Windows.Storage.StorageFile.getFileFromPathAsync(capturedItem.path);

        return f.then(function (file) { return file.openAsync(Windows.Storage.FileAccessMode.read); }).then
            (function (stream) {
                var inputStream = stream.getInputStreamAt(0);
                var size        = stream.size;
                var reader      = new Windows.Storage.Streams.DataReader(inputStream);
                return reader.loadAsync(size).then(function () {
                    var b = reader.readBuffer(size);

                    //Creates the array, datalist and the namespace for making this data public                    
                    ImageData.dataArray[ImageData.dataArray.length] = { title: capturedItem.name, id: "img" + ImageData.dataArray.length, picture: photoBlobUrl };
                    ImageData.arrayCaptures.push(capturedItem); //Stores the data into array (full captured object)
                    ImageData.arrayTextFieldValues.push(Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(b)); //Stores captured converted into bytes

                    updateCaptureList(ImageData.dataArray); //updates the grid with all the screenshots
                });
            });
然后我想打印一个日志来观察字节:

console.log("variable: " + b.toString() + "lenght: " + b.length);
两种情况的结果(图片和视频)

但是当我想看到Windows.Storage.Streams.IBuffer转换后的控制台时,我会记录这个

console.log("data: " + ImageData.arrayTextFieldValues[ImageData.arrayTextFieldValues.length - 1]);
仅在图片上,我得到如下结果:

data: /9j/4AAQSkZJRgABAQEAAAAAAAD/4QCCRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAABJADAAIAAAAUAAAAUJAEAAIAAAAUAAAAZJKRAAIAAAADODAAAJKSAAIAAAADODAAAAAAAAAyMDE0OjAyOjI2IDE5OjUyOjE5ADIwMTQ6MDI6MjYgMTk6NTI6MTkAAAD/4QGgaHR0cDovL25zLmFkb2JlLmNv.....
但对于视频,我甚至无法打印日志,我认为失败的方法是:

Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String()

我想找到一种将我的视频文件编码为base64的方法,如果有任何帮助,我将不胜感激

为时已晚,但是,我将分享我在您的代码片段中注意到的内容:

您必须更换

console.log("variable: " + b.toString + "lenght: " + b.length);
console.log("variable: " + b.toString() + "lenght: " + b.length );

console.log("variable: " + b.toString + "lenght: " + b.length);
console.log("variable: " + b.toString() + "lenght: " + b.length );
b.toString()
是一种方法,之后必须使用括号。因为这里你调用了
方法,如果你传递这个
方法,那么整个
函数都在你的
变量中,因为你只需要像
b.toString
一样传递它

这就是为什么变量包含:


这可能会对您有所帮助。

谢谢,但现在我得到了变量:[object Windows.Storage.Streams.IBuffer]长度:1793623但仍然没有将字节转换为字符串base64:(当您获得流时,请应用
Filereader.readAsDataURL(inputStream)
,检查如何使用
Filereader()
使用此选项,您可以将流转换为base64。