我正在尝试使用他们网站上提供的youtubeinmp3 api下载YouTube视频,但问题是当我尝试转换已经不在其库中的歌曲时(意味着它还没有之前已转换),该网站将开始将此歌曲转换为.mp3格式。
现在我的HTTPUrlConnection正在发生的事情是,如果下载链接已经在网站上,因为它已经被缓存,那么它运行得很好但是如果网站必须执行转换,它会在没有等待转换的情况下运行 - 意思是我得到一个错误。
这是我目前所拥有的:
URL link = new URL("http://YouTubeInMP3.com/fetch/?video=http://www.youtube.com/watch?v=JbjtL7P9eI0&autostart=1");
InputStream in = new BufferedInputStream(link.openStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
HttpURLConnection httpConnection = (HttpURLConnection) (new URL("http://YouTubeInMP3.com/fetch/?video=http://www.youtube.com/watch?v=JbjtL7P9eI0&autostart=1").openConnection());
System.out.println(HttpURLConnection.HTTP_OK);
long completeFileSize = httpConnection.getContentLength();
long downloadedFileSize = 0;
//int currentProgress = 0;
while (-1!=(n=in.read(buf)))
{
out.write(buf, 0, n);
downloadedFileSize += n;
final int currentProgress= (int) (downloadedFileSize * 100 / completeFileSize);
System.out.println("current progress: "+currentProgress);
}
System.out.println("Finished");
out.close();
in.close();
byte[] response = out.toByteArray();
FileOutputStream fos = new FileOutputStream("/Users/stephen/Desktop/test.mp3");
fos.write(response);
fos.close();
我想的是找到一种方法来停止我的程序的执行,或者只要网站没有完成加载就让它在while循环中运行。有没有办法做到这一点?
答案 0 :(得分:0)
您打开连接两次 - 一次用于获取流,一次用于内容长度。如果你必须这样做,你应该接受-1作为正确的价值含义:不知道。
在这种情况下,只需跳过进度百分比并进行下载直到完成。
我建议仅使用1个HttpUrlConnection - 而不是两个