将 getusermedia 数据附加到媒体源
Appending getusermedia data to mediasource
我对媒体流和媒体源API的经验有限,您认为从getusermedia获取数据然后将该数据附加到媒体源的最佳方法是什么。现在我正在使用媒体记录器来记录数据,然后将其附加到新的媒体源对象上。但它只是返回一个空白视频。这是我目前正在做的事情。
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)
但我想处理原始数据。有没有可能这样做。这是一个小提琴,所以你可以玩它。
我有一个类似的问题,这个答案对我有用。
我想问题是MediaRecorder API返回了一个Blob,但需要一个ArrayBuffer。根据MDN文档:"从Blob读取内容的唯一方法是使用FileReader"。
我改编了你的小提琴,但我只在 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
}
这是我的工作演示。 甚至我也在为这个 MIMETYPE 苦苦挣扎了很多天,终于我的代码可以工作了演示
var mediasource = new MediaSource(),video = document.querySelector("video"),
mime = 'video/webm;codecs=vp9,opus'
video.src = URL.createObjectURL(mediasource)
mediasource.addEventListener("sourceopen",function(_){
var source = mediasource.addSourceBuffer(mime)
navigator.mediaDevices.getUserMedia({video: true,audio: true}).then(stream=>{
var recorder = new MediaRecorder(stream,{mimeType:mime})
recorder.ondataavailable = d =>{
var r = new Response(d.data).arrayBuffer() // convert blob to arraybuffer
r.then(arraybuffer=>{
source.appendBuffer(arraybuffer)
})
}
recorder.start(5000)
})
})
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 触发媒体查询断点时刷新页面
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 媒体查询/matchMedia上的脚本
- 使用按钮和媒体查询切换显示状态
- 如何在没有插件和Wordpress的情况下创建共享社交媒体
- 从新的WordPress媒体上传程序获取JS回调
- 加载dom后禁用媒体查询
- 如何制作大的自定义社交媒体按钮
- 将语句与jquery相结合,并使用媒体查询来实现返回页首按钮
- 415(不支持的媒体类型)错误
- 角度媒体播放器和动态内容
- 使用navigator.getUserMedia(Javascript)访问移动麦克风
- 从媒体源源缓冲区动态附加和删除mpeg短划线段
- jPlayer播放两个媒体文件
- 媒体查询与Javascript相结合
- 访问CSS媒体查询中的屏幕宽度和高度
- 如何显示显示的html元素:在特定的媒体屏幕上没有
- getUserMedia锁定焦点/曝光
- 将 getusermedia 数据附加到媒体源