Partage
  • Partager sur Facebook
  • Partager sur Twitter

Streaming Vidéo android

vidéo streaming de smartphone à smartphone android

    28 décembre 2019 à 15:38:53

    Bonjour,

    j'aimerais que mon application sache envoyé l'image de la caméra vers un autre téléphone en live sans enregistrement.

    j'utilise les sockets pour la connexion.

    du coté client j'ai le code suivant:

    package com.example.test;

    import androidx.appcompat.app.AppCompatActivity;

    import android.media.MediaPlayer;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.ParcelFileDescriptor;
    import android.telecom.Call;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;

    import com.example.test.util.InfoServerSingleton;

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.SyncFailedException;
    import java.net.InetSocketAddress;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class CameraDistantActivity extends AppCompatActivity implements SurfaceHolder.Callback {

    private SurfaceView mPreview;
    private MediaPlayer mp;
    private SurfaceHolder holder;
    private Socket client;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera_distant);
    mPreview = (SurfaceView) findViewById(R.id.surfaceViewDistant);
    holder = mPreview.getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    mp = new MediaPlayer();
    Thread t = new Thread(){

    public void Run()
    {
    try {
    client = new Socket(InfoServerSingleton.getInstance().getIp(),InfoServerSingleton.getInstance().getPort());
    } catch (IOException e) {
    e.printStackTrace();
    }

    handler.post(
    new Runnable() {
    @Override
    public void run() {
    ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(client);
    try {
    pfd.getFileDescriptor().sync();
    mp.setDataSource(pfd.getFileDescriptor());
    pfd.close();
    mp.setDisplay(holder);
    mp.prepareAsync();
    mp.start();
    } catch (SyncFailedException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    );
    }
    };



    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
    }•

    et du coté server :

    package com.example.testserver;

    import androidx.appcompat.app.AppCompatActivity;

    import android.content.ComponentName;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.graphics.SurfaceTexture;
    import android.media.MediaPlayer;
    import android.media.MediaRecorder;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.ParcelFileDescriptor;
    import android.view.Surface;
    import android.view.SurfaceHolder;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.VideoView;

    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.SyncFailedException;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class MainActivity extends AppCompatActivity {

    // User Interface Elements
    VideoView mView;
    TextView connectionStatus;
    SurfaceHolder mHolder;
    // Video variable
    MediaRecorder recorder;
    // Networking variables
    private Handler handler = new Handler();
    private ServerSocket serverSocket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Thread sendVideo = new Thread(new SendVideoThread());
    sendVideo.start();
    }




    public class SendVideoThread implements Runnable{
    public void run(){
    // From Server.java
    try {
    serverSocket = new ServerSocket(5000);
    Socket client = serverSocket.accept();
    final ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(client);
    recorder = new MediaRecorder();
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setOutputFile(pfd.getFileDescriptor());
    recorder.setVideoFrameRate(20);
    recorder.setVideoSize(176,144);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
    recorder.setPreviewDisplay(mHolder.getSurface());

    try {
    recorder.prepare();
    } catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    recorder.start();
    } catch (Exception e){
    handler.post(new Runnable() {
    @Override
    public void run() {
    connectionStatus.setText("Error");
    }
    });
    e.printStackTrace();
    }
    // End from server.java
    }
    }
    }

     je n'ai pas de message d'erreur mais rien ne se passe et via le code client je n ai pas l'impression que ca contact le server...

    • Partager sur Facebook
    • Partager sur Twitter

    Streaming Vidéo android

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown