Android 视频流到服务器

Android 视频流到服务器,android,android-intent,stream,video-streaming,android-2.2-froyo,Android,Android Intent,Stream,Video Streaming,Android 2.2 Froyo,我有一个在后台记录的类,并采取全球定位系统的位置 现在的问题是,我需要将视频实时传输到安全的服务器(稍后),但本地计算机现在就可以了 我该如何让这一切发生 背景记录器类别: public class RecorderService extends Service { private static final String TAG = "RecorderService"; private SurfaceView mSurfaceView; private SurfaceHo

我有一个在后台记录的类,并采取全球定位系统的位置

现在的问题是,我需要将视频实时传输到安全的服务器(稍后),但本地计算机现在就可以了

我该如何让这一切发生

背景记录器类别:

public class RecorderService extends Service {
    private static final String TAG = "RecorderService";
    private SurfaceView mSurfaceView;
    private SurfaceHolder mSurfaceHolder;
    private static Camera mServiceCamera;
    private boolean mRecordingStatus;
    private MediaRecorder mMediaRecorder;

    // GPSTracker class
    GPSTracker gps;
    Geocoder geocoder;
    String addressString;

    @Override
    public void onCreate() {
        mRecordingStatus = false;
        //mServiceCamera = CameraRecorder.mCamera;
        mServiceCamera = Camera.open();
        mSurfaceView = MainActivity.mSurfaceView;
        mSurfaceHolder = MainActivity.mSurfaceHolder;

        super.onCreate();
        if (mRecordingStatus == false)
            startRecording();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onDestroy() {
        stopRecording();
        mRecordingStatus = false;

        super.onDestroy();
    }   

     //Start recording class.
    public boolean startRecording(){

        // create class object
        gps = new GPSTracker(RecorderService.this);

        // check if GPS enabled     
        if(gps.canGetLocation()){

            double latitude = gps.getLatitude();
            double longitude = gps.getLongitude();


            Toast.makeText(getBaseContext(),"latitude: " + latitude + "  longitude: "+ longitude, Toast.LENGTH_SHORT).show();  
            Toast.makeText(getBaseContext(),GetAddress(latitude,longitude), Toast.LENGTH_SHORT).show();  

        }else{

            // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings
            gps.showSettingsAlert(); }

        gps.stopUsingGPS();



        //Try to start the backgroun recording
        try {
            Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show();

            //mServiceCamera = Camera.open();
            Camera.Parameters params = mServiceCamera.getParameters();
            mServiceCamera.setParameters(params);
            Camera.Parameters p = mServiceCamera.getParameters();

            final List<Size> listSize = p.getSupportedPreviewSizes();
            Size mPreviewSize = listSize.get(2);
            Log.v(TAG, "use: width = " + mPreviewSize.width 
                        + " height = " + mPreviewSize.height);
            p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
            p.setPreviewFormat(PixelFormat.YCbCr_420_SP);
            mServiceCamera.setParameters(p);

            try {
                mServiceCamera.setPreviewDisplay(mSurfaceHolder);
                mServiceCamera.startPreview();
            }
            catch (IOException e) {
                Log.e(TAG, e.getMessage());
                e.printStackTrace();
            }

            mServiceCamera.unlock();

            mMediaRecorder = new MediaRecorder();
            mMediaRecorder.setCamera(mServiceCamera);
            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
            mMediaRecorder.setOutputFile("/sdcard/video.mp4");
            mMediaRecorder.setVideoFrameRate(30);
            mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
            mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

            mMediaRecorder.prepare();
            mMediaRecorder.start(); 

            mRecordingStatus = true;

            return true;
        } catch (IllegalStateException e) {
            Log.d(TAG, e.getMessage());
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            Log.d(TAG, e.getMessage());
            e.printStackTrace();
            return false;
        }
    }

    //Stops Recording
    public void stopRecording() {

        Toast.makeText(getBaseContext(), "Recording Stopped", Toast.LENGTH_SHORT).show();
        try {
            mServiceCamera.reconnect();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mMediaRecorder.stop();
        mMediaRecorder.reset();

        mServiceCamera.stopPreview();
        mMediaRecorder.release();

        mServiceCamera.release();
        mServiceCamera = null;
    }

    //Gets the adress, if not it will just return nothing. 
    public String GetAddress(Double lat, Double lon)
    {
        Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
        String ret = "";
        try {
            List<Address> addresses = geocoder.getFromLocation(lat, lon, 1);
            if(addresses != null) {
                Address returnedAddress = addresses.get(0);
                StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
                for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                    strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
                }

                try{
                    //Createas a file with the GPS location.
                    FileOutputStream fos = openFileOutput("/sdcard/adress.txt", getBaseContext().MODE_WORLD_READABLE);
                    fos.write(strReturnedAddress.toString().getBytes());
                    fos.close();
                    }
                    catch (Exception e){

                    }

                ret = strReturnedAddress.toString();
            }
            else{
                ret = "No Address returned!";
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            ret = "Can't get Address!";
        }
        return ret;
    }
}
公共类记录器服务扩展服务{
私有静态最终字符串TAG=“RecorderService”;
私人SurfaceView mSurfaceView;
私人地表持有人;
专用静态摄像机;
私有布尔mRecordingStatus;
专用媒体记录器;
//GPSTracker类
全球定位系统;
地理编码器;
字符串地址字符串;
@凌驾
public void onCreate(){
mRecordingStatus=false;
//mServiceCamera=CameraRecorder.mCamera;
mServiceCamera=Camera.open();
mSurfaceView=MainActivity.mSurfaceView;
mSurfaceHolder=MainActivity.mSurfaceHolder;
super.onCreate();
如果(mRecordingStatus==false)
startRecording();
}
@凌驾
公共IBinder onBind(意向){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共空间{
停止录制();
mRecordingStatus=false;
super.ondestory();
}   
//开始录音课。
公共布尔startRecording(){
//创建类对象
gps=新的GP斯特拉克(RecorderService.this);
//检查是否启用了GPS
if(gps.canGetLocation()){
双纬度=gps.getLatitude();
double longitude=gps.getLongitude();
Toast.makeText(getBaseContext(),“纬度:”+纬度+“经度:”+经度,Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext()、GetAddress(纬度、经度)、Toast.LENGTH_SHORT.show();
}否则{
//找不到位置
//GPS或网络未启用
//要求用户在设置中启用GPS/网络
gps.showSettingsAlert();}
停止使用gps();
//试着开始背景录音
试一试{
Toast.makeText(getBaseContext(),“录制已开始”,Toast.LENGTH_SHORT.show();
//mServiceCamera=Camera.open();
Camera.Parameters params=mServiceCamera.getParameters();
mServiceCamera.setParameters(参数);
Camera.Parameters p=mServiceCamera.getParameters();
最终列表listSize=p.getSupportedPreviewSizes();
Size-mPreviewSize=listSize.get(2);
Log.v(标记“use:width=“+mPreviewSize.width
+“height=“+mPreviewSize.height”);
p、 setPreviewSize(mPreviewSize.width、mPreviewSize.height);
p、 setPreviewFormat(PixelFormat.YCbCr_420_SP);
mServiceCamera.setParameters(p);
试一试{
mServiceCamera.setPreviewDisplay(mSurfaceHolder);
mServiceCamera.startPreview();
}
捕获(IOE异常){
Log.e(标记,e.getMessage());
e、 printStackTrace();
}
mServiceCamera.unlock();
mMediaRecorder=新的MediaRecorder();
mMediaRecorder.setCamera(mServiceCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mMediaRecorder.setOutputFile(“/sdcard/video.mp4”);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(mPreviewSize.width、mPreviewSize.height);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();
mRecordingStatus=true;
返回true;
}捕获(非法状态){
Log.d(标记,例如getMessage());
e、 printStackTrace();
返回false;
}捕获(IOE异常){
Log.d(标记,例如getMessage());
e、 printStackTrace();
返回false;
}
}
//停止录制
公开作废停止录制(){
Toast.makeText(getBaseContext(),“录制已停止”,Toast.LENGTH_SHORT.show();
试一试{
mServiceCamera.reconnect();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
mMediaRecorder.stop();
mMediaRecorder.reset();
mServiceCamera.stopReview();
mMediaRecorder.release();
mServiceCamera.release();
mServiceCamera=null;
}
//获取地址,否则将不返回任何内容。
公共字符串GetAddress(双lat,双lon)
{
Geocoder Geocoder=新的地理编码器(this,Locale.ENGLISH);
字符串ret=“”;
试一试{
列表地址=地理编码器.getFromLocation(lat,lon,1);
如果(地址!=null){
返回的地址地址=地址。获取(0);
StringBuilder strReturnedAddress=新StringBuilder(“地址:\n”);
对于(int i=0;i