我正在使用pytube和chaquopy的帮助在Android上流式传输视频。
videofile.py
from pytube import YouTube
def video(link):
yt = YouTube(f'https://www.youtube.com/watch?v=' + link)
stream_url = yt.streams.get_highest_resolution().url
return stream_url
VideoActivityPy.java
progressBar = findViewById(R.id.pro);
videoView = findViewById(R.id.videoview);
new Thread(() -> {
try {
if (!Python.isStarted()) {
Python.start(new AndroidPlatform(VideoActivityPy.this));
}
python = Python.getInstance();
pyScript = python.getModule("videofile");
videoUri = pyScript.callAttr("video", MyData.videoLink);
runOnUiThread(() -> {
videoView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Uri uri = Uri.parse(videoUri.toString());
videoView.setVideoURI(uri);
MediaController mediaController = new MediaController(VideoActivityPy.this);
mediaController.setAnchorView(videoView);
mediaController.setMediaPlayer(videoView);
videoView.setMediaController(mediaController);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
progressBar.setVisibility(View.INVISIBLE);
videoView.start();
}
});
});
}
catch (com.chaquo.python.PyException pyException) {
progressBar.setVisibility(View.INVISIBLE);
Toast.makeText(VideoActivityPy.this, "Check your internet connection", Toast.LENGTH_LONG).show();
}
catch (Exception e) {
progressBar.setVisibility(View.INVISIBLE);
Toast.makeText(VideoActivityPy.this, e.toString(), Toast.LENGTH_LONG).show();
}
}).start();
起初,我编写的代码没有使用Thread,但是应用程序没有响应。因此,我使用了Thread。现在应用程序可以工作,视频可以加载,但是启动视频需要大约40-50秒(尽管视频长度为1.5小时)。有没有办法缩短加载时间?
注意:我从PyPI下载了.tar.gz文件,更改了pytube的内置代码,然后编写了以下gradle:
python {
buildPython "C:/Python38/python.exe"
pip {
install "pytube-15.0.0.tar.gz"
}
}
我在 cipher.py 中修改了 var_regex