【发布时间】:2023-03-16 00:06:01
【问题描述】:
我不知道该怎么做。请建议如何分段下载大型视频文件并逐个播放所有部分。
实际上我必须在 Android VideoView 中流式传输 FTP 大文件。查了很多,发现android不支持FTP流。
因此,我尝试将文件分成多个部分下载并逐个播放。但问题是只有文件的第一部分播放,其他部分不播放。请提出建议。
分段下载文件的代码。
URL url = new URL(fileUrl);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5);
FileOutputStream outStream = new FileOutputStream(fileName);
byte[] buff = new byte[5 * 1024];
int len;
int maxLenth = 10000; //Some random value
int counter = 0;
//Read bytes (and store them) until there is nothing more to read(-1)
while ((len = inStream.read(buff)) != -1) {
outStream.write(buff, 0, len);
counter ++;
Log.d(TAG, "Counter: " + counter);
if(counter == maxLenth) {
counter = 0;
outStream.flush();
outStream.close();
fileName = new File(directory.getAbsolutePath() + "/"
+ context.getResources().getString(R.string.app_name) + "_"
+ System.currentTimeMillis() + "." + format);
fileName.createNewFile();
outStream = new FileOutputStream(fileName);
}
}
下载文件后,我尝试更新列表以在至少下载 1 个文件时播放视频。 listFiles 包含所有已下载文件的列表。
Uri uri = Uri.parse(listFiles.get(0));
videoView.setVideoURI(uri);
videoView.start();
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
counter ++;
if(counter < listFiles.size()) {
Uri uri = Uri.parse(listFiles.get(counter));
videoView.setVideoURI(uri);
videoView.start();
}
}
});
我不知道为什么文件 1 之后下载的文件无法播放。他们甚至在PC上也不玩。我不知道我做错了什么。
【问题讨论】:
-
您是否尝试在您的视频视图 setOnCompletionListener 上设置断点以查看它是否进入?
-
是的,它显示“无法播放此视频”
-
除第一个文件外,所有文件的类型是什么?它们是视频文件还是二进制文件?你是如何分离视频文件的?你的视频文件头怎么样?
-
所有文件的扩展名都是.mp4。请查看 while 循环以了解我是如何分离视频文件的,但它可能不会为我当前代码的最后一部分创建文件。我没有设置任何视频文件头。我只是在我的 FTP 服务器上尝试它,没有任何标题。
-
分割文件的方式,视频文件是手动分割的,扩展名为.mp4,但不是视频文件。您不能将二进制文件作为视频文件播放。
标签: java android ftp video-streaming multipart