Android Open Source - spydroid-ipcamera Session Builder






From Project

Back to project page spydroid-ipcamera.

License

The source code is released under:

GNU General Public License

If you think the Android project spydroid-ipcamera listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2011-2014 GUIGUI Simon, fyhertz@gmail.com
 * // ww w  .ja v a 2s .  c om
 * This file is part of libstreaming (https://github.com/fyhertz/libstreaming)
 * 
 * Spydroid is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This source code is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this source code; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package net.majorkernelpanic.streaming;

import java.io.IOException;
import java.net.InetAddress;

import net.majorkernelpanic.streaming.audio.AACStream;
import net.majorkernelpanic.streaming.audio.AMRNBStream;
import net.majorkernelpanic.streaming.audio.AudioQuality;
import net.majorkernelpanic.streaming.audio.AudioStream;
import net.majorkernelpanic.streaming.gl.SurfaceView;
import net.majorkernelpanic.streaming.video.H263Stream;
import net.majorkernelpanic.streaming.video.H264Stream;
import net.majorkernelpanic.streaming.video.VideoQuality;
import net.majorkernelpanic.streaming.video.VideoStream;
import android.content.Context;
import android.hardware.Camera.CameraInfo;
import android.preference.PreferenceManager;

/**
 * Call {@link #getInstance()} to get access to the SessionBuilder.
 */
public class SessionBuilder {

  public final static String TAG = "SessionBuilder";

  /** Can be used with {@link #setVideoEncoder}. */
  public final static int VIDEO_NONE = 0;

  /** Can be used with {@link #setVideoEncoder}. */
  public final static int VIDEO_H264 = 1;

  /** Can be used with {@link #setVideoEncoder}. */
  public final static int VIDEO_H263 = 2;

  /** Can be used with {@link #setAudioEncoder}. */
  public final static int AUDIO_NONE = 0;

  /** Can be used with {@link #setAudioEncoder}. */
  public final static int AUDIO_AMRNB = 3;

  /** Can be used with {@link #setAudioEncoder}. */
  public final static int AUDIO_AAC = 5;

  // Default configuration
  private VideoQuality mVideoQuality = VideoQuality.DEFAULT_VIDEO_QUALITY;
  private AudioQuality mAudioQuality = AudioQuality.DEFAULT_AUDIO_QUALITY;
  private Context mContext;
  private int mVideoEncoder = VIDEO_H263; 
  private int mAudioEncoder = AUDIO_AMRNB;
  private int mCamera = CameraInfo.CAMERA_FACING_BACK;
  private int mTimeToLive = 64;
  private int mOrientation = 0;
  private boolean mFlash = false;
  private SurfaceView mSurfaceView = null;
  private String mOrigin = null;
  private String mDestination = null;
  private Session.Callback mCallback = null;

  // Removes the default public constructor
  private SessionBuilder() {}

  // The SessionManager implements the singleton pattern
  private static volatile SessionBuilder sInstance = null; 

  /**
   * Returns a reference to the {@link SessionBuilder}.
   * @return The reference to the {@link SessionBuilder}
   */
  public final static SessionBuilder getInstance() {
    if (sInstance == null) {
      synchronized (SessionBuilder.class) {
        if (sInstance == null) {
          SessionBuilder.sInstance = new SessionBuilder();
        }
      }
    }
    return sInstance;
  }  

  /**
   * Creates a new {@link Session}.
   * @return The new Session
   * @throws IOException 
   */
  public Session build() {
    Session session;

    session = new Session();
    session.setOrigin(mOrigin);
    session.setDestination(mDestination);
    session.setTimeToLive(mTimeToLive);
    session.setCallback(mCallback);

    switch (mAudioEncoder) {
    case AUDIO_AAC:
      AACStream stream = new AACStream();
      session.addAudioTrack(stream);
      if (mContext!=null) 
        stream.setPreferences(PreferenceManager.getDefaultSharedPreferences(mContext));
      break;
    case AUDIO_AMRNB:
      session.addAudioTrack(new AMRNBStream());
      break;
    }

    switch (mVideoEncoder) {
    case VIDEO_H263:
      session.addVideoTrack(new H263Stream(mCamera));
      break;
    case VIDEO_H264:
      H264Stream stream = new H264Stream(mCamera);
      if (mContext!=null) 
        stream.setPreferences(PreferenceManager.getDefaultSharedPreferences(mContext));
      session.addVideoTrack(stream);
      break;
    }

    if (session.getVideoTrack()!=null) {
      VideoStream video = session.getVideoTrack();
      video.setFlashState(mFlash);
      video.setVideoQuality(mVideoQuality);
      video.setSurfaceView(mSurfaceView);
      video.setPreviewOrientation(mOrientation);
      video.setDestinationPorts(5006);
    }

    if (session.getAudioTrack()!=null) {
      AudioStream audio = session.getAudioTrack();
      audio.setAudioQuality(mAudioQuality);
      audio.setDestinationPorts(5004);
    }

    return session;

  }

  /** 
   * Access to the context is needed for the H264Stream class to store some stuff in the SharedPreferences.
   * Note that you should pass the Application context, not the context of an Activity.
   **/
  public SessionBuilder setContext(Context context) {
    mContext = context;
    return this;
  }

  /** Sets the destination of the session. */
  public SessionBuilder setDestination(String destination) {
    mDestination = destination;
    return this; 
  }

  /** Sets the origin of the session. It appears in the SDP of the session. */
  public SessionBuilder setOrigin(String origin) {
    mOrigin = origin;
    return this;
  }

  /** Sets the video stream quality. */
  public SessionBuilder setVideoQuality(VideoQuality quality) {
    mVideoQuality = quality.clone();
    return this;
  }
  
  /** Sets the audio encoder. */
  public SessionBuilder setAudioEncoder(int encoder) {
    mAudioEncoder = encoder;
    return this;
  }
  
  /** Sets the audio quality. */
  public SessionBuilder setAudioQuality(AudioQuality quality) {
    mAudioQuality = quality.clone();
    return this;
  }

  /** Sets the default video encoder. */
  public SessionBuilder setVideoEncoder(int encoder) {
    mVideoEncoder = encoder;
    return this;
  }

  public SessionBuilder setFlashEnabled(boolean enabled) {
    mFlash = enabled;
    return this;
  }

  public SessionBuilder setCamera(int camera) {
    mCamera = camera;
    return this;
  }

  public SessionBuilder setTimeToLive(int ttl) {
    mTimeToLive = ttl;
    return this;
  }

  /** 
   * Sets the SurfaceView required to preview the video stream. 
   **/
  public SessionBuilder setSurfaceView(SurfaceView surfaceView) {
    mSurfaceView = surfaceView;
    return this;
  }
  
  /** 
   * Sets the orientation of the preview.
   * @param orientation The orientation of the preview
   */
  public SessionBuilder setPreviewOrientation(int orientation) {
    mOrientation = orientation;
    return this;
  }  
  
  public SessionBuilder setCallback(Session.Callback callback) {
    mCallback = callback;
    return this;
  }
  
  /** Returns the context set with {@link #setContext(Context)}*/
  public Context getContext() {
    return mContext;  
  }

  /** Returns the destination ip address set with {@link #setDestination(String)}. */
  public String getDestination() {
    return mDestination;
  }

  /** Returns the origin ip address set with {@link #setOrigin(String)}. */
  public String getOrigin() {
    return mOrigin;
  }

  /** Returns the audio encoder set with {@link #setAudioEncoder(int)}. */
  public int getAudioEncoder() {
    return mAudioEncoder;
  }

  /** Returns the id of the {@link android.hardware.Camera} set with {@link #setCamera(int)}. */
  public int getCamera() {
    return mCamera;
  }

  /** Returns the video encoder set with {@link #setVideoEncoder(int)}. */
  public int getVideoEncoder() {
    return mVideoEncoder;
  }

  /** Returns the VideoQuality set with {@link #setVideoQuality(VideoQuality)}. */
  public VideoQuality getVideoQuality() {
    return mVideoQuality;
  }
  
  /** Returns the AudioQuality set with {@link #setAudioQuality(AudioQuality)}. */
  public AudioQuality getAudioQuality() {
    return mAudioQuality;
  }

  /** Returns the flash state set with {@link #setFlashEnabled(boolean)}. */
  public boolean getFlashState() {
    return mFlash;
  }

  /** Returns the SurfaceView set with {@link #setSurfaceView(SurfaceView)}. */
  public SurfaceView getSurfaceView() {
    return mSurfaceView;
  }
  
  
  /** Returns the time to live set with {@link #setTimeToLive(int)}. */
  public int getTimeToLive() {
    return mTimeToLive;
  }

  /** Returns a new {@link SessionBuilder} with the same configuration. */
  public SessionBuilder clone() {
    return new SessionBuilder()
    .setDestination(mDestination)
    .setOrigin(mOrigin)
    .setSurfaceView(mSurfaceView)
    .setPreviewOrientation(mOrientation)
    .setVideoQuality(mVideoQuality)
    .setVideoEncoder(mVideoEncoder)
    .setFlashEnabled(mFlash)
    .setCamera(mCamera)
    .setTimeToLive(mTimeToLive)
    .setAudioEncoder(mAudioEncoder)
    .setAudioQuality(mAudioQuality)
    .setContext(mContext)
    .setCallback(mCallback);
  }

}




Java Source Code List

net.majorkernelpanic.http.ModAssetServer.java
net.majorkernelpanic.http.ModInternationalization.java
net.majorkernelpanic.http.ModSSL.java
net.majorkernelpanic.http.TinyHttpServer.java
net.majorkernelpanic.spydroid.SpydroidApplication.java
net.majorkernelpanic.spydroid.Utilities.java
net.majorkernelpanic.spydroid.api.CustomHttpServer.java
net.majorkernelpanic.spydroid.api.CustomRtspServer.java
net.majorkernelpanic.spydroid.api.RequestHandler.java
net.majorkernelpanic.spydroid.ui.AboutFragment.java
net.majorkernelpanic.spydroid.ui.HandsetFragment.java
net.majorkernelpanic.spydroid.ui.OptionsActivity.java
net.majorkernelpanic.spydroid.ui.PreviewFragment.java
net.majorkernelpanic.spydroid.ui.SpydroidActivity.java
net.majorkernelpanic.spydroid.ui.TabletFragment.java
net.majorkernelpanic.streaming.MediaStream.java
net.majorkernelpanic.streaming.SessionBuilder.java
net.majorkernelpanic.streaming.Session.java
net.majorkernelpanic.streaming.Stream.java
net.majorkernelpanic.streaming.audio.AACStream.java
net.majorkernelpanic.streaming.audio.AMRNBStream.java
net.majorkernelpanic.streaming.audio.AudioQuality.java
net.majorkernelpanic.streaming.audio.AudioStream.java
net.majorkernelpanic.streaming.exceptions.CameraInUseException.java
net.majorkernelpanic.streaming.exceptions.ConfNotSupportedException.java
net.majorkernelpanic.streaming.exceptions.InvalidSurfaceException.java
net.majorkernelpanic.streaming.exceptions.StorageUnavailableException.java
net.majorkernelpanic.streaming.gl.SurfaceManager.java
net.majorkernelpanic.streaming.gl.SurfaceView.java
net.majorkernelpanic.streaming.gl.TextureManager.java
net.majorkernelpanic.streaming.hw.CodecManager.java
net.majorkernelpanic.streaming.hw.EncoderDebugger.java
net.majorkernelpanic.streaming.hw.NV21Convertor.java
net.majorkernelpanic.streaming.mp4.MP4Config.java
net.majorkernelpanic.streaming.mp4.MP4Parser.java
net.majorkernelpanic.streaming.rtcp.SenderReport.java
net.majorkernelpanic.streaming.rtp.AACADTSPacketizer.java
net.majorkernelpanic.streaming.rtp.AACLATMPacketizer.java
net.majorkernelpanic.streaming.rtp.AMRNBPacketizer.java
net.majorkernelpanic.streaming.rtp.AbstractPacketizer.java
net.majorkernelpanic.streaming.rtp.H263Packetizer.java
net.majorkernelpanic.streaming.rtp.H264Packetizer.java
net.majorkernelpanic.streaming.rtp.MediaCodecInputStream.java
net.majorkernelpanic.streaming.rtp.RtpSocket.java
net.majorkernelpanic.streaming.rtsp.RtspClient.java
net.majorkernelpanic.streaming.rtsp.RtspServer.java
net.majorkernelpanic.streaming.rtsp.UriParser.java
net.majorkernelpanic.streaming.video.CodecManager.java
net.majorkernelpanic.streaming.video.H263Stream.java
net.majorkernelpanic.streaming.video.H264Stream.java
net.majorkernelpanic.streaming.video.VideoQuality.java
net.majorkernelpanic.streaming.video.VideoStream.java