La société que je travaille pour développe une application Android qui joue un fichier vidéo à partir d'une URL sur Web. le
URL vidéo est un paramètre pour un script PHP qui le coode correctement et redirige vers la vidéo codée, comme indiqué ci-dessous: où mais quand j'essaie d'exécuter le mediaplayerdemo_video à partir des démos de l'API à l'aide du mode Streaming, je reçois Une erreur comme celle-ci: p> Si nous donnons du code d'URL et le format dans le script PHP, il ne fonctionne pas non plus, mais avec une erreur différente: P > $ wewut_video code> est l'URL au codé Vidéo (cela fonctionne si nous utilisons cette URL dans le navigateur) et
$ Format code> est le format vidéo. p>
MediaPlayer info/warning (1. 28)
MediaPlayer Info (1 .28)
5 Réponses :
La réponse est dans quel fichier essaie-t-il de diffuser dans votre MediaPlayer, votre URL doit être par exemple quelque chose comme :: p>
rtsp: //v1.cache5.c.youtube.com/cjyleny73wialqkuvskxa_7ukxmyesarfeijbxytz29vz2xlsarsbxdhdgnoyipxxzhky7m5rgw=/0/0/0/video.3gp code> P> blockQuote>
(essayez avec cette URL) p>
Utilisation du protocole
RTSP strong> et un fichier vidéo .3GP STRT> avec le bon Codecs pris en charge pour Android . P>
J'ai rencontré ce même problème. Il s'avère que l'Android MediaPlayer ne gérera pas les redirections. Vous devez donc trouver où le script PHP vous redirige et lui donnez l'URL du RTSP en tant que JEORGESYS expliquée.
J'ai pu résoudre en effectuant un httpbet et ne suivez pas les redirections , puis tirant l'URL du RTSP de l'en-tête HTTP 'Emplacement'. Si vous avez plusieurs redirections, vous aurez un peu plus de problèmes, mais heureusement dans mon cas, je n'ai à vous soucier que d'une seule redirection. P>
public static String resolveRedirect(String url) throws ClientProtocolException, IOException { HttpParams httpParameters = new BasicHttpParams(); HttpClientParams.setRedirecting(httpParameters, false); HttpClient httpClient = new DefaultHttpClient(httpParameters); HttpGet httpget = new HttpGet(url); HttpContext context = new BasicHttpContext(); HttpResponse response = httpClient.execute(httpget, context); // If we didn't get a '302 Found' we aren't being redirected. if (response.getStatusLine().getStatusCode() != HttpStatus.SC_MOVED_TEMPORARILY) throw new IOException(response.getStatusLine().toString()); Header loc[] = response.getHeaders("Location"); return loc.length > 0 ? loc[0].getValue() : null; }
Voici un exemple simple
code PHP:
J'ai adapté la réponse de Mark à utiliser Apache HTTPComponents à jour à jour:
import java.io.IOException; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; // ... private static String resolveRedirect(String url) throws IOException { RequestConfig config = RequestConfig.custom().setRedirectsEnabled(false).build(); CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); HttpGet httpget = new HttpGet(url); HttpContext context = new BasicHttpContext(); HttpResponse response = httpClient.execute(httpget, context); // If we didn't get a '302 Found' we aren't being redirected. if (response.getStatusLine().getStatusCode() != HttpStatus.SC_MOVED_TEMPORARILY) { throw new IOException(response.getStatusLine().toString()); } Header loc[] = response.getHeaders("Location"); return loc.length > 0 ? loc[0].getValue() : null; } // ...