2016-04-30 10 views
11

मैं अपने एंड्रॉइड डिवाइस पर रास्पबेरी पीआई से स्ट्रीम स्ट्रीम वीडियो के लिए एक एप्लिकेशन बना रहा हूं। मैं इस धारा खेलने के तीन कार्यात्मक तरीके होते हैं:आरटीएसपी लाइव वीडियो स्ट्रीमिंग

rtsp://media.smart-streaming.com/mytest/mp4:sample_phone_150k.mp4

  1. मीडिया प्लेयर + SurfaceView
  2. VideoView
  3. Intent.ACTION_VIEW

समस्या आवेदन ऊपर निभाता है^धारा लेकिन मेरा खेल नहीं है (आरटीएसपी: //192.168.1.143: 8554/vid.mp4) ... लेकिन वीएलसी करता है।

मैंने कई वीडियो प्रारूपों में वीएलसी और LIVE555 के साथ स्ट्रीमिंग करने का प्रयास किया है और मैंने फोन पर रिकॉर्ड किए गए वीडियो को चलाने का भी प्रयास किया है।

यहाँ मेरी कोड है:

//Stream methods 0 = MediaPlayer & SurfaceView, 1 = VideoView, 2 = Native Video Player 
final int STREAM_USING = 0; 

//MediaPlayer on surfaceView 
String streamPath = "rtsp://192.168.1.143:8554/vid.mp4";//"rtsp://media.smart-streaming.com/mytest/mp4:sample_phone_150k.mp4";//"rtsp://192.168.1.143:8554/vid.mp4";//;"rtp://239.255.0.1:5004/"; 
Uri streamUri; 
private MediaPlayer mediaPlayer; 
private SurfaceView surfaceView; 
private SurfaceHolder surfaceHolder; 

//VideoView 
VideoView videoView; 

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

    //MediaPlayer 
    switch (STREAM_USING) { 
     case 0: { 
      surfaceView = (SurfaceView) findViewById(R.id.surfaceView); 
      surfaceHolder = surfaceView.getHolder(); 
      surfaceHolder.setFixedSize(800, 480); 
      surfaceHolder.addCallback(this); 
      surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
      mediaPlayer = new MediaPlayer(); 

      mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
       @Override 
       public boolean onError(MediaPlayer mp, int what, int extra) { 
        if (what == MediaPlayer.MEDIA_ERROR_SERVER_DIED) { 
         mediaPlayer.release(); 
         mediaPlayer = new MediaPlayer(); 
         //mediaPlayer.stop(); 
         play(); 
        } 
        return false; 
       } 
      }); 

      mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { 
       @Override 
       public void onBufferingUpdate(MediaPlayer mp, int percent) { 
        Toast.makeText(getApplicationContext(), "BUFF : " + percent, Toast.LENGTH_SHORT).show(); 
        if (!mediaPlayer.isPlaying()) { 
         mediaPlayer.start(); 
        } 
       } 
      }); 

      //Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
      //i.setType("video/*"); 
      //startActivityForResult(i, 1234); 
      streamUri = Uri.parse(streamPath); 
      play(); 
      break; 
     } 
     case 1: { 
      videoView = (VideoView) findViewById(R.id.videoView); 
      videoView.setVideoURI(Uri.parse(streamPath)); 
      MediaController mediaController = new MediaController(this); 
      //mediaController.setAnchorView(videoView); 
      videoView.setMediaController(mediaController); 
      videoView.requestFocus(); 
      try { 
       videoView.start(); 
      } 
      catch (SecurityException se) { 
       Log.e("SE", se.getMessage()); 
       se.printStackTrace(); 
      } 
      break; 
     } 
     case 2: { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(streamPath)); 
      startActivity(intent); 
      break; 
     } 
     default: { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(streamPath)); 
      startActivity(intent); 
     } 
    } 
} 

private void play() { 
    try { 
     //final FileInputStream fis = new FileInputStream(streamPath); 
     mediaPlayer.stop(); 
     mediaPlayer.reset(); 
     mediaPlayer.setDataSource(MainActivity.this, streamUri); 
     //mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     mediaPlayer.prepareAsync(); 
     mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       //mediaPlayer.reset(); 
       mediaPlayer.start(); 
      } 
     }); 


    } catch (SecurityException se) { 
     Log.e("SE", se.getMessage()); 
     se.printStackTrace(); 
    } catch (IOException ie) { 
     ie.printStackTrace(); 
    } 
} 

किसी भी मदद की सराहना की है, मैं एक सप्ताह के लिए कोशिश कर रहा है यह कोई सफलता :(

+0

क्या बारे में logcat प्रदान एंड्रॉइड मीडिया एपीआई जब आप उस आरटीएसपी यूरी को लोड करने का प्रयास करते हैं ?? मीडिया प्लेयर और वीडियो व्यू इसके साथ क्या कर रहा है? –

+0

ठीक है, मैं कल – ciprianoss

+0

देर उत्तर के लिए क्षमा करें इसके साथ वापस मिल जाएगा: आरटीपी मामला: 'ई/MediaPlayer: त्रुटि (1, -1003)' RTSP मामला: 'ई/MediaPlayer: त्रुटि (1, - 2147483648) ' – ciprianoss

उत्तर

2

आप पहले से ही दो तरह से जोड़ा साथ काम करने के पाने के लिए अभी मैं बिट संशोधन जोड़ना चाहते हैं। मैंने ralalted कार्य स्ट्रीमिंग किया है। मैंने wowza के साथ rtsp का उपयोग किया है। कुछ तरीकों से मैं आपको बता दूंगा

इसे एक बार आज़माएं और अगर आपको कोई समस्या हो तो मुझे बताएं। अगर आपका स्ट्रीमिंग vlc में काम कर रहा है ठीक है तो ऐप पक्ष के साथ कुछ समस्या है। यदि ये विधियां काम नहीं कर रही हैं फिर विभिन्न फोन के साथ प्रयास करें। यह आपकी मदद भी करता है।

1. videoview साथ प्रयास करें

vvVideoPlay = (VideoView) findViewById(R.id.vvVideoPlay); 
MediaController mediaController = new MediaController(this); 

String videoUrl = "rtsp://192.168.1.143:8554/vid.mp4"; 

    mediaController.setAnchorView(vvVideoPlay); 
    Uri uri = Uri.parse(videoUrl); 
    vvVideoPlay.setVideoURI(uri); 
    vvVideoPlay.setMediaController(mediaController); 
    vvVideoPlay.requestFocus(); 

    vvVideoPlay.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 

      mp.start(); 
      pdialog.dismiss(); 
      mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 

       @Override 
       public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 

        mp.start(); 
       } 
      }); 
     } 
    }); 

2. प्रत्यक्ष अपने फोन को खिलाड़ी के साथ प्रयास करें

startActivity(new Intent(Intent.ACTION_VIEW, 
       Uri.parse("rtsp://192.168.1.143:8554/vid.mp4"))); 

3. तीसरा तरह से कस्टम खिलाड़ी के साथ इस पुस्तकालय के साथ करने की कोशिश अपने एप्लिकेशन।

चरण 1। यह आपके Gradle

compile "fm.jiecao:jiecaovideoplayer:4.7.0" 

चरण 2 में जोड़े। इसे अपने वीडियो प्ले के रूप में एक्सएमएल लेआउट में जोड़ें।

<fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard 
    android:id="@+id/videoPlayer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

चरण 3. यहां से कैसे अपनी कक्षा में इस पुस्तकालय का उपयोग करने के चेक,

public class PlayVideoActivity extends BaseActivity { 

@BindView(R.id.videoPlayer) 
JCVideoPlayerStandard mVideoPlayer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    restoreFromIntent(getIntent()); 
} 

@Override 
public int getLayout() { 
    return R.layout.activity_play_video; 
} 


// get video path from intent and play the video here 
private void restoreFromIntent(Intent intent) { 

    mVideoPlayer.setUp("rtsp://192.168.1.143:8554/vid.mp4" 
      , JCVideoPlayerStandard.SCREEN_LAYOUT_LIST, ""); 
} 

@Override 
public void onBackPressed() { 
    if (JCVideoPlayer.backPress()) { 
     return; 
    } 
    super.onBackPressed(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    JCVideoPlayer.releaseAllVideos(); 
} 
} 

आशा यह आप अपने problem.Thanks ठीक करने के लिए मदद मिलेगी

+0

आपके उत्तर के लिए धन्यवाद, मैं आज बाद में कोशिश कर रहा हूं और देख सकता हूं कि यह काम करता है या नहीं। मुझे नहीं लगता कि आप कुछ समझ गए हैं, मैं वीएलसी के साथ अपनी स्ट्रीम खेल सकता हूं लेकिन अपने कोड के साथ नहीं, हालांकि टेस्ट लिंक स्ट्रीम मेरे कोड के साथ खेलती है .. सभी मामलों में। – ciprianoss

+0

हाँ मुझे यह तुम्हारा बिंदु मिल गया है, इस तरह मैं आपको कुछ सुझाव देता हूं। यह आपके कोड को डीबग करने में आसान और आसान बनाने में मदद करता है। – Saveen

+0

ठीक है, मैं वर्तमान में आज एक विकल्प की कोशिश कर रहा हूं, तो मैं आपकी कोशिश करूँगा – ciprianoss

संबंधित मुद्दे