VideoView不播放m3u8文件

时间:2017-10-19 04:42:50

标签: android stream android-videoview m3u8 iptv

我无法让播放器播放所有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中会产生错误:

«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));
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

Android历史上遇到了HLS流问题 - 我认为可以公平地说ExoPlayer是一种更可靠的方式来回放HLS:

如果您查看上面链接的当前开发人员指南,它会提供一些示例,说明它支持的常规内置MediaPlayer之外的一些HLS功能:

  
      
  • 支持高级HLS功能,例如正确处理#EXT-X-DISCONTINUITY标签。
  •