1

你好,所有的Android天才!Android - 視頻流到服務器

我需要幫助我的應用程序, 我有一個類在後臺記錄,並採取GPS位置。

現在的問題是,我需要實時流視頻到服務器安全(稍後..),但本地計算機會做現在真棒。

我應該怎麼做這件事?任何鏈接或幫助非常感謝!

背景記錄類:

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; 
    } 
} 

謝謝你這麼多,有一個真棒的一天!

回答

0
+0

呀,看着那個。但似乎代碼給出了很多問題。然後一個空白的標題,然後我必須在服務器端創建標題? – user2563959

+0

是的,需要在服務器上處理空白標題。 – joe

+0

你能給我一個代碼示例什麼的?十分感謝你的幫助!你是最好的。 – user2563959