ááá¢á«á á áá ááá¡ áµá á©á²á©á¥ áŠáááá áá«áá» áá ááµá®ááµ ášá á«á£á¢á«á á á«áᜠáááá®áœá£ á»ááᜠá¥á ááá®áœ áá ááá«áµ á¥áááááá¢
ášá°áµáá ááá¢á«á¡-
ášá°áá°á áá á ááµ á¥áá° á áµá°áá áá°áá áªá« á°á«á² á°áá³á³á áœáá á áá¥áá áá áá¢
á¥áá° á ááá³á°á áá ášá»áá áááµááµáµ á ááá¬áœáá ášá«á á áá áá á°ášá᪠áá®áŽáá áá á ááá áá³á ášáá ááµááµ á°áá - NIH I (á¥á ášááá á áá á°áá áá) á á°áá ášá©á²á©á¥ áááᜠáá«áá»á ášáá áá áááµ á áá á áááá¹ á á£á áá¹ áá á áá°áááá¢
á á á ááá, ášá°áá°á áá á áá ášá«áŽá á°áá£á«á áááµášá ááá áá áá©. ášá°áá°á áá á áá, á ááááªá«á áááµ áá ááá« ááµášá á°á»á.
ááá á£á áªá«áµ:
- á°áá³á á»áááœáá á¥á á á«áᜠáááá®áœá á«áá - á¥áá± áááá£á á¥á á á á«á£á¢á«á ášááᥠáá³ ááµá¥ áá ááá
- á á°ášáá© á á«áᜠáááá®áœ ááµá¥á£ á ááµááá áªá²á®ááœá ášááµáááážá ášáá á«á¥á
- ášá¥áááᜠáááá á áááá° ášáááášá áá° áá°áá áªá« ášá°ášáá© á»ááᜠá¥á á á«áᜠáááá®áœ á¥á» ááá¢
áááµ áááᣠGPLv3 áááµá¡
ášáá á á³áœ ášáá áá á£á áªá«á¶áœ á á ááá á¥áá³ á¥á ášááá á€áá á á¥á ášáµá áá á áá«ááœá á³áá áá á¥ááŽáµ ášá©á²á©á¥ áªá²á®ááœá á á ááµá®ááµ áá°áá áªá«á áá áá«ááµ á¥áá°ááœá áá á áá³ááµ áŽááá«á áááá®áœá á¥áá«ááá¢
á ááá áá« áᜠá¥á á á°á«áᜠáá« áᜠááá¡ ášáááá° á«ááá á°ááŠáœ ášáááá° ááá®áœ
á á á«á£á¢á«á ášááᥠáá³ ááµá¥ áá£á ááá
á á²áµ á»áá ááá á á«áᜠáááá á«áá
á ááµáá áá á áµá áááá ááá ášáá³áá á áµá«á» á«áµáá¡á¢ ášá ááµ á°áᥠááá á á«áᜠáááá áªá²á®áᜠáááá áá° á á«á£á¢á«á ášááᥠáá³ á°ááá§áဠá á¶áᜠá áá°ážáá¡áá¢
á°áááá á á«áᜠáááá - ášááá áá€á¶áœá á á«ááµá¢
á áªá²á® ááá®áœ ááµá¥ ášááá áá ááá ášáá«ášá© áªá²á®áᜠá¥á» ááá«áá¢
á á°áá³á³áᣠáªá²á®á ášá á«áᜠáááá á áá á¶áœ ášášáá±á£ ášá°áá³á³á á á«áᜠáááá ááµá¥ á«á áªá²á®áᜠá¥á» á á¥áááᜠáááá ááµá¥ áá³á«áá¢
á á«áᜠáááá®áœ á¥á á»ááᜠáááá áá á á¥á á¥áá°áá áá á© ááœááá¢
á¥á£ááá á«áµá°ááá¡ ášá°á°áášá á á«áᜠáááá ááµá¥ á«á áªá²á®áᜠášááá áá€á¶áœá£ ášá¥áá³ á³áªá á¥á ášá°áá³á áááá ááµá¥ áá áá ᢠááá áá á áášááᣠá á«áᜠáááá© á¥áá°áá ášá°ášáá° á áá áá²á«áá á¥áá°áá á¥áá« áá³á«áá¢
á á°ášáášááµ áááá ááµá¥ áªá²á® á«áá
ášá³áá° áªá²á® á ááá ᣠá ááá áá€á¶áœ ááµá¥ á áá³áá ᣠá¥á ášá°áá³áᜠáááá á¥á ášá¥áá³ á³áªá ááµá¥ áá ááᢠáªá²á®á á ááá á á á«áᜠáááá á áá¥á®áœ ááµá¥ ášáá³á ááááá¢
ášá°ášáášááµá áááá áááášá± á¥á á áµá
á°áµ ášá³áá± áá¥ááœá á¥áá°áá á ááá¢
ááŒá¶áœ > á«áµá áá > á¥áá áááá¥
á°áá³á áªá²á®áᜠá¥á ášá¥áá³ á³áªá
á á á«áᜠáµááªá áá á«á á°áá³á áªá²á®áᜠá áááá áá á¥á áá á á®ášá¥ ááááµ á°á°ááá£ážááá¢
á áá« áá¹ áááµ ááµá¥ á«á ášá ááµ ááááᜠá¥á á áááªáᜠá¥á áááá®áœ ááµá¥ á ášá á á á á«áµáá
ášáªáµá®áá ááá ášá á«áᜠáááá©á áµá ááá á áµá«á» á á¥áá³ áµááªá ááá á ááááá áááá ááµá¥ áá á±á¢
áá£á á áá - ášááášá© á»áááœá á¥á á á«áᜠáááá®áœá á«áá
áá°áá áªá«á áá²á«áá ášáá á«ááµá á áœá á³á áᜠá¥áá³áᜠáááµááá¢
á á áá¥á®áœ ááµá¥ á ááµááá á»ááᜠá¥á á á«áᜠáááá®áœ áá á ááá áá°ášá ááœááá¢
á áá¥á
ášáá®áááµ ááœá¡
á á¥áááááá¡
áááááá¡
- á ááá ááá áá ášáá á¥á á á áᥠáá ááµá¥ á áááá (Google á€áá áá ášáá«áá á¥á áµá áš áá»ážáá ášáá°áá°á áá°áá áªá«ááœá áášááááᣠášá°á áá°áá ášá»áá áá ááµáµ ááá ášááááá áá«áá»á ášáá®)
- ášááá®áœ áááá¡á¡-
https://github.com/sadr0b0t/yashlang/ - á€áá¬á ášááááá«á ááá á«ááá±á¡-
https://github.com/sadr0b0t/yashlang/releases - ášá°áá°á áá á áá á á«á³áá ááµá¥ á¥áá°áá³á á°áµá á á°áááá
F-Droid (ášáá°áá áááášá» á°áá£áááµ á«áá áááµáá , áá áá ááµ áá á«á á á°ášá᪠á áá°ááá³áá°á), áá áá á áá°áá
á«áµá³áá± ášá°áá«á© ááá®áœ á á°áá³á³á áá£áªá« áá á á°áá«á© áµáªá¶áœ áá«ášá ááá«ášá á á°áá«á© ášapk ááá ááááᜠáááá«áµ á áá°á«á ᣠáµáªá±á ášá á²áµ ááá ášáá«áá á ááµ á ááááªá« ášá°á«ááá á¥áªáµ ášáášáá áá áá°ášá á áá¥ááµ - ášá á«áᜠáááá© áážáá« á¥á ášá á°á³ á³áªá (ááá ááá¥á á¥ááŽáµ ááµá°ááá á¥áá°ááœá ááá)á¢
áŽááá«á áááá®áœ
ášááá/á©á²á©á¥ á á«áááµ á áááááᣠá¢áá°áááµ á¥á» áá ášáá«áµááááᣠášáášá°ááµá á€á°-áá»áááµ áá áááá¡
ááááá á€ááµáµá«áá°á ášá©á²á©á¥ á áááááµ áášá áááá á á¥áexoplayer áªá²á® ááá«ááµ.
áááµ áááᣠáá» GPLv3 áááµá¢
á¥á«áá¡ á á á ááá ášá°á«á²áᜠáááµ (áááá á ááá
á¥áá³) áµá á£á¢á«ááœá áá§ášá á
áá áá?
áááµá¡- á á¥ááᥠá
áá ááᣠá áá ášááá áášá áááá ᥠášáµááá áá³áªá« áá áá á¥áá³áá¥á
ášá áá° ááá« ááᢠá á°ášááªáá¡-
á áá³ááµ á®áµ
á€á° áá»áááµ
á á«áᜠáááá©á ááá«á á«áá á®áµ áµáᜠá áµážá᪠áá, áµááá
á¥áá
á áá°á¥á, ááááµ ááážá á°ááœ, ášááá á®á±á áááášá±, á áá ášá± ááá áá.
ášáªá²á® á¥ášáµ á áµá«á»á ášá áᥠášáªá²á® áá á áµá«á» á¥ááŽáµ ááááµ á¥áá°áááœá á¥á á á á«áá¹ ááµá¥ á¥ááŽáµ á¥áá°áá«ááµ á¥ááá¢
á€á° ááá
áá±á á«ááááµá¢
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}
ášáá
á áá á ááá áá ááá áµ á¥áá°áááœá áááá
áá áá, áááá«á±á ... áá³ááᜠáµáá áá á áá«á
ááá á
á¬á³ á«á°ááᢠášá áá¶ááµáµ ášáášá« ááá« áá° áá®ááá± áááá ᥠááœááá¢
ášáªá²á® á¥ášá±á á áµá«á» á á©á²á©á¥ áµáš-áᜠáá á£áá ášáªá²á® áá á áµá«á» á«ááá¡
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 ááá³á á á©á²á©á¥ áµáš-áᜠáá ášááááá áªá²á® áá
ášá
áᥠá áµá«á» ááá ááœááá¢
á°á«áá¹ ááááá¢
á€á°-ááœááá±á ášáá®ááá± áá á«ááá
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}
ášá°á«áá¹á á á«á á áá°áá áªá«á áá« áᜠáá ášááµááᥠáááá áá©áá¶áœ á áááášáµá (á áá®ááá± áµá áš áᜠáá ááá á á®á± áá á«ááµá áá³ááᜠáášáµ ááœáá) á á á«áá¹ ááµá¥ ášá©á²á©á¥ áªá²á® áá«ááµ á¥ááŽáµ á¥áá°áááá á¥á» á¥áááášá³áá ᢠášáá ášá°áá áá á áµá«á»á¡-
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);
}
}
ášá³áá áá³á®áœ
- áá° ááá/á©á²á©á¥ ááá« ááá£áµ ášáá«áµáááážá ášááµá áá°áŠáœ á«áážá áªá²á®ááœá á á«á«ááµáá¢
ááá³á:
ááá: á¥áá°áá á«á áªá²á®ááœá áá° á¥áá áááᥠááµá¥ áášáá© ááá ášáªá²á®á á°á«á² á áµá á°áµ ášá°ááá áá áá°á¥ á¥áá²á«áµáááµ áá áá.
- á ááááá± áá® ááááµ ášááááµá£ážá á áá³ááµ ášáµáááµ áªá²á®áᜠá áá«áá±á (áá¥áá°áá á áááµ áªá²á®áᜠá áááá© á¥á á áá᪠ááµá¥ á«áá ááá³ â[dur undef]â ášáá ááááµ á°á°ááá á³á)
ááá³á:
ááá: á¥áá°áá á«á áªá²á®ááœá áá° á¥áá áááᥠá«áá.
- ááá á¥áá³á áááá ášá°á áá áªá²á®áᜠá¢á«ááá±á á áá¥á³ á á áááᜠá¥á» ášááá áªá²á®áᜠá á á«á£á¢á«á á á«áᜠáááá ááµá¥ ááá«á°á± ááœááá¢
ááá³á:
-
ááá¢á« ášáá«áµáááá ᣠá á á³á¹ ááµá¥ ášáá«áᵠᣠáá á á á«áá¹ ááµá¥ ášááá«ááµ ášá áᥠáªá²á® á«áá áááµ ášá³áá« áªáááµ ááá© (áœáá© ááµááá á á á²á± áµáªáµ ááµá¥ á°áµá°á«áá ááá ááœáá) ááááá á€ááµáµá«áá°á á¥á á áá áµáªáµ á¥á» áµá¥á°á£áá áááá á«áµááááá³á á£
ááá³á ). -
á áááášá¡ áááá ášáá (áá á«áá á) á áááá¹ áááá ááœááá¢
á áá á áááá«áµ,
áá ášá¡á£á á°á® áá° á³áá°áá áµáááµ á²áª á°ááášá£ áá á á ááµá®ááµ á ááá¬áœááœá áááµ á ááœááᢠáµááá , á á£á á¥á©á ášááá áá¥á¥á á ááá ááá áá.
ááá áá á ááá¬áœá á¥á á«áŽ áá áá á¥ááµááá áá¹ áá á°ááᢠášááááªá«áá¹ ášáµá« áµáªá¶áœ ášááááªá« áµááµ á¥á á áá ááá ááµá¥ áá áá©áᢠááá ááá¶áœ ášá©á²á©á¥ áááá³áᣠááá áá áá ášá áá á áá á©á²á©á¥ á áá°ááᣠááá áá áá áááᣠá°á ááá± ášá°á á á á¥á áá¥á¥á ášáá°ášáá áµá£ á ááµ áᶠá áᶠášáááá á áá¥á°á á ááµá³ááµ áá°á® ááµá¥ á¥áá³áµáá¡áµá¢ á¥á ááá áµá ááá®áœ áá.
ááá: hab.com