pytube 在 Android 中传输视频所需的时间太长

2024-04-29

我在用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(使用前将#替换为@)

pytube 在 Android 中传输视频所需的时间太长 的相关文章

随机推荐