我想将用java编写的服务器中的视频文件发送到Web浏览器客户端。 套接字连接工作正常,我发送文本没有问题。 我用来创建套接字服务器的库是https://github.com/TooTallNate/Java-WebSocket
这是发送文件的代码
public void sendFile(WebSocket conn,String path)
{
try
{
File file = new File(path);
byte[] data = new byte[(int)file.length()];
DataInputStream stream = new DataInputStream(new FileInputStream(file));
stream.readFully(data);
stream.close();
conn.send(data);
..snip catch statements..
这是我用于捕获文件的JavaScript代码
function connect()
{
conn = new WebSocket('ws://localhost:8887');
conn.onopen = function(){alert("Connection Open");};
conn.onmessage = function(evt){if(evt.data instanceof Blob){readFile(evt);}else{alert(evt.data);}};
conn.onclose = function(){alert('connection closed');};
}
function readFile(file_data)
{
var video = document.getElementById('area');
video.src = window.URL.createObjectURL(file_data.data);
}
..skip to html element for playing the file..
<video id='area' controls="controls"></video>
我希望能够在浏览器中接收该文件并进行播放。
尝试将webm视频文件发送到fireox时出现的错误是: 不支持“application / octet-stream”的HTTP“Content-Type”。媒体资源blob的加载:794345a5-4b6d-4585-b92b-3acb51612a6c失败。
是否可以从websocket接收视频文件并播放它? 我实施了什么错误吗?
答案 0 :(得分:1)
视频元素需要正确的内容类型,因为Blob带有通用内容类型,而且(对我来说)似乎没有办法将它设置为服务器端或客户端。
幸运的是,Blob有slice(start, end, contentType)方法:
var rightBlob = originalBlob.slice(0, originalBlob.size, 'video/webm')