2016-05-16 2 views
1

J'ai un DVR comme un serveur qui est connecté à un appareil photo.J'essaie de diffuser la vue de la caméra dans mon téléphone android.J'ai réussi à le faire via LAN, mais a échoué à 3g/cellulaireRecevoir rtsp flux FROM DVR

Je l'ai fait

Port expédition

utilisation DynDNS

app 3e appelé Meye (seule application qui fonctionne dans mon cas)

Voici le code

public class liveActivity extends Activity{ 

final static String USERNAME = "admin"; 
final static String PASSWORD = ""; 
public static String domainName = "xxx.dvrdns.org"; 
public static int PORT = 2218; 
public static final String URL = "rtsp://192.168.0.xxx:554/user=" + USERNAME + "&password=" + PASSWORD + "&channel=1&stream=0.sdp?"; 
public static final String URL2 = "rtsp://" + domainName + ":" + PORT + "/user=" + USERNAME + "&password=" + PASSWORD + "&channel=1&stream=1.sdp?real_stream--rtp-caching=100"; 

private MediaPlayer mPlayer1; 
private MediaPlayer mPlayer2; 
SurfaceHolder.Callback mCallback1; 
SurfaceHolder.Callback mCallback2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_live); 

    mPlayer1 = new MediaPlayer(); 

    mCallback1 = new SurfaceHolder.Callback() { 
     @Override 
     public void surfaceCreated(SurfaceHolder surfaceHolder) { 

      try { 

       mPlayer1.setDataSource(liveActivity.this, Uri.parse(URL2)); 
       mPlayer1.setDisplay(surfaceHolder); 
       mPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mediaPlayer) { 
         mPlayer1.start(); 
        } 
       }); 
       mPlayer1.prepareAsync(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) { 

     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 

      mPlayer1.release(); 
     } 
    }; 

    final SurfaceView surfaceView1 = 
      (SurfaceView) findViewById(R.id.surfaceView1); 
    // Configure the Surface View. 
    surfaceView1.setKeepScreenOn(true); 
    // Configure the Surface Holder and register the callback. 
    SurfaceHolder holder1 = surfaceView1.getHolder(); 
    holder1.addCallback(mCallback1); 
    holder1.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

} 

P.S J'ai entendu d'un ingénieur logiciel qui est RTSP pour only.Is locaux que pourquoi je ne peux pas diffuser via 3G?

Répondre

0

C'est une vieille question, mais juste au cas où ...

votre solution est Compte tenu de travailler dans un réseau local, sans doute sur le WiFi, l'approche elle-même sonne bien. Le problème que vous rencontrez probablement est que votre fournisseur de réseau cellulaire ne prend pas en charge les flux RTSP, que ce soit le téléchargement, le téléchargement ou les deux.

Ces types de restrictions ne sont pas rares dans les réseaux mobiles - certains opérateurs bloquaient tous les protocoles de transmission ascendante afin d'éviter les services VoIP par exemple.