gpt4 book ai didi

javascript - 将 getusermedia 数据附加到 mediasource

转载 作者:行者123 更新时间:2023-11-29 10:36:07 26 4
gpt4 key购买 nike

我对 mediastream 和 mediasource api 的经验有限,您认为从 getusermedia 获取数据然后将该数据附加到 mediasource 的最佳方法是什么。现在我正在使用 MediaRecorder 记录数据,然后将其附加到新的媒体源对象上。但它只是返回一个空白视频。这是我目前正在做的事情。

function createElem (tagName) {
var elem = document.createElement(tagName)
elem.controls = true
elem.autoplay = true
elem.play()
document.body.appendChild(elem)
return elem
}

navigator.getUserMedia({ video: true, audio: false }, function (stream) {
var recorder = new MediaRecorder(stream)
var wrapper = new MediaSource()

var elem = createElem('video')
elem.src = window.URL.createObjectURL(wrapper)
wrapper.addEventListener('sourceopen', sourceOpen)

function sourceOpen () {
var source = wrapper.addSourceBuffer('video/webm;codecs=vp9')
recorder.ondataavailable = function (e) {
source.appendBuffer(new Uint8Array(e.data))
}
}
recorder.start(1000)
}, function () {})

我知道您可以只使用 video.src = window.URL.createObjectURL(stream) 但我想处理原始数据。是否可以这样做。这是一个 fiddle ,所以你可以玩弄 it .

最佳答案

我遇到了类似的问题,this answer为我工作。
我想问题是 MediaRecorder API 返回了 Blob ,但需要一个 ArrayBuffer。根据the MDN documentation : "从 Blob 读取内容的唯一方法是使用 FileReader "。

我改编了你的fiddle ,但我只在 Chrome 53 中测试过它。

navigator.getUserMedia({ video: true, audio: false }, successCallback, function (err) { console.error('Error:', err, err.stack); })

function successCallback(stream) {
var recorder, source = new MediaSource()

var elem = createVideoElem()
elem.src = URL.createObjectURL(source)
source.addEventListener('sourceopen', sourceOpen)

function sourceOpen () {
var buffer = source.addSourceBuffer('video/webm;codecs=vp9')
recorder = new MediaRecorder(stream)
recorder.start(1000)

recorder.ondataavailable = function (e) {
var fileReader = new FileReader();
fileReader.onload = function() {
buffer.appendBuffer(fileReader.result);
};
fileReader.readAsArrayBuffer(e.data);
}
}
}

function createVideoElem () {
var elem = document.createElement('video')
elem.controls = true
elem.autoplay = true // for chrome
elem.play() // for firefox
document.body.appendChild(elem)
return elem
}

关于javascript - 将 getusermedia 数据附加到 mediasource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com