我正在尝试通过intent(默认媒体播放器)播放远程视频文件,但我还想在流式传输时将其保存在本地。我正在尝试使用代码将本地的蒸汽保存在一个工作正常的视频文件中。现在我想在流文件时立即开始我的意图但是当意图启动时我得到错误“Sorry this video can not be played
”。请注意,如果我在完成流式传输时将目标代码移动到此方法的末尾(当downloadedSize==totalSize
时),那么它工作正常但我想在同时进行流式传输时进行播放。有什么帮助吗?
public String DownloadVideo(String Url, String fileName)
{
String filepath=null;
try {
URL url = new URL(Url);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
File SDCardRoot = Environment.getExternalStorageDirectory();
File file = new File(SDCardRoot,fileName);
if(file.createNewFile())
{
file.createNewFile();
}
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
int totalSize = urlConnection.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[1024];
int bufferLength = 0; //used to store a temporary size of the buffer
int counter=0;
while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
fileOutput.write(buffer, 0, bufferLength);
if(downloadedSize>2048)
{
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse(file.getPath()),"video/*");
startActivity(i);
}
downloadedSize += bufferLength;
counter++;
}
fileOutput.close();
if(downloadedSize==totalSize) {
filepath=file.getPath();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
filepath=null;
e.printStackTrace();
}
return filepath;
}
答案 0 :(得分:0)
我认为问题出在这一行:
i.setDataAndType(Uri.parse(file.getPath()),"video/*");
您将本地文件传递给Intent,但那是尚未下载的文件。我认为您应该使用Url流式传输视频,并将内容存储在文件
中// Use the url of the remote location
i.setDataAndType(Uri.parse(Url),"video/*");
// Also, try to use lowercase for variables e.g. url vs Url
这样,您正在流式传输远程网址,并将内容保存到本地文件中。 我可能会误解代码,但我会先查看