ExoPlayer video streaming

0

Hej, pracuje nad aplikacją w której użytkownik będzie mógł wyświetlać filmiki. Nie będzie ich dużo bo podejrzewam, że z 20 max. I powiedzmy, że każdy średnio będzie miał 3 minuty. Jako że nie mam doświadczenia za dużego w aplikacjach mobilnych to zacząłem szukać najlepszych opcji dla tej aplikacji.
Będzie płatna i trochę kasy będzie kosztowała dlatego nie chciałbym, żeby była lipa ale jednocześnie nie chcę płacić dużo za usługi z których będę musiał skorzystać żeby to wszystko wypaliło.
Z tego co przeczytałem to do wyświetlania filmików najlepiej użyć ExoPlayer i tu pojawia się pytanie. Filmiki same w sobie bardzo dużej wartości nie mają ale są ważną częścią aplikacji i nie powinny być dostępne poza nią dla osób nieautoryzowanych. Trzymanie ich na urządzeniu odpada ze względu na maksymalny rozmiar apk 100Mb ale też na niepotrzebnie duży rozmiar aplikacji no i też dlatego że trzymanie ich tam byłoby słabą opcją.
Czytam dalej, że w bazie się też takich plików nie trzyma i że ExoPlayer ma taką opcje jak streaming wideo. Czyli, że realtime wyświetla plik wideo który umieszczony jest na serwerze. No i powstało pytanie gdzie ten plik umieścić żebym mógł w ExoPlayer podać do niego link. Zacząłem dalej szukać i jedną z opcji jest Cloudinary. Jest tam Free plan i myślę nawet że dla tej aplikacji mógłby wystarczyć, wyższy plan to już duże kwoty bo 99$ za miesiąc na co niestety nie mogę sobie pozwolić.
No i tu pytanie do Was ma ktoś pomysł jak to zrobić dobrze. W sensie, żebym mógł odpalać wideo w aplikacji i żeby się nie cieło i działało szybko i było dostępne i żeby nie kosztowało dużo. Może są inne sposoby jak to można zrobić albo gdzie te pliki wideo trzymać tylko jeszcze na nie nie trafiłem.
Rozważałem też opcje z android youtube API ale chyba trochę to mało profesjonalne i też większy problem byłby z ustawieniem takiego wideo. Chce żeby było w formie portretu i zajmowało cały ekran.
Dzięki za pomoc :)

Jestem, też ciekawy jak to ogarnął np pluralisght, w sensie gdzie on trzyma te filmiki który wyświetlane są w aplikacji. Moja aplikacja to nie pluralsight a coś dla znacznie mniejszego grona odbiorców ale chciałbym żeby działała dobrze. Na 95% będzie też API więc może sam jakoś mogę udostępniać wideo do streamingu?

2

red5 media server + widevine DRM + dash

1

Lub przyjemniejszy, ale płatny Wowza Media Server

1
Narror napisał(a):

red5 media server + widevine DRM + dash

To jest dobry stack technologiczny i też go polecam. Jest jeden problem z tym rozwiązaniem, a mianowicie DRM z widevine mogą mieć 3 poziomy zabezpieczeń L1 L2 L3 gdzie L1 to jest hardwareowy poziom. Niektóre z telefonów z systemem android są po prostu za słabe, żeby obsłużyć to przez co muszą mieć właczone zabezpieczenia na poziomie software które ktoś podobno złamał. To trzeba będzie obsłużyć bo inaczej słabsze telefony będą klatkowały, lagowały lub wideo będzie się źle wyświetlało.

0

Mówicie o wersji bezpłatnej red5 media server? Jeżeli kupię hosting na serwerze np. na webio to będę mógł zainstalować tam tego red5 media server i poustawiać wszystko? Tam chyba nie ma czegoś takiego jak logowanie przez pulpit zdalny? Dużo zabawy jest wgl z ustawieniami tego?
@panryz te poziomy zabezpieczń to chodzi o coś w stylu enkrypcji streamingu? Czyli żeby ktoś z zewnątrz jakoś nie mógł podpiąć się pod wyświetlenie tego?
Jak działa ten media server? W sensie jest jakaś specjalna lokalizacja gdzie mogę umieśić te pliki wideo i tylko z tej lokalizacji ktoś może odczytać pliki mając namiary?

0

Nie wiem co to webio, ale żeby instalować co chcesz, to musisz wykupić co najmniej vpsa. Z twoją wiedzą, a raczej jej brakiem, nie ruszysz z miejsca. Zacznij od nauki Linuksa.

P.S. serwer działa tak, że umieszczasz pliki w określonym katalogu, a serwer wystawia je w odpowiedni sposób, za pomocą odpowiedniego protokołu transmisji strumieniowej, zwykle wspomniany mpeg dash, lub hls

1

@RideorDie: to jest do drmów. Po to aby ktoś nie kopiował treści.
Nie wiem czy wiesz jak działa DASH, ale to jest manifest który wpychasz do playera łacznie z licencją z widevine. Więc Twój serwer będzie musiał wystawiać wideo w takim właśnie mpd.
https://www.brendanlong.com/the-structure-of-an-mpeg-dash-mpd.html

0

Jak ostatnio widziałem red5, to jego panel administracyjny jeszcze używał Flasha. Ciekawe, czy dziś też tak jest

1

Po przeczytaniu Twojej pierwszej wypowiedzi wygląda na to że powinieneś pójść w streaming. Mam jednak uwagę do limitu 100MB na aplikację, da się to obejść: https://developer.android.com/google/play/expansion-files :

"Previously, if your app's compressed download size exceeded 100MB, you had to host and download the additional resources yourself when the user opens the app. Hosting and serving the extra files can be costly, and the user experience is often less than ideal. To make this process easier for you and more pleasant for users, Google Play allows you to attach two large expansion files that supplement your APK."

0

Jako, że znalazłem dla siebie rozwiązanie kilka słów ode mnie jakby ktoś inny natrafił na ten problem.
Co do wyświetlania filmów na androidzie jest kilka opcji. Pierwsza to trzymanie wideo na telefonie. Druga to skorzystanie z CDN takich jak np. Wowza albo Cloudinary. Jednak to trzeba mieć dolary, a jak planujecie robić coś free albo jakiś swój mały biznesik to patrząc na to ile zdziera google, potem podatki itp. to raczej będziecie chcieli szukać oszczędności gdzie się da.
Trzecia opcja tak jak wspomnieli koledzy wyżej można postawić sobie red5 media server. Z tego co napisali wyżej to żeby to zrobić trzeba mieć VPS, który też kosztuje dużooo więcej niż hosting dlatego ta opcja u mnie też nie wchodziła w grę. A może po prostu wyświetlimy filmiki z youtuba? Jest Youtube API na androida z ciągnącymi się latami bugami których nikt nie poprawia. Jest dużo feedbacku że Youtub crashuje. Ja takiego rozwiązania nie chce. W związku z tym powstał projekt open source który rozwiązuje problem korzysta z web view a jest to android-youtube-player. Niby wszystko pięknie ale jednak nie. Otóż zdarzają się przypadki że Google nie akceptuje aplikacji korzystające z tej biblioteki a po drugie Google zmienia ciągle jakieś rzeczy w youtube przez co nagle może to przestać działać albo zacznie działać w niepożądany sposób. Odrzuciłem to rozwiązanie. Potem pomyślałem musi się dać samemu napisać np. w C# taki streaming server który będzie przesyłał to video. I rzeczywiście da się, są nawet nugety dostępne do zainstalowania np: net7mma, ale jako że nie chciałem tego nugeta był pod .net standard ale też chciałem sam napisać coś takiego to okazało się, że przesyłanie filmów z API można zrobić za pomocą 2 linijek kodu w C#...

        [HttpGet()]
        public IActionResult Sample()
        {
            string filename = "film.mp4";
            string filepath = AppDomain.CurrentDomain.BaseDirectory  + filename;

            return File(System.IO.File.OpenRead(filepath), "video/mp4");
        }

Działa na exo player i z tego też rozwiązania będę korzystał ja.

0

Równie dobre możesz wystawić plik na Apache, nie musisz pisać żadnego kodu. Ale nie masz drm, ani innych rzeczy zapewnianych przez hls/dash, jak chociażby dynamiczny dobór jakości do łącza.

Jeśli ci nie przeszkadza, że każdy będzie mógł pobrać twój plik i niepotrzebne ci żadne zaawansowane funkcjonalności, to możesz zrobić i tak. Wrzuć plik do /var/www, linka do niego podaj w ExoPlayer i też zadziała, pod warunkiem że skonfigurujesz odpowiednio serwer i że plik będzie miał format pozwalający na streaming.

1 użytkowników online, w tym zalogowanych: 0, gości: 1