【问题标题】:rtsp video performance as Browser triggered intent vs my application triggered intentrtsp 视频性能作为浏览器触发的意图与我的应用程序触发的意图
【发布时间】:2012-02-26 15:18:54
【问题描述】:

您好,我正在创建一个可以播放 livestream.com 的 rtsp 直播频道的应用。 我在我的应用程序中使用意图启动播放器,如下所示:

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

通过我的应用程序启动媒体播放器时,视频性能很差。它每隔几秒钟就停止缓冲,播放几秒钟,然后暂停以再次缓冲。

另一方面,如果我在 android 浏览器中打开 url(例如http://m.livestream.com/abcalbania),它会在该页面上有一个视频标签并触发视频播放器。这一次,视频运行非常流畅。

知道为什么会发生这种情况吗?以及如何解决这个问题?

  • 我不想启动浏览器 URL 作为意图。
  • 这是在装有 Android 2.3.4 的 Atmel cortex A9 芯片组上完成的

【问题讨论】:

  • 我假设当您从应用程序中触发 Intent 时,它会在设备视频播放器中打开

标签: android video rtsp android-mediaplayer


【解决方案1】:

问题是由您的播放器可能不支持的编解码器引起的。

例如,我有一个使用 MPEG 音频编解码器和 H.264 视频编解码器创建的视频。

如果我通过我的应用程序启动视频,视频运行流畅,但如果我在Ooyala Hook Player 启动视频,它的性能很差,它每 3 秒播放一次视频,原因是流使用 MPEG 音频编解码器而不是支持的 AAC 音频编解码器。

你会找到答案:

什么编解码器用于创建视频,以及支持什么 你的播放器?

【讨论】:

    【解决方案2】:

    使用此代码平滑 STREAM

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

    【讨论】:

      【解决方案3】:

      为什么不在你自己的活动中播放这个,创建活动并渲染视频视图

      私有字符串 path2 = "rtsp://...";
      uri 视频 = Uri.parse(path2);

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

      您还可以在开始播放之前缓冲 5 秒,然后连续缓冲会更快。你可以自己控制更多的东西。

      【讨论】:

        【解决方案4】:

        Android 的 MediaPlayer 可以很好地处理 RTSP - 不要打开外部应用程序 - 这不是必需的,而且在产品方面是错误的。

        关于您的问题 - 浏览器可能会向视频播放器发送另一个参数,以帮助视频播放流畅,我没有检查它,但这听起来像是您所描述的唯一可能的选择。额外参数的示例可能是视频分辨率/编码/大小..您可以使用MediaMetaDataRetriever轻松获取所有这些参数。

        如果您不想使用本机 VideoView 或 MediaPlayer,您可以随时将外部播放器添加到您的 应用程序,例如 libVLCVitamio

        我推荐使用 Vitamio,它非常易于使用和集成。 LibVLC 是本机代码,这意味着您必须使用 ndk 构建它并将其库添加到您的项目中。 你可以找到here 怎么做。

        【讨论】:

          【解决方案5】:

          Android 视频视图很好地支持 RTSP url,无需将意图传递给其他应用程序。尝试使用此代码,传递带有视频视图声明的 xml,并在此活动中找到它。

          公共类 VideoPlayer 扩展了 Activity
          {

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

          }

          【讨论】:

          【解决方案6】:

          我认为通过异步播放视频以获得更好的性能。我的代码是:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多