当前位置: 首页 > 知识库问答 >
问题:

从服务器开始播放视频时,如何避免活动繁忙时出现黑屏

阮才俊
2023-03-14

我正在打开一个点击按钮的活动,下一个活动是从服务器播放视频,如果我点击按钮,它发生了黑色和5-6秒后,它开始播放视频,如何避免黑屏?

下面是我的代码:

mPreview=new SurfaceView(getApplicationContext()); 
l1.addView(mPreview); 
holder = mPreview.getHolder(); 
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
extras = getIntent().getExtras(); 

以下内容为surfacecreted方法。

        path = "http://www.pixintro.com/upload/video/Benetton.mp4";
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(Environment.getExternalStorageDirectory()+"/Benetton.mp4");
        mMediaPlayer.setDataSource(path);
        mMediaPlayer.setDisplay(holder);
        mMediaPlayer.prepare();
        mMediaPlayer.setOnBufferingUpdateListener(this);
        mMediaPlayer.setOnCompletionListener(this);
        mMediaPlayer.setOnPreparedListener(this);
        mMediaPlayer.setOnVideoSizeChangedListener(this);
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

public void onPrepared(MediaPlayer mediaplayer){
       mIsVideoReadyToBePlayed = true;
       if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown){
               holder.setFixedSize(mVideoWidth, mVideoHeight);
               mMediaPlayer.start();
       }
}

共有1个答案

燕文昌
2023-03-14

您可以使用异步任务。当处理在doInBackground()中完成时,即在后台。您可以显示一个进度对话框(onPreExecute()),该对话框在任务完成后立即被取消(onPostExecute)。

public class DisplayActivity extends Activity {
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen);
          // create surface view etc
              new Operation().execute();
}



}

 private class Operation extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
    // code to be executed in background thread 

    for(int i=0;i<5;i++) {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    return "Executed";
    } 

    @Override
    protected void onPostExecute(String result) {
    // runs on UI thread and updated UI after executing doInBackground
    progressDialog.dismiss();
    }

    @Override
    protected void onPreExecute() {
    ProgressDialog progressDialog = ProgressDialog.show(MainActivity.this, "Title ", "Loading...");
    progressDialog.show();

    }

    @Override
    protected void onProgressUpdate(Void... values) {
    // runs on UI thread and starts first

    }
    } 
 类似资料:
  • 我正在开发一个音频播放器,它可以在后台播放音频文件。我的问题是,当录像机或视频播放器启动时,我需要暂停音频播放器。 有什么方法可以处理这个任务吗?例如,我有来处理这些调用。当我接到呼叫或wnat呼叫时,我们可以使用呼叫状态暂停播放器。我想为录像机或视频播放器以及相同的场景。当视频/录制开始时,我需要暂停音频播放器。

  • 如果我在任何Android音乐播放器中播放音乐,然后用介绍视频启动我的应用程序(用MediaPlayer处理)音乐停止。我想避免(音乐继续播放),因为我的应用程序介绍视频本身没有声音。 当MediaPlayer启动它的内容时,是否可以避免获得音频焦点?(MediaPlayer.start()-->AudioManager为音乐播放器分派一个AudioFocusChange)

  • 在我的应用程序中,我想显示来自服务器URI路径的视频,在这里,第一次播放视频,当我想第二次播放视频时,视频没有播放,并显示一个弹出窗口,如无法播放此视频 下面是我的错误 提前谢谢。

  • 问题内容: 我正在尝试使用Swift从服务器播放视频。 我已经导入了 MediaPlayer 框架,这是我的代码: 当我在模拟器中运行时,我只会看到一个黑匣子,但是无论从哪里尝试加载视频,都无法播放视频。 更新 这是当前代码 这段代码有趣地播放了大约2秒钟的视频,然后再次变黑! 问题答案: 更新2019,Swift 4: 在iOS 9.0中不推荐使用MPMovieControlStyle”:在AV

  • 我已经创建了一个android应用程序,使用媒体播放器播放文本到语音文件,但是如果其他音频/视频开始播放,那么我的音频也会播放,即同时播放两个音频。 有没有办法在开始另一个音频/视频之前停止第一个音频。 是否有任何广播接收器会在其他音频开始时被调用。 我用过- layer.play播放音频。 和暂停音频。 任何帮助都将不胜感激。

  • 我已经建立了我的音乐列表(RecyclerView)中的每一项都有两个按钮,第一个播放音乐,第二个暂停停止,但当我点击播放两个音频时,两个启动,而我希望第一个停止。这是我的适配器(标志是在播放音频时将图像视图从播放更改为暂停) 非常感谢。