Android 使用nanohttpd从内部存储器播放m3u8文件
我已经下载了应用程序内部目录中的m3u8和.ts文件,当我尝试播放m3u8文件时,它会显示一个对话框“无法播放此视频”。我在下面添加了我的代码。是否可以从应用程序存储中播放,或者是否需要将文件存储在其他应用程序可以访问的存储中Android 使用nanohttpd从内部存储器播放m3u8文件,android,http-live-streaming,m3u8,nanohttpd,Android,Http Live Streaming,M3u8,Nanohttpd,我已经下载了应用程序内部目录中的m3u8和.ts文件,当我尝试播放m3u8文件时,它会显示一个对话框“无法播放此视频”。我在下面添加了我的代码。是否可以从应用程序存储中播放,或者是否需要将文件存储在其他应用程序可以访问的存储中 public class VideoPlayerActivity extends Activity { @BindView(R.id.video_view) VideoView videoView; private MediaController
public class VideoPlayerActivity extends Activity {
@BindView(R.id.video_view)
VideoView videoView;
private MediaController mediaController;
String url = "";
Server server;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_player);
ButterKnife.bind(this);
mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
url = getIntent().getStringExtra("url");
Uri uri = Uri.parse(url);
server = new Server();
try {
server.start();
} catch (IOException e) {
e.printStackTrace();
}
videoView.setVideoURI("http://localhost:8080");
videoView.requestFocus();
videoView.start();
videoView.setZOrderOnTop(true);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(server!= null) {
server.stop();
}
}
private class Server extends NanoHTTPD {
public Server() {
super(8080);
}
@Override
public Response serve(IHTTPSession session) {
String answer = "";
FileInputStream fileInputStream = null;
try {
// Open file from SD Card
FileReader index = new FileReader( url);//where url is path of m3u8 file in app storage
BufferedReader reader = new BufferedReader(index);
String line = "";
while ((line = reader.readLine()) != null) {
answer += line;
}
reader.close();
} catch (IOException ioe) {
Log.w("Httpd", ioe.toString());
}
return new Response(Response.Status.OK, "application/x-mpegURL", answer);
}
}
}
两个月前我发现了类似的问题。经过一个月的实验,我发现NanoHTTPD本地服务器无法正确处理来自内部存储的文件(例如context.getFilesDir())。相反,您需要将文件存储在环境中。getExternalStorageDirectory()并为您的应用程序提供读/写权限。
我试过Android MediaPlayer和Viacessorca player(最后一款内部使用NanoHTTPD)从本地主机播放离线视频