Android通过网络播放本地Tomcat服务器下的视频

  • Post author:
  • Post category:其他


服务器端(我在Eclipse里创建了JavaWeb项目)

在这里插入图片描述
在这里插入图片描述



XML布局文件

效果图如下

在这里插入图片描述

xml代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

   <VideoView
       android:id="@+id/videoView"
       android:layout_width="match_parent"
       android:layout_height="300dp"
       android:layout_marginLeft="5dp"
       android:layout_marginRight="5dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:gravity="center">
        <Button
            android:id="@+id/preview_bt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="5dp"
            android:text="上一个"/>
        <Button
            android:id="@+id/next_bt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="5dp"
            android:text="下一个"/>
    </LinearLayout>
</LinearLayout>



Java代码

public class MainActivity extends AppCompatActivity {

    private int index = 0;
    private String result = "";          //定义一个代表连接目标URL后返回的数据的字符串
    private JSONArray jsonArray = null;
    //服务器中json数据的URL
    private String target = "http://192.168.43.201:8080/MyVideos/video.json";

    private VideoView videoView;
    private Button next_bt,preview_bt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initUI();
        new MyThread().start();  //开启线程,连接服务器获取json数据
    }

    /**
     * 该函数用于初始化组件
     */
    void initUI(){
        videoView = (VideoView)findViewById(R.id.videoView);
        next_bt = (Button) findViewById(R.id.next_bt);
        preview_bt = (Button) findViewById(R.id.preview_bt);
    }

    /**
     * 该函数用于为按钮注册监听器
     */
    void setLinstener(){
        next_bt.setOnClickListener(btListener);
        preview_bt.setOnClickListener(btListener);
    }

    /**
     * 该函数用于发送请求
     * @return 代表着JSON数据的字符串
     */
    String send(){
        String myResult = "";
        URL url;
        try{
            //创建URL对象
            url = new URL(target);
            //创建一个HTTP连接
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoOutput(true);                  //从连接中读取数据
            urlConnection.setUseCaches(false);                //禁止缓存
            urlConnection.setInstanceFollowRedirects(true);   //自动执行HTTP重定向
            //获取读取的内容
            InputStreamReader in = new InputStreamReader(urlConnection.getInputStream());
            //获取输入流对象
            BufferedReader buffer = new BufferedReader(in);

            //通过循环逐行读取输入流的内容
            String inputLine = null;
            while ((inputLine=buffer.readLine())!=null){
                myResult += inputLine;
            }

            in.close();
            urlConnection.disconnect();      //断开连接
        }catch (Exception e){
            e.printStackTrace();
            Log.d("ERROR","连接失败!!!");
        }
        return myResult;
    }

    /**
     * 该函数用于播放视频
     */
    void playVideo(){
        String uriVideo = "";               //定义一个代表服务器下的视频路径的字符串
        try{
            JSONObject jsonObject = jsonArray.getJSONObject(index);
            uriVideo = jsonObject.getString("player");   //获取视频路径
        }catch (JSONException e){
            e.printStackTrace();
        }

        //设置视频控制器
        videoView.setMediaController(new MediaController(this));

        Uri uri = Uri.parse(uriVideo);
        videoView.setVideoURI(uri);
        videoView.requestFocus();
        videoView.start();
    }

    /**
     * 创建一个按钮的监听对象
     */
    View.OnClickListener btListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.next_bt:   //下一个视频
                    if (index==2){
                        index = 0;
                    }else {
                        ++index;
                    }
                    videoView.stopPlayback();
                    playVideo();
                    break;
                case R.id.preview_bt:
                    if (index==0){
                        index = 2;
                    }else {
                        --index;
                    }
                    videoView.stopPlayback();
                    playVideo();
                    break;
            }
        }
    };


    /**
     * 创建一个Handler,用于接收子线程发送来的消息
     */
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //String[][] myResult = new String[][]
            if (!"".equals(result)){
                //如果连接服务器成功,获取JSON数据
                try {
                    JSONObject jsonObject = new JSONObject(result);
                    jsonArray = jsonObject.getJSONArray("videos");
                }catch (JSONException e){
                    e.printStackTrace();
                }
                setLinstener();
                playVideo();
            }else {
                //如果连接服务器失败,则提示信息
                Toast.makeText(MainActivity.this,"连接失败!!!",Toast.LENGTH_LONG).show();
            }
        }
    };

    /**
     * 创建子线程类,用于获取服务器的JSON数据
     */
    class MyThread extends Thread implements Runnable{
        @Override
        public void run() {
            result = send();                       //调用send方法,用于发送请求并获取数据
            Message m = handler.obtainMessage();   //获取一个Message
            handler.sendMessage(m);                //发送消息
        }
    }
}

最后不要忘了注册网络权限

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


参考了这位大神的文章



Android中通过网络获取json数据来播放视频



版权声明:本文为qq_42839797原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。