pytube在Android上流式传输视频太慢了。

4
我正在使用pytubechaquopy的帮助在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

1个回答

0

看起来你的代码有两个阶段:

  • 使用 pytube 获取 URL
  • 从 URL 流式传输到 videoView(不涉及 pytube 和 Python)

无法猜测哪一个导致了延迟,因此尝试在代码中添加一些 {{link1:Log}} 语句(或者在 Python 中使用 print 语句)。然后日志中的时间戳将显示哪些行花费了最多的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接