Танилцуулга богино байна: Би Android-д зориулсан YouTube онлайн тоглуулагчийн талаар орон нутгийн тоглуулах жагсаалт, суваг, зөвлөмжийн талаар ярихыг хүсч байна.
Өргөтгөсөн танилцуулга:
Хэсэг хугацааны өмнө би гайхалтай програм зохиогчтой яг ижил асуудалтай тулгарсан
Харамсалтай нь Channel Whitelist програмыг суулгасны дараа өөр нэг гайхалтай, гэхдээ үхлийн аюултай дутагдал илэрсэн - NIH I (мөн хамгийн чухал нь миний хүү) интерфэйс нь тийм ч тохиромжтой биш, ялангуяа YouTube Kids тоглуулагчийг ашиглах зуршилтай болсон.
Ерөнхийдөө хэсэг хугацааны дараа би өөрийнхөө хэрэгжилтийг хийхэд бэлэн болсон. Хэсэг хугацааны дараа анхны хувилбар дээр шошго тавих боломжтой болсон.
Гол давуу талууд:
- Дуртай суваг, тоглуулах жагсаалтаа нэмээрэй - тэдгээрийг дотоод мэдээллийн санд хадгалж, индексжүүлэх болно
- Нэмэгдсэн тоглуулах жагсаалт дотроос шаардлагагүй видеонуудыг хэрэггүй бол унтраа
- Зөвлөмжийн жагсаалтыг зөвхөн програмд нэмсэн суваг, тоглуулах жагсаалтаас санамсаргүй байдлаар үүсгэнэ
Нээлттэй эх сурвалж, GPLv3 лиценз:
Доорх нь үндсэн функцүүдийн тойм, мөн Google API болон вэб боодол ашиглахгүйгээр Android програм дээрээ YouTube-ийн видеог хэрхэн тоглуулах талаар техникийн зарим дэлгэрэнгүй мэдээллийг доор харуулав.
Үндсэн дэлгэц болон тоглуулагчийн дэлгэц дээр: санамсаргүй бус сувгуудын санамсаргүй зөвлөмжүүд
Орон нутгийн мэдээллийн санд шуурхай хайлт хийх
Шинэ суваг эсвэл тоглуулах жагсаалт нэмнэ үү
Онлайнаар нэрээр нь хайх эсвэл мэдэгдэж буй хаягийг оруулна уу. Суваг эсвэл тоглуулах жагсаалтын видеоны жагсаалтыг локал мэдээллийн санд хадгалсан бөгөөд дүрсийг кэшдээгүй.
Динамик тоглуулах жагсаалт - хайлтын үр дүнг тоглуулах
Видеоны зөвлөмжид зөвхөн хайлтын асуулгад нийцсэн видеонууд байх болно.
Үүний нэгэн адил, хэрэв та тоглуулах жагсаалтын тохиргооноос видеог нээвэл зөвлөмжийн жагсаалтад зөвхөн ижил тоглуулах жагсаалтын видеонууд гарч ирнэ.
Тоглуулах жагсаалт болон сувгийг түр унтрааж, дахин асаах боломжтой
Анхаарна уу: идэвхгүй тоглуулах жагсаалтын видеонууд хайлтын илэрц, үзсэн түүх болон дуртай жагсаалтаас алга болно. Гэхдээ санаа зовох хэрэггүй, тоглуулах жагсаалтыг дахин асаасан даруйд тэд тэнд дахин гарч ирэх болно.
Хар жагсаалтад видео нэмнэ үү
Хаагдсан видео нь зөвлөмж, хайлтын үр дүнд харагдахгүй бөгөөд дуртай зүйлсийн жагсаалт болон үзсэн түүхээс алга болно. Видео тоглуулах жагсаалтын тохиргоонд харагдсан хэвээр байх болно.
Хар жагсаалтыг харж, алдаагаар блоклосон зүйлсийг дахин идэвхжүүлнэ үү:
Тохиргоо > толгой цэс > Хар жагсаалт
Дуртай видео, үзсэн түүх
Тоглогчийн дэлгэц дээрх дуртай видеонууд баруун дээд буланд одоор тэмдэглэгдсэн байдаг.
Дэлгэцийн гарчиг дахь контекст цэс болон галерей болон жагсаалт дээр удаан дарна уу
Видео эсвэл тоглуулах жагсаалтын нэр, хаягийг үзэх дэлгэц эсвэл дурын жагсаалтад хуулна уу.
Хурдан эхлүүлэх - санал болгосон суваг болон тоглуулах жагсаалтыг нэмнэ үү
Аппликешн нь дээрх дэлгэцийн агшин шиг шууд харагдах болно.
Шаардлагагүй суваг, тоглуулах жагсаалтыг тохиргооноос унтрааж эсвэл устгаж болно.
тохиргоо
Төслийн хуудас:
Англи хэлэнд:
хувилбарууд:
- Энэ нь Google Play дээр байхгүй бөгөөд ойрын ирээдүйд байхгүй болно (Google нь API-г давж, вэбсайтаа задлан шинжилдэг програмуудыг хориглодог, үүнд дурдсан Channel Whitelist эсвэл NewPipe тоглуулагч орно)
- Эх сурвалжаас бүтээх:
https://github.com/sadr0b0t/yashlang/ - Хувилбарын хэсгээс apk татаж авах:
https://github.com/sadr0b0t/yashlang/releases - Хэсэг хугацааны дараа каталогт гарч ирнэ гэж найдаж байна
F-Droid (нэмэх хүсэлтийг зөвшөөрсөн бололтой , гэхдээ бараг нэг сарын турш цааш хөдөлсөнгүй), гэхдээ хараахан болоогүй байна
Нэг төхөөрөмж дээрх өөр өөр эх сурвалжаас өөр хувилбаруудын хооронд шилжих нь apk файлын өөр өөр гарын үсгийн улмаас ажиллахгүй гэдгийг санаарай; шинэ эх сурвалжаас хувилбарыг суулгахын өмнө та эхлээд суулгасан хувилбарыг өгөгдлийн хамт устгах хэрэгтэй болно. тоглуулах жагсаалтын кэш болон хайлтын түүх (эсвэл өгөгдлийг хэрхэн дамжуулах талаар олж мэдээрэй).
Техникийн дэлгэрэнгүй мэдээлэл
Google/YouTube бүртгэл шаардлагагүй, танд зөвхөн интернет хэрэгтэй, дараах сангуудыг ашигладаг.
NewPipeExtractor YouTube үйлчилгээнээс өгөгдөл хүлээн авах болонexoplayer видео тоглуулах.
Нээлттэй эх сурвалж, үнэгүй GPLv3 лиценз.
Асуулт: Зохиогчийн зөвшөөрөлгүйгээр (эсвэл тодорхой хориглосноор) вэбсайтуудыг хусах нь ерөнхийдөө хууль ёсны юу?
Хариулт: Мэдээжийн хэрэг, энэ нь хууль ёсны бөгөөд олон нийтэд нээлттэй мэдээллийг уншихын тулд ямар хэрэгслийг ашиглах нь танд хамаарна. Цаашлаад:
Зарим код
номын сан
Тоглуулах жагсаалтыг ачаалах код нь бага зэрэг төвөгтэй тул би энд өгөхгүй, сонирхсон хүмүүс эх кодыг хараарай, энэ нь үндсэндээ анги юм.
Нийтийн видео хуудасны хаягаас видео урсгалын хаягийг хэрхэн авч, тоглуулагч дээр тоглуулахыг харцгаая.
Номын санг холбоно уу
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}
Үүний дараа та үүнийг ашиглах боломжгүй хэвээр байгаа нь сонин байна, учир нь ... жишээ нь Downloader ангийн алга болсон талаар гомдоллох болно. Үүнийг автоматжуулсан тестийн лавлахаас төсөл рүү хуулж болно
YouTube вэбсайт дээрх видео хуудасны хаягаар видео урсгалын хаягийг авна уу:
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;
}
ytVidUrl видео хаяг нь YouTube вэбсайт дээрх аливаа видеоны хуудасны нийтийн хаяг байж болно, жишээлбэл
Тоглогч болно
Төсөлд номын санг холбоно уу
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}
Бид програмын дэлгэц дээр тоглуулагчийн бүрэлдэхүүн хэсгийг байрлуулах бүх нарийн ширийн зүйлийг авч үзэхгүй (та төслийн вэбсайт эсвэл код дээрх жишээг харж болно), бид зөвхөн YouTube-ээс видеог тоглуулагч дээр хэрхэн тоглуулж эхлэхийг л харах болно. дээр хүлээн авсан хаяг:
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);
}
}
Мэдэгдэж буй асуудлууд
- Таны Google/YouTube бүртгэлд нэвтрэх шаардлагатай насны хязгаарлалттай видеог тоглуулахгүй
Жишээ нь:
Зөвлөмж: ийм видеог хар жагсаалтад оруулах эсвэл видеоны зохиогчоос алдаа гаргасан хязгаарлалтыг арилгахыг хүс.
- Үйлчилгээ нь тэг уртыг буцаадаг зарим нэвтрүүлгийн видеог тоглуулахгүй (ийм видеонуудын жагсаалт болон галлерей дахь үргэлжлэх хугацааг “[dur undef]” гэж тэмдэглэсэн)
Жишээ нь:
зөвлөгөө: ийм видеог хар жагсаалтад нэмнэ үү.
- Зөвхөн шууд линкээр дамжуулан авах боломжтой видеог та хэрэглэгчийн бүх видеог татаж авсан ч гэсэн орон нутгийн тоглуулах жагсаалтад оруулахгүй байж болно.
Жишээ нь:
-
Хэрэв та нэвтэрч орох шаардлагагүй, хөтөч дээр тоглуулдаг боловч тоглуулагч дээр тоглуулдаггүй олон нийтийн видеотой таарвал алдааны тайланг илгээнэ үү (шинэ хувилбарт асуудал аль хэдийн засагдсан байж магадгүй юм. NewPipeExtractor мөн та зөвхөн энэ хувилбараар угсралтыг шинэчлэх хэрэгтэй болно.
Жишээ нь ). -
Интернет удаан (гэхдээ унтраагаагүй) бол интерфэйс удааширч магадгүй.
Үүний үр дүнд,
Миний хүү таблетаас Андройд програм ажиллуулах боломжгүй Samsung ухаалаг зурагт руу шилжсэн. Тиймээс эцэг эхийн хамгийн сайн хяналт бол хувь хүн хэвээр байна.
Гэхдээ энэ програм нь надад үүнийг өөрөө ашиглаж эхлэхэд тохиромжтой байсан. Анхны ажлын хувилбаруудаас надад төрсөн анхны сэтгэгдэл бол би өөр ертөнцөд байсан юм. Бүх контентыг YouTube-ээс татаж авдаг, гэхдээ энэ нь YouTube байхаа больсон, харин нүднээсээ зуун настыг аваад шилэн саванд хийж байгаа мэт аюулгүй, хяналттай өөр зүйл юм. Мөн энэ бүхэн зөвлөмжийн тухай юм.
Эх сурвалж: www.habr.com