package co.flyver.androidrc.Server;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.hardware.Camera;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.SurfaceHolder;
import net.majorkernelpanic.streaming.Session;
import net.majorkernelpanic.streaming.SessionBuilder;
import net.majorkernelpanic.streaming.audio.AudioQuality;
import net.majorkernelpanic.streaming.rtsp.RtspServer;
import net.majorkernelpanic.streaming.video.VideoQuality;
/**
* Created by Petar Petrov on 11/5/14.
*/
public class VideoStreamProvider extends CameraProvider implements Session.Callback, SurfaceHolder.Callback {
private static final String VIDEOSTREAM = "VIDEOSTREAM";
private Session mSession;
public VideoStreamProvider(Context context, Camera camera) {
super(context, camera);
Log.d(VIDEOSTREAM, "Created");
super.init();
}
public VideoStreamProvider(Context context) {
super(context);
super.init();
}
public void setCallback(Runnable callback) {
super.setCallback(callback);
}
public void init() {
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this.getContext()).edit();
editor.putString(RtspServer.KEY_PORT, String.valueOf(54321));
editor.apply();
mSession = SessionBuilder.getInstance()
.setCallback(this)
.setSurfaceView(mView)
.setPreviewOrientation(90)
.setContext(this.getContext())
.setAudioEncoder(SessionBuilder.AUDIO_NONE)
.setAudioQuality(new AudioQuality(16000, 32000))
.setVideoEncoder(SessionBuilder.VIDEO_H264)
.setVideoQuality(new VideoQuality(800,480,10,500000))
.build();
mView.getHolder().addCallback(this);
this.getContext().startService(new Intent(this.getContext(),RtspServer.class));
}
public void snapIt() {
Camera camera = Camera.open(mSession.getCamera());
super.snapIt(camera);
}
@Override
public void onBitrateUpdate(long bitrate) {
Log.d(VIDEOSTREAM, "Bitrate updated " + bitrate);
}
@Override
public void onSessionError(int reason, int streamType, Exception e) {
}
@Override
public void onPreviewStarted() {
Log.d(VIDEOSTREAM, "Preview started");
}
@Override
public void onSessionConfigured() {
Log.d(VIDEOSTREAM, "Session configured");
mSession.start();
}
@Override
public void onSessionStarted() {
Log.d(VIDEOSTREAM, "Session started");
}
@Override
public void onSessionStopped() {
Log.d(VIDEOSTREAM, "Session stopped");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mSession.stop();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// mSession.startPreview();
}
}