Streaming vidéo d'un Android vers un Android
Salut,
Je débute en Java et IOIO
Je souhaite transmettre les images vidéo d'un Android Serveur (Galaxy S 4.4.4) vers un Android Client (Elephone P6000 4.4.4) sur le port 8002 qui est en écoute.
Mais je n'ai pas d'erreur, mais pas de vidéo non plus.
le port d'écoute est ouvert 8002, lorsque je fais un échange de messages (dataOutputStream, dataInputStream) ça fonctionne.
L'Android Client fonctionne avec une vidéo issue de Youtube.
Les images de la camera de l'Android Serveur apparaissent uniquement sur L'Android Serveur (videoView) si je mets un port fermé exemple 50.
Si quelqu'un a une idée... là je suis perdu.
Merci
Le MainActivity du serveur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| public class MainActivity extends ActionBarActivity implements SurfaceHolder.Callback {
SurfaceHolder surfaceHolder;
Socket socket = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Force screen orientation landscape
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
ServerSocket s = null;
// Bout le code qui affiche la camera sur l'Android serveur
FrameLayout preview = (FrameLayout) findViewById(R.id.preview);
Camera cameraObject = ShowMyCamera.isCameraAvailiable(Camera.CameraInfo.CAMERA_FACING_BACK);
ShowMyCamera myCameraRun = new ShowMyCamera(this, cameraObject);
preview.addView(myCameraRun);
surfaceHolder = myCameraRun.getHolder();
surfaceHolder.addCallback(this);
// Bout de code qui diffuse la video
try {
s = new ServerSocket(8002);
socket = s.accept();
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
MediaRecorder recorder = new MediaRecorder();
cameraObject.unlock();
recorder.setCamera(cameraObject);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setVideoFrameRate(20);
recorder.setPreviewDisplay(surfaceHolder.getSurface());
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}
} // end onCreate |
Le MainActivity du Client
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| public class MainActivity extends ActionBarActivity implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener, MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnVideoSizeChangedListener {
MediaPlayer mediaPlayer;
SurfaceHolder surfaceHolder;
VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Force screen orientation landscape
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
videoView = (VideoView)findViewById(R.id.videoView);
surfaceHolder = videoView.getHolder();
surfaceHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TextView textViewIN = (TextView) findViewById(R.id.textViewIN);
// TextView textViewOUT = (TextView) findViewById(R.id.textViewOUT);
try {
Socket socket = new Socket("192.168.0.20",8002);
/* DataOutputStream dataOutputStream;
DataInputStream dataInputStream;
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream.writeUTF("You are connected on "+"192.168.0.20"+":8002");
textViewOUT.setText("You are connected on "+"192.168.0.20"+":8002");
textViewIN.setText(dataInputStream.readUTF());
*/
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.setDataSource(pfd.getFileDescriptor());
mediaPlayer.prepare();
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.start();
// textViewOUT.setText("Action : "+timeStamp);
} catch (IllegalArgumentException | SecurityException | IllegalStateException | IOException e) {
e.printStackTrace();
}
} |
Pour information la class ShowMyCamera
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| public class ShowMyCamera extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder sufaceHolder;
private Camera cameraUse;
private String TAG = "ShowMyCamera : ";
public static Camera isCameraAvailiable(int cameraFacing){
Camera cameraAvailable = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
for ( int cameraId = 0; cameraId < Camera.getNumberOfCameras(); cameraId++ ) {
Camera.getCameraInfo(cameraId, cameraInfo);
if (cameraInfo.facing == cameraFacing) {
try {
cameraAvailable = Camera.open(cameraId);
}
catch (Exception e)
{
}
}
}
return cameraAvailable;
}
public ShowMyCamera(Context context, Camera camera) {
super(context);
cameraUse = camera;
sufaceHolder = getHolder();
sufaceHolder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
if (sufaceHolder.getSurface() == null) {
// preview surface does not exist
return;
}
// stop preview before making changes
try {
cameraUse.stopPreview();
} catch (Exception e) {
// ignore: tried to stop a non-existent preview
}
// make any resize, rotate or reformatting changes here
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
cameraUse.setDisplayOrientation(90);
} else {
cameraUse.setDisplayOrientation(0);
}
// start preview with new settings
try {
cameraUse.setPreviewDisplay(sufaceHolder);
cameraUse.startPreview();
} catch (Exception e) {
Log.d(TAG, "Error display orientation camera preview: " + e.getMessage());
cameraUse.release();
cameraUse = null;
}
}
@Override
public void surfaceCreated(SurfaceHolder sufaceHolder) {
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)
{
cameraUse.setDisplayOrientation(90);
}
else
{
cameraUse.setDisplayOrientation(0);
}
try {
cameraUse.setPreviewDisplay(sufaceHolder);
cameraUse.startPreview();
} catch (IOException e) {
Log.d(TAG, "Error creating camera preview: " + e.getMessage());
cameraUse.release();
cameraUse = null;
}
} |