ProHoster > وبلاگ > اخبار اینترنتی > مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)
مرگ کوشچی در لیست توصیه ها قرار دارد (آیا می توان یوتیوب را دنج و ایمن کرد؟)
مقدمه کوتاه است: میخواهم درباره پخشکننده آنلاین YouTube برای اندروید با لیستهای پخش، کانالها و توصیههای محلی صحبت کنم.
مقدمه گسترده:
چند وقت پیش دقیقاً با همان مشکل نویسنده یک برنامه فوق العاده روبرو شدم لیست سفید کانالو دقیقاً همان نگرش را نسبت به آن برای خودم تعیین کردم: من می خواهم هر از گاهی یک تبلت یا تلفن هوشمند با کارتونی به فرزندم بدهم، اما اصلاً از جایی که پس از 2-3 کلیک، لیست را مشاهده می کنم، راضی نیستم. توصیه ها در برنامه های استاندارد - مشتریان YouTube - کودک را می گیرد.
متأسفانه، پس از نصب برنامه Channel Whitelist، یک نقص معمولی تر، اما همچنان کشنده دیگر کشف شد - NIH I (و مهمتر از همه، پسرم) رابط آن را بسیار راحت یافت، به خصوص پس از عادت به استفاده از پخش کننده YouTube Kids.
به طور کلی، پس از مدتی من آماده بودم تا پیاده سازی خود را انجام دهم. پس از مدتی امکان گذاشتن برچسب در اولین نسخه وجود داشت.
ویژگی های کلیدی:
کانال ها و لیست های پخش مورد علاقه خود را اضافه کنید - آنها در پایگاه داده محلی ذخیره و نمایه می شوند
در فهرستهای پخش اضافهشده، اگر به ویدیوهای غیرضروری نیاز ندارید، آنها را خاموش کنید
لیست توصیه ها فقط از کانال ها و لیست های پخش اضافه شده به برنامه به صورت تصادفی ایجاد می شود
در زیر مروری بر ویژگیهای اصلی با جزئیات بیشتر، بهعلاوه برخی جزئیات فنی در مورد نحوه پخش ویدیوهای YouTube در برنامه Android خود بدون استفاده از Google API و بستههای وب ارائه شده است.
در صفحه اصلی و در صفحه پخش کننده: توصیه های تصادفی از کانال های غیر تصادفی
جستجوی فوری در پایگاه داده محلی
=>
یک کانال یا لیست پخش جدید اضافه کنید
با نام آنلاین جستجو کنید یا یک آدرس شناخته شده وارد کنید. لیست ویدیوهای یک کانال یا لیست پخش در پایگاه داده محلی ذخیره می شود؛ نمادها در حافظه پنهان ذخیره نمی شوند.
لیست پخش پویا - نتایج جستجو را پخش کنید
=>
در توصیه های ویدیویی فقط ویدیوهایی وجود خواهند داشت که عبارت جستجو را برآورده می کنند.
به همین ترتیب، اگر ویدیویی را از تنظیمات لیست پخش باز کنید، فقط ویدیوهای همان لیست پخش در لیست توصیهها ظاهر میشوند.
لیست های پخش و کانال ها را می توان به طور موقت خاموش و دوباره روشن کرد
لطفاً توجه داشته باشید: ویدیوهای یک لیست پخش غیرفعال نیز از نتایج جستجو، سابقه مشاهده و از لیست علاقه مندی ها ناپدید می شوند. اما نگران نباشید، بلافاصله پس از روشن شدن مجدد لیست پخش، دوباره در آنجا ظاهر می شوند.
یک ویدیو به لیست سیاه اضافه کنید
یک ویدیوی مسدود شده در توصیهها، در نتایج جستجو نمایش داده نمیشود و از فهرست موارد دلخواه و سابقه مشاهده ناپدید میشود. ویدیو همچنان در تنظیمات لیست پخش قابل مشاهده خواهد بود.
مشاهده لیست سیاه و فعال کردن مجدد موارد مسدود شده به اشتباه: تنظیمات > منوی سرصفحه > لیست سیاه
فیلم های مورد علاقه و سابقه مشاهده
ویدیوهای مورد علاقه در صفحه پخش کننده با یک ستاره در گوشه سمت راست بالا مشخص شده اند.
منوهای زمینه در عنوان صفحه و روی گالری ها و لیست ها طولانی کلیک کنید
نام یا آدرس یک ویدیو یا لیست پخش را در صفحه نمایش یا در هر لیستی کپی کنید.
شروع سریع - کانال ها و لیست های پخش توصیه شده را اضافه کنید
=>
برنامه بلافاصله مانند تصاویر بالا خواهد بود.
کانال ها و لیست های پخش غیر ضروری را می توان در تنظیمات خاموش یا حذف کرد.
در Google Play نیست و در آینده نزدیک نیز نخواهد بود (Google برنامههایی را که API را دور زده و وبسایت آنها را تجزیه میکنند، از جمله فهرست سفید کانال ذکر شده یا پخشکننده NewPipe ممنوع میکند)
به خاطر داشته باشید که جابجایی بین نسخه های مختلف از منابع مختلف در یک دستگاه به دلیل امضای متفاوت فایل apk کار نخواهد کرد؛ قبل از نصب نسخه از منبع جدید، ابتدا باید نسخه نصب شده را به همراه داده ها حذف کنید - حافظه پنهان لیست پخش و تاریخچه مرور (یا نحوه انتقال داده را بفهمید).
جزییات فنی
به حساب Google/YouTube نیاز ندارد، فقط به اینترنت نیاز دارید، از کتابخانه های زیر استفاده می کند:
سوال: آیا به طور کلی خراش دادن وب سایت ها بدون اجازه (یا با ممنوعیت صریح) از نویسندگان قانونی است؟ گوگل اپلیکیشن ها را از گوگل پلی حذف می کند، که از API خود استفاده نمی کنند، اما سایت های خود را تجزیه می کنند، زیرا آنها قرارداد کاربر خود را نقض می کنند. پاسخ: البته، قانونی است، این به شما بستگی دارد که از چه ابزاری برای خواندن اطلاعات در دسترس عموم استفاده کنید. علاوه بر این: یک دادگاه آمریکایی خراش دادن وب سایت را کاملا قانونی کرده و تداخل فنی با آن را ممنوع کرده است.اما گل ممکن است نظر دیگری داشته باشد؛ من شخصاً هنوز تمایلی به مراجعه به دادگاه آمریکایی برای متقاعد کردن آنها ندارم.
مقداری کد
کتابخانه NewPipeExtractor - پروژه پشتیبانی بازیکن لوله جدید، به شما امکان می دهد لیستی از ویدیوها را برای یک کانال یا لیست پخش مشخص دانلود کنید، اطلاعات دقیق یک ویدیوی معروف را دانلود کنید (آنچه در صفحه وب ویدیو قابل مشاهده است)، آدرس نماد ویدیو را دریافت کنید و همچنین آدرس ویدیو را دریافت کنید. جریان
کد برای بارگیری لیست پخش کمی دست و پا گیر است، بنابراین من آن را در اینجا نمی دهم، برای علاقه مندان، نگاهی به کد منبع بیندازید، این اساسا یک کلاس است ContentLoader.
بیایید ببینیم چگونه می توان آدرس یک جریان ویدئو را از آدرس صفحه ویدیوی عمومی دریافت کرد و آن را در پخش کننده پخش کرد.
جالب است که پس از این هنوز نمی توانید از آن استفاده کنید، زیرا ... نمونه ها در مورد کلاس دانلودر از دست رفته شکایت خواهند کرد. می توان آن را از دایرکتوری تست های خودکار در پروژه کپی کرد NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java - برای نسخه 0.17.4 کار می کند (به نظر می رسد که این قسمت در نسخه جدیدتر کتابخانه دوباره ساخته شده است، اما هنوز باید بررسی کنیم).
آدرس پخش ویدیو را با آدرس صفحه ویدیو در وب سایت YouTube دریافت کنید:
بازیکن خواهد شد بازیکن خارجی از خود گوگل این یک بسته بندی وب روی یوتیوب نیست، بلکه یک پخش کننده واقعی جاسازی شده برای پخش هر ویدیویی است، کاملاً انعطاف پذیر و قابل تنظیم است. همچنین میتواند جریانهای ویدیویی را از یوتیوب پخش کند، اگر آدرس صحیح را ارائه دهید. ما به تازگی آدرس استریم را دریافت کردیم، پس بیایید ببینیم چگونه آن را برای پخش کننده ارسال کنیم.
ما تمام تفاوت های ظریف قرار دادن مؤلفه پخش کننده در صفحه برنامه را در نظر نخواهیم گرفت (شما می توانید به نمونه ها در وب سایت پروژه یا در کد نگاه کنید)، ما فقط به نحوه شروع پخش یک ویدیو از 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 و فقط باید اسمبلی را با این نسخه به روز کنید، مثلا).
اگر اینترنت کند باشد (اما خاموش نشود) ممکن است رابط کند شود.
به عنوان یک نتیجه،
پسرم از تبلت به تلویزیون هوشمند سامسونگ منتقل شد که نمی تواند برنامه های اندروید را اجرا کند. بنابراین، بهترین کنترل والدین هنوز شخصی است.
اما این برنامه به اندازه کافی راحت بود که من خودم شروع به استفاده از آن کنم. اولین برداشت از نسخه های اولیه کار این بود که من در دنیای دیگری هستم. همه محتوا از یوتیوب دانلود می شود، اما اینجا دیگر یوتیوب نیست، بلکه چیز دیگری است، امن و کنترل شده، انگار یک صدپا را از چشم خود بیرون آورده اید و در یک ظرف شیشه ای گذاشته اید. و همه چیز در مورد توصیه هاست.