我正在使用可以播放一些视频的离子应用程序(例如混合动力系统)。我想在请求中添加一些标头,以便覆盖“ shouldInterceptRequest”。
URL myUrl = new URL(real);
HttpURLConnection connection = (HttpURLConnection) myUrl.openConnection();
for (Map.Entry < String, String > entry: headers.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
InputStream in = connection.getInputStream();
WebResourceResponse response = new WebResourceResponse("video/mp4", "UTF-8", in );
for (Map.Entry < String, List < String >> entry: connection.getHeaderFields().entrySet()) {
resHeaders.put(entry.getKey(), entry.getValue().get(0));
}
此代码无效。html中的video标签无法播放视频。 所以我添加了一些代码。
byte[] bytes = new byte[30 * 1024 * 1024];
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int len = 0;
while ((len = in.read(bytes)) != -1) {
byteBuffer.write(bytes, 0, len);
}
bytes = byteBuffer.toByteArray();
WebResourceResponse response = new WebResourceResponse("video/mp4", "UTF-8", new ByteArrayInputStream(bytes));
当我将输入流读取为字节并将字节发送到WebResourceResponse时,可以播放视频。但是,这意味着如果视频很大,我的应用程序将使用大量内存。
因此,我想知道有什么方法可以在不将输入流保存为字节的情况下播放视频。
答案 0 :(得分:0)
好的,我终于找到了方向。
实际上,我的目标是向资源请求中添加自定义标头,现在我发现有一种更简单的方法。
例如,如果要加载图像,则将使用<img src="the_url_of_image">
这样的img标签,除非我接受请求,否则无法向请求添加任何标头。
但是,我们现在可以使用blob
。我们可以使用ajax之类的东西来请求资源,并使用createObjectURL
创建指向该资源的网址链接。