- 44
- 0
视频文件使用的是MDN的例子的视频,所以不会存在ffmep4问题
后端通过node createReadStream读取视频文件流,通过pipe输出响应。
前端vue框架,主要参考了[MDN的例子],(https://developer.mozilla.org...
拿到后端返回之后转为arraybuffer类型
getvideosource () {
let cid = this.$route.query.chapterId
let path = 'http://localhost:3000/api/chapter/learning/video'
let mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'
// let video = this.$refs.v1
let video = document.getElementById('v1')
let mediaSource
let that = this
if('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) {
console.log('MediaSource')
mediaSource = new MediaSource()
video.src = URL.createObjectURL(mediaSource)
mediaSource.addEventListener('sourceopen',sourceOpen.bind(this))
} else{
console.error('Unsupported MIME type or codec:',mimeCodec)
}
function sourceOpen () {
console.log('has opened')
URL.revokeObjectURL(video.src)
let sourceBuffer = mediaSource.addSourceBuffer(mimeCodec)
fetchAB(path,sourceBuffer)
}
function fetchAB (url,sourceBuffer) {
axios.get(url).then((result)=>{
console.log(Object.prototype.toString.call(result.data));
// console.log(result.data);
// let data = new Blob([result.data],{type: 'application/octet-stream'})
// console.log(Object.prototype.toString.call(data));
// console.log(data);
// var reader = new FileReader();
// reader.onload = function() {
// console.log(this.result);
// }
// reader.readAsArrayBuffer(blob);
function toArrayBuffer(buf) {
var ab = new ArrayBuffer(buf.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return ab;
}
let r = toArrayBuffer(result.data)
console.log(Object.prototype.toString.call(r))
sourceBuffer.addEventListener('updateend', function () {
console.log(mediaSource.readyState);
console.log(sourceBuffer)
console.log(mediaSource);
mediaSource.endOfStream()
})
sourceBuffer.appendBuffer(r)
})
}
},
以上是全部的代码。
这个函数在mounted内调用
浏览器运行会在mediaSource.endOfStream()处报错
Failed to execute 'endOfStream' on 'MediaSource': The MediaSource's readyState is not 'open'.
有大佬知道这是怎么回事吗???
- 共 0 条
- 全部回答
-
寸渊 普通会员 1楼
在Vue中,我们可以使用MediaSource API来获取视频流并播放。以下是一个基本的示例:
```html
```
在这个示例中,
<video>元素用于创建一个视频播放器,controls属性用于显示播放控制条。<source>元素用于指定视频文件的URL。type属性用于指定文件的类型。如果你想在Vue中播放视频,你需要提供一个播放API,比如
videojs。你可以通过以下方式使用videojs:```javascript import videojs from 'videojs';
new videojs('video', { controls: true, loop: true, autoplay: true, video: document.querySelector('video') }).play(); ```
在这个示例中,
video元素是播放器的元素。controls: true和loop: true用于启用播放控制和循环播放。autoplay: true用于自动播放视频。video: document.querySelector('video')用于获取视频元素。注意,
videojs是一个库,它提供了更多的功能,如视频编码和解码,以及更高级的播放控制。如果你只是想在Vue中播放视频,那么上述代码应该就足够了。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
