1

안녕하세요 모든 안드로이드 천재!안드로이드 - 서버로 비디오 스트림

내 앱에 도움이 필요합니다. 나는 백그라운드에서 기록하고 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

이 링크를 사용하면 서버에 장치에서 비디오를 스트리밍 할 수있는 방법을 보여줍니다 http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

+0

그래, 그 보았다. 그러나 코드가 많은 문제를 일으키는 것으로 보입니다. 그리고 빈 헤더는 서버 측에서 헤더를 생성해야합니까? – user2563959

+0

예, 서버에서 빈 헤더를 처리해야합니다. – joe

+0

코드 예를 들어 주시겠습니까? 도움을 많이 주셔서 감사합니다! 당신은 최고예요. – user2563959