【问题标题】:play m3u8 file from internal storage using NanoHTTTPD使用 NanoHTTTPD 从内部存储播放 m3u8 文件
【发布时间】:2017-03-28 11:23:41
【问题描述】:

我已经在我的应用程序的内部目录中下载了 m3u8 和 .ts 文件,当我尝试使用 Nanohttpd 播放 m3u8 文件时,它会显示一个对话框“无法播放此视频”。我在下面添加了我的代码。是否可以从应用存储中播放,或者我是否需要将文件存储在存储中可供其他应用访问的文件中。

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

【问题讨论】:

    标签: android http-live-streaming m3u8 nanohttpd


    【解决方案1】:

    我在 2 个月前发现了类似的问题。
    正如我在一个月的实验后发现的那样 - NanoHTTPD 本地服务器无法正常处理来自内部存储的文件(例如 context.getFilesDir())。相反,您需要将文件存储在 Environment.getExternalStorageDirectory() 中,并为您的应用提供读/写权限。
    我试过 Android MediaPlayerViaccessOrca 播放器(最后一个在内部使用 NanoHTTPD)从本地主机播放离线视频。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2015-10-03
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多