private static Logger gLogger = Logger.getLogger("MyService");
private Camera mCamera = null;
IBinder mBinder = new LocalBinder();
- private String rtmpUrl;
+ //private String rtmpUrl;
private long frameCount = 0;
// Preferred picture Size of the camera;
private void openCameraOriginal() {
try {
gLogger.error("openCameraOriginal");
- mCamera = Camera.open(1);
+ Camera.CameraInfo info = new Camera.CameraInfo();
+ int numCameras = Camera.getNumberOfCameras();
+ int backId = -1;
+ int frontId = -1;
+ int camerId = 0;
+ gLogger.debug("Number of Cameras is " + numCameras);
+ for(int i = 0; i < numCameras; i++){
+ Camera.getCameraInfo(i, info);
+ if(info.facing == Camera.CameraInfo.CAMERA_FACING_BACK){
+ gLogger.debug("CAMERA_FACING_BACK id is " + i);
+ backId = i;
+ } else if(info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
+ gLogger.debug("CAMERA_FACING_FRONT id is " + i);
+ frontId = i;
+ }
+ }
+ if(frontId != -1) camerId = frontId;
+ else if(backId != -1) camerId = backId;
+ mCamera = Camera.open(camerId);
} catch (Exception e) {
- gLogger.error("camera is not available. error: " + e.getMessage());
+ gLogger.error("openCameraOriginal - camera is not available. error: " + e.getMessage());
if(mListener != null) mListener.onCameraError("openCamera - error: " + e.getMessage());
}
}
try {
wait();
} catch (InterruptedException e) {
- gLogger.error("wait was interrupted");
+ gLogger.error("wait was interrupted, " + e.getMessage());
}
}
}
super.onCreate();
gLogger.error("onCreate ---> ");
createNotification();
- //Toast.makeText(this, "Started to Publish!", Toast.LENGTH_LONG).show();
+ Toast.makeText(this, "Started to Publish!", Toast.LENGTH_LONG).show();
mCamera = getCameraInstance();
if(mCamera != null){
configCamera(mCamera);
public void onPreviewFrame(final byte[] data, Camera camera){
if(frameCount % (15 * 60) == 0) {
gLogger.error("onPreviewFrame");
- if(mListener != null) mListener.onIsPreviewing("onPreviewFrame ");
}
- frameCount++;
if(FfmpegHelper.processFrame(data) != 0){
- gLogger.error("FfmpegHelper.processFrame error, close");
+ gLogger.error("onPreviewFrame, processFrame close");
FfmpegHelper.close();
if(mListener != null) mListener.onEncoderError("processFrame");
+ } else {
+ if(frameCount % (15 * 60) == 0){
+ if(mListener != null) mListener.onPublishing("processFrame OK");
+ }
}
+ frameCount++;
}
public void startPreview (SurfaceHolder holder){
- gLogger.error("startPreview");
+ gLogger.debug("startPreview");
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
}
}
+ public void reopenCamera() {
+ if(mCamera != null){
+ mCamera.stopPreview();
+ mCamera.release();
+ }
+ openCameraOriginal();
+ }
+
public boolean setRtmpUrl (String url){
- this.rtmpUrl = url;
+ //this.rtmpUrl = url;
if(mCamera == null) return false;
gLogger.error("setRtmpUrl - size: " + width + "x" + height + ". url: " + url);
int ret = FfmpegHelper.initEncoder(width, height, url);
+ if(ret != 0){
+ gLogger.error("setRtmpUrl, initEncoder error");
+ }
return ret == 0 ? true : false;
}
// Camaer.onError callback
@Override
public void onError(int error, Camera camera){
- //if(error == CAMERA_ERROR_SERVER_DIED)
- gLogger.error("onError, " + error);
+ gLogger.error("Camera.OnError, " + error);
+ switch (error) {
+ case Camera.CAMERA_ERROR_SERVER_DIED:
+ gLogger.error("CAMERA_ERROR_SERVER_DIED");
+ break;
+ case Camera.CAMERA_ERROR_UNKNOWN:
+ gLogger.error("CAMERA_ERROR_UNKNOWN");
+ break;
+ }
+
if(mListener != null) mListener.onCameraError("OnError, " + error);
}
public interface MyServiceEventListener {
void onCameraError(String err);
void onEncoderError(String msg);
- void onIsPreviewing(String msg); // notify mainActivity if preview is running well
-// void onIsPublishing(String msg); // notify main activity if encoder is running well;
+ //void onIsPreviewing(String msg); // notify mainActivity if preview is running well
+ void onPublishing(String msg); // notify main activity if encoder is running well;
}
}