线程流媒体视频

时间:2016-06-13 07:30:52

标签: java android multithreading

我有一个Java服务器和一个Android客户端。在Android中,我有一个AsyncTask用于服务器接收视频连续,以及一个用MediaPlayer读取视频的线程。

我在5秒后启动MediaPlayer但在启动MediaPlayer时读取收据包。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();



    vidSurface = (SurfaceView) findViewById(R.id.surfView);


    ConcurrentLinkedDeque<OutputStream[]> list = new ConcurrentLinkedDeque<>();


    Connexion connexion = new Connexion(list);
    connexion.execute();

    new Thread(new Task2(list)).start();
}


private class Connexion extends AsyncTask<Void, Void, Void> {

    private ConcurrentLinkedDeque<OutputStream[]> list;

    public Connexion(ConcurrentLinkedDeque<OutputStream[]> list) {
        this.list = list;
    }
    @Override
    protected Void doInBackground(Void... params) {
        ConcurrentLinkedDeque<OutputStream[]> list = new ConcurrentLinkedDeque<>();

        DownloadVideo dv = new DownloadVideo(list);
        dv.connexion();

        return null;
    }
}

public void launchVideo() {
        Thread.sleep(5000);
        vidHolder = vidSurface.getHolder();
        vidHolder.addCallback(this);
}

class Task2 implements Runnable {
@Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                Log.d("1", "Thread2");
                launchVideo();
            }
        });
    }

非常感谢。

1 个答案:

答案 0 :(得分:0)

下载视频:

public void connexion() {
        try {
            client = new Socket(IP_SERVER, 9003); // Creating the server socket.

            if (client != null) {
                // Receive video
                InputStream in = client.getInputStream();
                OutputStream out[] = new OutputStream[1];
                // Store on device
                out[0] = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Movies/chrono2.mp4");
                byte buf[] = new byte[1024];

                int n;
                while ((n = in.read(buf)) != -1) {
                    out[0].write(buf, 0, n);
                    //Adding last in the queue
                    list.addLast(out);
                    Log.d("byte" , "" + out);

                    try {
                        Thread.sleep(1);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
相关问题