2017-10-19 22 views
1

Je n'arrive pas à faire en sorte que le lecteur joue toutes les listes de lecture m3u8. Sans aucun problème, les liens directs vers les fichiers mp4 sont lus. Il y a seulement 1-2 fichiers m3u8 que j'ai réussi à trouver qui pourrait être joué (l'un d'eux est: http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8). Mais toutes les autres listes de lecture m3u8 ne fonctionnent pas. Par exemple: cette playlist http://62.6.220.50:8000/playlist.m3u8 joue sans problème dans le navigateur, mais dans Android studio, elle produit une erreur:VideoView ne lit pas les fichiers m3u8

«Can’t play this video» 

et dans les journaux les erreurs suivantes:

«E/MediaPlayer: error (1, -1007) D/VideoView: Error: 1,-1007». 

Qu'est-ce que je fais mal? Comment puis-je faire en sorte que le joueur peut lire des fichiers m3u8 sans problèmes. Peut-être que je dois pré-analyser cette playlist et ensuite seulement la jouer. Dites-moi, s'il vous plaît, comment puis-je résoudre ce problème. Voici mon code:

MANIFESTE:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

ACTIVITY_MAIN:

<VideoView 
    android:id="@+id/myVideoView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:visibility="visible" 
    tools:layout_editor_absoluteY="0dp" 
    tools:layout_editor_absoluteX="-315dp" /> 

MainActivity:

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import java.net.URL; 
import android.net.Uri; 
import android.os.Bundle; 
import android.widget.MediaController; 
import android.widget.VideoView; 

public class MainActivity extends AppCompatActivity { 
    private String urlStream; 
    private VideoView myVideoView; 
    private URL url; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myVideoView = (VideoView)this.findViewById(R.id.myVideoView); 
     MediaController mc = new MediaController(this); 
     myVideoView.setMediaController(mc); 
     urlStream = "http://62.6.220.50:8000/playlist.m3u8"; 
     //urlStream = "http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"; 
     //urlStream = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4"; 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       myVideoView.setVideoURI(Uri.parse(urlStream)); 
      } 
     }); 
    } 
} 
+0

Cher Artem, s'il vous plaît quelques minutes pour suivre les instructions données au https://stackoverflow.com/help/how-to-ask – ViKiNG

Répondre

0

Android a eu des problèmes avec les cours d'eau HLS historiquement - Je pense qu'il est probablement juste de dire que ExoPlayer est un moyen plus fiable de lire HLS encore:

Si vous regardez le guide actuel de développeur lié ci-dessus, il donne un exemple de certaines des fonctionnalités HLS qu'il prend en charge au-delà du bâti régulier MediaPlayer:

  • Support for advanced HLS features, such as correct handling of #EXT-X-DISCONTINUITY tags.