2012-02-04 15 views
21

你好我創建一個應用程序,它會起到livestream.com的RTSP直播頻道。 我用我的應用程序內的意圖如下啓動播放器:RTSP視頻性能,瀏覽器觸發意圖VS我的應用程序觸發的意圖

  iPlayer = new Intent(Intent.ACTION_VIEW); 
      //iPlayer.setType("video/*"); 
      iPlayer.setData(Uri.parse(videoUrl)); 
      startActivity(iPlayer); 

當媒體播放器是通過我的應用程序啓動時,視頻表現非常差。它停止每隔幾秒緩衝一次,播放幾秒鐘並暫停以再次緩衝。

另一方面,如果我在android瀏覽器中打開url(例如,http://m.livestream.com/abcalbania),它在該頁面上有一個視頻標籤並觸發視頻播放器。這段時間,視頻運行非常流暢。

任何想法,爲什麼這可能發生嗎?以及如何解決這個問題?

  • 我不想按照意圖啓動瀏覽器URL。
  • 這是愛特梅爾皮質A9芯片組完成了Android 2.3.4
+0

我假設,當你從你的應用程序啓動意圖時,它打開了在設備視頻播放器 – 2012-07-16 16:43:39

回答

0

使用此代碼光滑STREAM

String videoUrl = "rtmp://mystream"; 
Intent i = new Intent(android.content.Intent.ACTION_VIEW); 
i.setDataAndType(Uri.parse(videoUrl), "video/*"); 
startActivity(i); 
0

爲什麼不是你在自己的活動玩這個,創建活動和渲染像

私人字符串PATH2 = 「rtsp://形式......」 視頻視圖。
Uri video = Uri.parse(path2);

mVideoView.setVideoURI(video); 
mVideoView.setMediaController(new MediaController(this)); 
mVideoView.requestFocus(); 
mVideoView.postInvalidateDelayed(100); 
mVideoView.start(); 

此外,你可以在開始播放之前進行緩衝,也許5秒和連續緩衝將是快速的。你可以自己控制更多的東西。

1

的問題是由可能不被您的播放器支持的編解碼器引起的。

例如我有一個與MPEG音頻編碼解碼器創建視頻與H.264視頻編解碼器一起。

如果我通過我的應用程序啓動視頻,視頻運行平穩,但如果我在Ooyala Hook Player中啓動視頻,它的性能很差,它每3秒播放一次視頻,原因是該視頻流使用MPEG音頻編解碼器而不是支持的AAC Audio編解碼器。

你會找到答案:

使用何種編解碼器創建視頻德,哪些是由 您的播放器支持?

0

Android的MediaPlayer處理得非常好RTSP - 不要打開外部應用程序 - 這不是必要的,也不是產品明智的錯誤。

關於你的問題 - 瀏覽器可以發送另一參數,視頻播放器,可以幫助視頻播放流暢,我沒有檢查它,但它聽起來像你描述的唯一可能的選擇。額外參數的例子可能是視頻分辨率/編碼/尺寸..您可以使用MediaMetaDataRetriever輕鬆獲得所有這些參數。

如果您不想使用原生VideoView或MediaPlayer,您可以隨時將外部播放器添加到您的 應用程序,如libVLCVitamio

我推薦使用Vitamio,非常容易使用和整合。 LibVLC使用本地代碼,這意味着您必須使用ndk構建它並將它的庫添加到您的項目中。 你可以找到here如何做到這一點。

-1

Android視頻視圖支持RTSP很好地不需要將意圖傳遞給其他應用程序。嘗試使用此代碼,傳遞視頻視圖聲明的xml並在此活動中查找它。

公共類的VideoPlayer擴展活動
{

private VideoView mVideoView;    
String videoURL=""; 
static Utility utility; 
static Context context; 
//MediaController mediaController; 
//int iCurrentpostion=0; 
int counter=0; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{   
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab_video_player);   
     setupViews(); 
} 
private void setupViews() 
    { 
     context=VideoPlayer.this; 
     //utility=new Utility(VideoPlayer.this); 
     showProgressDialog("Please wait", "Loading video.."); 

     //videoURL=getIntent().getExtras().getString("url");    
     mVideoView=(VideoView)findViewById(R.id.xvdvwTab); 
     // mediaController=new MediaController(context);    
     // mVideoView.setMediaController(mediaController); 



     mVideoView.setOnPreparedListener(new OnPreparedListener() 
     { 
      @Override 
      public void onPrepared(MediaPlayer mp) 
      { 

       utility.hideProgressDialog(); 

       mVideoView.start();      
       mVideoView.requestFocus(); 

      } 
     }); 

     mVideoView.setOnCompletionListener(new OnCompletionListener() 
     { 

      @Override 
      public void onCompletion(MediaPlayer mp) 
      { 
       finish(); 
      } 
     }); 


     mVideoView.setOnErrorListener(new OnErrorListener() 
     { 

     @Override 
     public boolean onError(MediaPlayer mp, int what, int extra) 
     { 
      utility.hideProgressDialog(); 
      return false; 
     } 
    }); 

     playVideoFile();  
    } 

private void playVideoFile() 
    { 

      try 
      {     
       mVideoView.setVideoURI(Uri.parse("your url")); 
      } 
      catch (Exception e) 
      { 
       utility.hideProgressDialog(); 
       if (mVideoView != null) 
       {     
        mVideoView.stopPlayback(); 
       } 
      } 
     } 
@Override 
protected void onResume() 
    { 
     /*if(mVideoView!=null) 
     { 
      //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
      mVideoView.requestFocus(); 
      if(iCurrentpostion!=0) 
       mVideoView.seekTo(iCurrentpostion); 
      mVideoView.start();   
     } 
     super.onResume();*/ 
    } 

@Override 
protected void onDestroy() 
{ 
    try 
    { 
     if (mVideoView != null) 
     {    
      mVideoView.stopPlayback(); 
      mVideoView=null;     
     } 
     super.onDestroy(); 
    } catch (Exception e) 
    {}    
} 

public void showProgressDialog(String title,String Message) 
{ 
     hideProgressDialog(); 
     progressDialog=new ProgressDialog(mActivity); 
     progressDialog.setTitle(title); 
     progressDialog.setMessage(Message);       
     if(Constant.isActivityisRunning) 
      progressDialog.show(); 

} 
public void hideProgressDialog() 
{ 
    if (progressDialog != null) 
    { 
     if (progressDialog.isShowing()) 
     { 
      progressDialog.dismiss(); 
      progressDialog = null; 
     } 
    } 
} 

}

+0

嘆息。這個代碼,就像我能找到的其他東西一樣,給出了「錯誤(100,0)」。 http://stackoverflow.com/questions/25215724/rtsp-1080p-live-streaming-android-client-gets-error-100-0 – 2014-08-24 00:19:17

-1

我想播放的視頻通過異步獲得更好的性能。我的代碼是:

private class myAsync extends AsyncTask<Void, Integer, Void> { 
     int duration = 0; 
    //int current = 0; 
    @Override 
    protected Void doInBackground(Void... params) { 
     videoView.setOnPreparedListener(new OnPreparedListener() { 

      public void onPrepared(MediaPlayer mp) { 
       progressDialog.dismiss(); 
       videoView.seekTo(check); 
       videoView.start(); 
       duration = videoView.getDuration(); 
      } 
     }); 

     do { 


      current = videoView.getCurrentPosition(); 
      System.out.println("duration - " + duration + " current- " 
        + current); 


     } 

      if (sync.isCancelled()) 
       break; 

     } while (current != duration || current == 0); 

     return null; 
    } 

} 
相關問題