我在用pytube在 Android 中流式传输视频,借助chaquopy.
视频文件.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的情况下编写了代码,但是应用程序没有响应。所以,我使用了线程。现在应用程序可以运行,视频可以加载,但启动视频需要大约 40-50 秒(尽管视频时长为 1.5 小时)。有什么办法可以减少加载时间吗?
注:我已经下载了.tar.gz文件来自PyPI,更改了pytube的内置代码,然后编写gradle如下:
python {
buildPython "C:/Python38/python.exe"
pip {
install "pytube-15.0.0.tar.gz"
}
}
我改变了var_正则表达式 in 密码.py
看起来您的代码有两个阶段:
- 使用 pytube 获取 URL
- 从 URL 流式传输到
videoView
(pytube和Python不涉及)
无法猜测其中哪一个导致了延迟,因此请尝试添加一些Log https://developer.android.com/reference/android/util/Log代码中的语句(或在 Python 中,print
声明)。然后日志中的时间戳将显示哪些行花费了最多时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)