Autore Topic: Streaming video  (Letto 5706 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Streaming video
« il: 14 Febbraio 2012, 13:08:41 CET »
0
Sostanzialmente vorrei mettere sul mio server web dei file AVI e poi consentire agli utenti della mia applicazione di vederli in streaming sullo smartphone...esiste della documentazione a riguardo ?

Grazie

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Streaming video
« Risposta #1 il: 14 Febbraio 2012, 16:18:29 CET »
0
I files avi non rappresentano un vero e proprio formato ma sono un contenitore. Essi infatti contengono (solitamente, ma non è detto) una traccia video e una traccia audio senza restrizioni sulla codifica.

Puoi infatti trovare files avi che al loro interno hanno un flusso dati divx, xvid o altro.

Quindi parlare di files avi di per se ha poco senso, devi essere sicuro che il file avi abbia due data stream leggibili da Android.
Per quanto riguarda il problema dello streaming i formati solitamente "streamabili" sono mp4 e 3gp.

Per gli mp4 vale questo:

Citazione
In an MPEG-4–compliant container, every movie contains a moov atom. Normally, a movie atom contains a movie header atom (an mvhd atom) that defines the timescale and duration information for the entire movie, as well as its display characteristics. The movie atom also contains one track atom (a trak atom) for each track in the movie. Each track atom contains one or more media atoms (an mdia atom) along with other atoms that define other track and movie characteristics.
.......
Unless specified otherwise, the moov atom is normally stored at the end of the file in on-demand content, after all of the information describing the file has been generated. Depending on the type of on demand delivery method selected—progressive download, streaming, or local playback—the location will need to move either to the end or to the beginning of the file.

If the planned delivery method is progressive download or streaming (RTMP or HTTP), the moov atom will have to be moved to the beginning of the file.

Preso dalla devnet adobe (http://www.adobe.com/devnet/video/articles/mp4_movie_atom.html).

Questo vuol dire che non basta salvare degli mp4 ma devi anche assicurarti attraverso dei tool appositi (chiamati multiplexer) che il moov atom sia all'inizio e non alla fine.

Puoi usare uno di questi:

http://www.videohelp.com/tools/mp4box
http://www.videohelp.com/tools/handbrake

In giro ci dovrebbero essere diversi tutorial su come usarli.  :-)

Edit: anche mp4 è un contenitore, il codec di solito è H264.
Qui sono riportati i formati supportati:

http://developer.android.com/guide/appendix/media-formats.html
« Ultima modifica: 14 Febbraio 2012, 16:21:53 CET da undead »

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Streaming video
« Risposta #2 il: 14 Febbraio 2012, 17:22:18 CET »
0
Ciao e grazie per la spiegazione.
Nella ricerca mi sono imbattuto in questo Media Playback | Android Developers sembrerebbe fare al caso mio o sbaglio ?

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Streaming video
« Risposta #3 il: 14 Febbraio 2012, 17:35:56 CET »
0
Si , esattamente quello.  ;-)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Streaming video
« Risposta #4 il: 14 Febbraio 2012, 18:49:40 CET »
0
Si , esattamente quello.  ;-)
Dato che ti vedo ferrato il bufferring  lo streaming sono la stessa cosa? cioè quali sono le differenze e quale servirebbe nel mio caso?

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Streaming video
« Risposta #5 il: 14 Febbraio 2012, 19:18:55 CET »
+1
Non sono così ferrato nell'uso specifico del media player android.  ;-)

Il termine streaming identifica l'invio pezzo per pezzo, in ordine, del contenuto contestualmente alla sua riproduzione.

In parole povere invece di scaricare un file e fare "play file" il play avviene via via che ricevi i dati (in ordine nel senso che funziona come un download diretto, non come la tecnologia P2P).

Poichè la qualità della tua connessione di rete è variabile, il carico di lavoro del server è anch'esso variabile e non ultimo anche a causa di problemi comuni ai protocolli di trasmissione (non mi addentro ma ci sono pacchetti duplicati, pacchetti che arrivano in ordine inverso, pacchetti persi per strada) la quantità di dati che ricevi in un secondo non può essere garantita. Il fatto che tu stia scaricando a 1mbit/secondo non implica che questa velocità sia garantita per quella stessa sorgente di dati per tutta la durata del download.

NOTA: in scala MOLTO minore questo problema si verifica anche in ambito di applicazioni realtime su PC... basta pensare ad una testina fisica di un hard disk che sta leggendo un file video e nel frattempo c'è un componente del sistema (o altra applicazione) che vuole salvare un file. La testina si deve staccare, muovere, scrivere il file e tornare alla posizione precedente.

Per ovviare a questi inconvenienti si deve utilizzare un buffer, ovvero allocare abbastanza memoria per poter contenere anche la parte del video che non abbiamo ancora visto (la barra grigia che aumenta più velocemente su youtube rispetto alla barra rossa del play per esempio). In questo modo ci mettiamo avanti con il lavoro così nel caso in cui il transfer rate diminuisca (o si fermi per qualche istante) l'utente non avvertirà fastidiosi blocchi.

Poi nel caso specifico ci possono essere implementazioni diverse (ad esempio buffer circolari per risparmiare memoria) ma il concetto è lo stesso: mettersi avanti con il lavoro e risparmiare memoria.

Non credo che tu debba preoccuparti del buffering perchè quando chiami la prepare() il media player dovrebbe fare proprio questo: creare un buffer e fare tutto il lavoro di inizializzazione. Questo è il motivo per il quale o usi la prepare asincrona oppure devi evitare di chiamare la prepare() nel thread della UI: inizializzare il buffer può richiedere qualche secondo.

Quindi a meno che non esista un modo (onestamente non lo so) per passare al media player un tuo array di dati (cioè un tuo buffer che gestisci come preferisci) il buffering non dovrebbe essere motivo di preoccupazione.

 :-)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Streaming video
« Risposta #6 il: 14 Febbraio 2012, 21:22:31 CET »
0
Questo Rep+ te lo sei proprio meritato ;-)

Offline pisciotta.f

  • Utente junior
  • **
  • Post: 52
  • Respect: +2
    • Mostra profilo
Re:Streaming video
« Risposta #7 il: 15 Febbraio 2012, 09:59:49 CET »
0
Ecco il codice da utilizzare! ;)

Codice (Java): [Seleziona]
String url = "http:...";
               
                video = (VideoView) findViewById(R.id.videoView); // Per definire un contenitore del tuo video da xml 8-)
                video.setVideoPath(url); // la url può essere anche un percorso interno all'SD

                ctlr = new MediaController(this);
                ctlr.setMediaPlayer(video);
                video.setMediaController(ctlr);
                video.start();

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Streaming video
« Risposta #8 il: 15 Febbraio 2012, 12:03:19 CET »
0
Ecco il codice da utilizzare! ;)

Codice (Java): [Seleziona]
String url = "http:...";
               
                video = (VideoView) findViewById(R.id.videoView); // Per definire un contenitore del tuo video da xml 8-)
                video.setVideoPath(url); // la url può essere anche un percorso interno all'SD

                ctlr = new MediaController(this);
                ctlr.setMediaPlayer(video);
                video.setMediaController(ctlr);
                video.start();

Azz è fa tutto lui ? anche il buffering ?

Offline pisciotta.f

  • Utente junior
  • **
  • Post: 52
  • Respect: +2
    • Mostra profilo
Re:Streaming video
« Risposta #9 il: 15 Febbraio 2012, 12:28:08 CET »
+1
Si si..
Nel mio caso ho dei video su un server (di qualunque formato)
e mi basta utilizzare il codice che ti ho lasciato per prendere il video, farlo visualizzare e ovviamente con la bufferizzazione!

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Streaming video
« Risposta #10 il: 15 Febbraio 2012, 12:32:13 CET »
0
GRANDE PROVO SUBITO ! ;)

Offline pisciotta.f

  • Utente junior
  • **
  • Post: 52
  • Respect: +2
    • Mostra profilo
Re:Streaming video
« Risposta #11 il: 15 Febbraio 2012, 12:47:57 CET »
+1
E allora cliccami su Thanks! :P

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Streaming video
« Risposta #12 il: 15 Febbraio 2012, 13:04:17 CET »
0
E allora cliccami su Thanks! :P
Aspettavo di federe se funzionasse....vabbè clicco sulla fiducia ;)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Streaming video
« Risposta #13 il: 15 Febbraio 2012, 13:10:48 CET »
0
Aspettavo di federe se funzionasse....vabbè clicco sulla fiducia ;)

Non è che gli stai dando un assegno da 5mila euro eh. ;)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Streaming video
« Risposta #14 il: 15 Febbraio 2012, 13:21:29 CET »
0
Non è che gli stai dando un assegno da 5mila euro eh. ;)

hi hi hi hi hi