Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Phần giới thiệu ngắn gọn: Tôi muốn nói về trình phát trực tuyến YouTube dành cho Android với các danh sách phát, kênh và đề xuất địa phương.

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Giới thiệu mở rộng:
Cách đây một thời gian, tôi đã gặp phải vấn đề tương tự như tác giả của một ứng dụng tuyệt vời Danh sách trắng của kênh, và xác định cho bản thân mình chính xác thái độ tương tự đối với nó: Thỉnh thoảng tôi muốn có thể đưa cho con tôi một chiếc máy tính bảng hoặc điện thoại thông minh có phim hoạt hình, nhưng tôi không hài lòng chút nào với danh sách ở đâu, sau 2-3 lần nhấp chuột đề xuất trong các ứng dụng tiêu chuẩn - ứng dụng khách YouTube - đưa trẻ đi.

Thật không may, sau khi cài đặt ứng dụng Channel Whitelist, một lỗ hổng khác tầm thường hơn nhưng vẫn nghiêm trọng đã được phát hiện - NIH Tôi (và quan trọng nhất là con trai tôi) nhận thấy giao diện của nó không mấy tiện lợi, đặc biệt là sau thói quen sử dụng trình phát YouTube Kids.

Nói chung, sau một thời gian, tôi đã sẵn sàng tự thực hiện. Sau một thời gian, có thể gắn thẻ vào lần phát hành đầu tiên.

HÃY TÌM HIỂU:

  • Thêm các kênh và danh sách phát yêu thích của bạn - chúng sẽ được lưu và lập chỉ mục trong cơ sở dữ liệu cục bộ
  • Trong danh sách phát đã thêm, hãy tắt những video không cần thiết nếu bạn không cần
  • Danh sách đề xuất chỉ được tạo ngẫu nhiên từ các kênh và danh sách phát được thêm vào ứng dụng

Nguồn mở, giấy phép GPLv3: https://github.com/sadr0b0t/yashlang/

Dưới đây là tổng quan chi tiết hơn về các tính năng chính cùng với một số chi tiết kỹ thuật về cách phát video YouTube trong ứng dụng Android của bạn mà không cần sử dụng API Google và trình bao bọc web.

Trên màn hình chính và trên màn hình trình phát: đề xuất ngẫu nhiên từ các kênh không ngẫu nhiên

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Tìm kiếm tức thì trong cơ sở dữ liệu cục bộ

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) => Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Thêm kênh hoặc danh sách phát mới

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Tìm kiếm theo tên trực tuyến hoặc chèn một địa chỉ đã biết. Danh sách video của kênh hoặc danh sách phát được lưu vào cơ sở dữ liệu cục bộ; các biểu tượng không được lưu vào bộ nhớ đệm.

Danh sách phát động - phát kết quả tìm kiếm

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) => Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Trong phần đề xuất video sẽ chỉ có những video thỏa mãn truy vấn tìm kiếm.

Tương tự, nếu bạn mở một video từ cài đặt danh sách phát thì chỉ những video từ cùng danh sách phát đó mới xuất hiện trong danh sách đề xuất.

Danh sách phát và kênh có thể được tắt và bật lại tạm thời

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Xin lưu ý: video từ danh sách phát bị vô hiệu hóa cũng sẽ biến mất khỏi kết quả tìm kiếm, lịch sử xem và khỏi danh sách yêu thích. Nhưng đừng lo lắng, chúng sẽ xuất hiện lại ở đó ngay sau khi bật lại danh sách phát.

Thêm video vào danh sách đen

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Video bị chặn sẽ không hiển thị trong đề xuất, trong kết quả tìm kiếm và sẽ biến mất khỏi danh sách yêu thích cũng như lịch sử xem. Video sẽ vẫn hiển thị trong cài đặt danh sách phát.

Xem danh sách đen và kích hoạt lại các mục bị chặn do nhầm lẫn:
Cài đặt > menu tiêu đề > Danh sách đen

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Video yêu thích và lịch sử xem

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Các video yêu thích trên màn hình trình phát được đánh dấu bằng dấu hoa thị ở góc trên bên phải.

Menu ngữ cảnh trong tiêu đề màn hình và nhấp chuột dài vào thư viện và danh sách

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Sao chép tên hoặc địa chỉ của video hoặc danh sách phát trên màn hình xem hoặc trong bất kỳ danh sách nào.

Bắt đầu nhanh - thêm các kênh và danh sách phát được đề xuất

Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?) => Cái chết của Koshchei nằm trong danh sách khuyến nghị (có thể làm YouTube ấm cúng và an toàn không?)

Ứng dụng sẽ ngay lập tức trông giống như ảnh chụp màn hình ở trên.

Các kênh và danh sách phát không cần thiết có thể bị tắt hoặc xóa trong cài đặt.

Cài đặt

Đơn vị vận chuyển: https://github.com/sadr0b0t/yashlang/
bằng tiếng Anh: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
phát hành: https://github.com/sadr0b0t/yashlang/releases

Hãy nhớ rằng việc chuyển đổi giữa các phiên bản khác nhau từ các nguồn khác nhau trên cùng một thiết bị sẽ không hoạt động do chữ ký khác nhau của tệp apk; trước khi cài đặt phiên bản từ nguồn mới, trước tiên bạn sẽ phải xóa phiên bản đã cài đặt cùng với dữ liệu - bộ nhớ đệm của danh sách phát và lịch sử duyệt web (hoặc tìm ra cách truyền dữ liệu).

Chi tiết kỹ thuật

Không yêu cầu tài khoản Google/YouTube, bạn chỉ cần có Internet, sử dụng các thư viện sau:

Mã nguồn mở, giấy phép GPLv3 miễn phí.

câu hỏi: Việc thu thập các trang web mà không có sự cho phép (hoặc có lệnh cấm rõ ràng) từ các tác giả có hợp pháp không? Google xóa ứng dụng khỏi Google Play, không sử dụng API của họ nhưng phân tích trang web của họ, bởi vì họ vi phạm thỏa thuận người dùng của họ.
câu trả lời: tất nhiên, điều đó hợp pháp, việc sử dụng công cụ nào để đọc thông tin công khai là tùy thuộc vào bạn. Hơn nữa: Một tòa án Hoa Kỳ đã hợp pháp hóa hoàn toàn việc thu thập dữ liệu trang web và cấm can thiệp kỹ thuật vào nó.Nhưng Gul có thể có quan điểm khác, cá nhân tôi vẫn chưa có ý định ra tòa án Mỹ để thuyết phục họ.

Một số mã

Thư viện Máy vắt ống mới - dự án hỗ trợ người chơi NewPipe, cho phép bạn tải xuống danh sách video cho một kênh hoặc danh sách phát cụ thể, tải xuống thông tin chi tiết về một video nổi tiếng (nội dung hiển thị trên trang web của video), lấy địa chỉ của biểu tượng video và cũng lấy địa chỉ của video suối.

Code tải danh sách phát hơi rắc rối nên mình sẽ không đưa ra đây, bạn nào quan tâm thì xem mã nguồn nhé, cơ bản nó là một lớp Trình tải nội dung.

Hãy xem cách lấy địa chỉ của luồng video từ địa chỉ của trang video công khai và phát nó trong trình phát.

Kết nối thư viện với
app / build.gradle

dependencies {
...
    // NewPipe: youtube parser
    // https://github.com/TeamNewPipe/NewPipeExtractor
    implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}

Thật tò mò rằng sau này bạn vẫn không thể sử dụng nó, bởi vì... ví dụ sẽ phàn nàn về lớp Downloader bị thiếu. Nó có thể được sao chép vào dự án từ thư mục kiểm tra tự động NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - hoạt động cho phiên bản 0.17.4 (có vẻ như phần này đã được làm lại trong phiên bản mới hơn của thư viện, nhưng chúng tôi vẫn cần kiểm tra lại).

Lấy địa chỉ luồng video theo địa chỉ trang video trên website Youtube:

app/src/main/java/su/sadrobot/yashlang/controller/ContentLoader.java

    public String extractYtStreamUrl(final String ytVidUrl) throws ExtractionException, IOException {
        // https://github.com/TeamNewPipe/NewPipeExtractor/blob/dev/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractorDefaultTest.java
        NewPipe.init(Downloader.getInstance(), new Localization("GB", "en"));
        final YoutubeStreamExtractor extractor = (YoutubeStreamExtractor) YouTube
                .getStreamExtractor(ytVidUrl);
        extractor.fetchPage();
        final String streamUrl = extractor.getVideoStreams().size() > 0 ? extractor.getVideoStreams().get(0).getUrl() : null;
//        for (final VideoStream stream : extractor.getVideoStreams()) {
//            stream.getUrl();
//        }
        return streamUrl;
    }

Ví dụ: địa chỉ video ytVidUrl có thể là địa chỉ công khai của trang của bất kỳ video nào trên trang web YouTube https://www.youtube.com/watch?v=pd2RlatmNRk

Người chơi sẽ người ngoài cuộc từ chính Google. Đây không phải là trình bao bọc web trên YouTube mà là một trình phát được nhúng thực sự để phát bất kỳ video nào, khá linh hoạt và có thể tùy chỉnh. Nó cũng có thể phát các luồng video từ YouTube nếu bạn cung cấp địa chỉ chính xác. Chúng ta vừa nhận được địa chỉ luồng, vậy hãy xem cách gửi nó đến người chơi.

Kết nối thư viện với dự án app / build.gradle:

dependencies {
...
    // google Exoplayer
    // https://github.com/google/ExoPlayer
    // https://exoplayer.dev/
    implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}

Chúng tôi sẽ không xem xét tất cả các sắc thái của việc đặt thành phần trình phát trên màn hình ứng dụng (bạn có thể xem ví dụ trên trang web của dự án hoặc trong mã), chúng tôi sẽ chỉ xem cách bắt đầu phát video từ YouTube trong trình phát tại địa chỉ nhận được ở trên:

app/src/main/java/su/sadrobot/yashlang/WatchVideoActivity.java

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // остановить проигрывание текущего ролика, если был загружен
        videoPlayerView.getPlayer().stop(true);
    } else {
        // https://exoplayer.dev/
        // https://github.com/google/ExoPlayer

        final Uri mp4VideoUri = Uri.parse(streamUrl);
        final MediaSource videoSource = new ProgressiveMediaSource.Factory(videoDataSourceFactory)
                .createMediaSource(mp4VideoUri);

        // Поставим на паузу старое видео, пока готовим новое
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Если ставить на паузу здесь после того, как плеер встал на паузу сам, закончив
            // играть видео, получим здесь второе событие STATE_ENDED, поэтому нам нужна здесь
            // специальная проверка.
            // При этом значение getPlayWhenReady() останется true, поэтому проверяем именно состояние.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Prepare the player with the source.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Укажем текущую позицию сразу при загрузке видео
        // (в коментах что-то пишут что-то про датасорсы, которые поддерживают или не поддерживают
        // переходы seek при загрузке, похоже, что это фигня - просто делаем seek сразу после загрузки)
        // Exoplayer plays new Playlist from the beginning instead of provided position
        // https://github.com/google/ExoPlayer/issues/4375
        // How to load stream in the desired position? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // в этом месте нормлаьный duration еще не доступен, поэтому его не проверяем
        //if(seekTo > 0 && seekTo < videoPlayerView.getPlayer().getDuration()) {
        if (seekTo > 0) {
            // на 5 секунд раньше
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Các vấn đề đã biết

  • Sẽ không phát video có giới hạn độ tuổi yêu cầu đăng nhập vào tài khoản Google/YouTube của bạn

ví dụ: Ilya Muromets, Mối quan tâm của điện ảnh Mosfilm, Phim Ruslan và Lyudmila 1, Mosfilm Film Concern

lời khuyên: hãy thêm những video đó vào danh sách đen hoặc yêu cầu tác giả của video gỡ bỏ hạn chế do nhầm lẫn đặt ra.

  • Một số video phát sóng mà dịch vụ trả về độ dài bằng XNUMX sẽ không phát (đối với những video như vậy, thời lượng trong danh sách và thư viện được đánh dấu là “[dur undef]”)

ví dụ: Đợi đã! Tất cả các số phát hành của Soyuzmultfilm HD (Phim hoạt hình dành cho trẻ em), Phim hoạt hình của hãng phim Soyuzmultfilm, Phim hoạt hình hay nhất Soyuzmultfilm, Phim hoạt hình từ hãng phim Soyuzmultfilm

lời khuyên: thêm những video như vậy vào danh sách đen.

  • Những video chỉ khả dụng thông qua liên kết trực tiếp có thể không được đưa vào danh sách phát cục bộ, ngay cả khi bạn tải xuống tất cả video của người dùng

ví dụ: Thuần hóa lửa Tập 1, Mối quan tâm của rạp chiếu phim Mosfilm

  • Nếu bạn gặp một video công khai không yêu cầu đăng nhập, phát trên trình duyệt nhưng không phát trong trình phát, hãy gửi báo cáo lỗi (rất có thể sự cố đã được khắc phục trong phiên bản mới Máy vắt ống mới và bạn sẽ chỉ cần cập nhật hội với phiên bản này, ví dụ).

  • Giao diện có thể bị chậm nếu Internet chậm (nhưng chưa tắt)

Như một kết quả,

Con trai tôi chuyển từ máy tính bảng sang TV thông minh Samsung, không chạy được ứng dụng Android. Vì vậy, sự kiểm soát tốt nhất của cha mẹ vẫn là cá nhân.

Nhưng hóa ra ứng dụng này lại đủ tiện lợi để tôi bắt đầu sử dụng nó. Ấn tượng đầu tiên từ những phiên bản làm việc đầu tiên là tôi đang ở một thế giới khác. Tất cả nội dung đều được tải xuống từ YouTube, nhưng đây không còn là YouTube nữa mà là một thứ khác, an toàn và được kiểm soát, giống như thể bạn lấy một con rết ra khỏi mắt và cho nó vào lọ thủy tinh. Và đó là tất cả về các khuyến nghị.

Nguồn: www.habr.com

Thêm một lời nhận xét