将本地视频文件转换为媒体流
convert local video file into media stream
我想尝试使用webRTC进行文件流传输。它与相机/micro-live(getUserMedia)完美配合,但当我试图给它一个预录制的视频文件时,我得到了这个答案:
Uncaught TypeError: Failed to execute 'addStream' on 'RTCPeerConnection': parameter 1 is not of type 'MediaStream'.
有没有一种简单的方法可以将RTCPeerConnection与选定的文件(如.getUserMedia())一起使用?
编辑:
以下是我获取文件的方法,但当我尝试使用RTCPeerConnection的addStream方法添加"localStream"时,它失败了。。。
var localVideo = document.createElement("video");
var remoteVideo = document.createElement("video");
function onchange( event ){
var file = this.files[0];
var type = file.type;
if( localVideo.canPlayType(type) ){
var localStream = window.URL.createObjectURL(file);
localVideo.src = localStream;
...
peer.addStream(localStream); // fail here
};
};
a)createObjectURL是邪恶的。在导航离开之前,您永远无法知道应用程序何时处理完资源。(和其他问题)使用video.srcObject(当前为video.mozSrcObject)
b) 仅仅因为视频元素可以使用流媒体文件的srcURL并不意味着其他任何东西都可以。AddStream采用的是MediaStreams,而不是URL。
工作组计划添加stream=video.captureStream(),但它甚至还没有被指定
更新:规范在这里:来自DOM元素的媒体捕获它在Firefox和Chrome 53及更高版本中实现(请参阅Sam Dutton的文章)
使用您需要的视频创建video
元素:
<video controls src="http://example.com/example.webm">
当播放此视频时,您可以检索MediaStream
对象,您可以将其重新用于RTCPeerConnection
:
const video = document.querySelector('video');
video.onplay = function() {
const stream = video.captureStream();
peer.addStream(stream);
};
这与audio
元素的工作方式相同。
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 将数字转换为一定数量的硬币
- 将纯文本URL转换为可单击链接
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何将TypeScript对象转换为普通对象
- 检测个位数整数时正在转换毫秒
- 从javascript到jquery的转换
- DOM事件通过JSON转换为java
- 正在为MSE(媒体源扩展)转换碎片mp4文件
- 将本地视频文件转换为媒体流
- 如何使用javascript将捕获的媒体文件转换为base64
- Javascript/jQuery-如何将媒体和图像数据转换为二进制文本格式