2017-10-19 148 views
1

我无法让播放器播放所有m3u8播放列表。没有任何问题,直接链接到MP4文件播放。我找到的只有1-2个m3u8文件可以播放(其中之一是:http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8)。但所有其他m3u8播放列表不起作用。例如:该播放列表http://62.6.220.50:8000/playlist.m3u8剧本没有在浏览器中的问题,但在Android Studio中会产生错误:VideoView不会播放m3u8文件

«Can’t play this video» 

,并在日志中以下错误:

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

我在做什么错?我怎样才能让玩家可以毫无问题地播放m3u8文件。也许我必须预先解析这个播放列表,然后才能播放它。请告诉我,我该如何解决这个问题。这里是我的代码:

清单:

<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

亲爱的Artem,请花几分钟时间遵循 的说明https://stackoverflow.com/help/how-to-ask – ViKiNG

回答

0

的Android已与HLS问题的历史流 - 我想,这大概是公平地说,ExoPlayer是一种更可靠的方式来播放HLS:

如果你看一下上面链接当前开发人员指南,它给它支持这些已经超出了在MediaPlayer的正规的一些HLS功能的示例:

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