- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的问题是应用程序在 prepareAsync 中停留了大约 3-4 秒:
这需要很长时间,所以我需要改变一些东西,以尽量减少它停留的时间。
这是我的代码:
if (path_to_play == "") {
fragmentNavigator.setErrorMessage("notif test: Video url cannot be accessed");
}
setSurfaceHolder();
updateStatistics();
loading.setVisibility(View.VISIBLE);
break;
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(path_to_play);
if ((holder != null) && (holder.getClass() != null) && holder.getSurface().isValid()) {
mMediaPlayer.setDisplay(holder);
} else {
LogService.log(TAG, "notif test: holder: " + holder);
setSurfaceHolder();
}
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setOnErrorListener(this);
mMediaPlayer.setOnSeekCompleteListener(this);
mMediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
LogService.log(TAG, "notif test: IllegalArgumentException called");
LogService.err(TAG, e.getMessage(), e, 1);
} catch (IllegalStateException e) {
LogService.log(TAG, "notif test: IllegalStateException called");
LogService.err(TAG, e.getMessage(), e, 1);
} catch (IOException e) {
LogService.log(TAG, "notif test: IOException called");
doCleanUp();
try {
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (NullPointerException e) {
LogService.log(TAG, "notif test: NullPointerException called");
LogService.err(TAG, e.getMessage(), e, 1);
}
public void onPrepared(MediaPlayer mediaplayer) {
startVideoPlayback(); //function that starts the video
}
private void startVideoPlayback() {
LogService.log(TAG, "startVideoPlayback()");
if (holder.getSurface() == null) {
setSurfaceHolder();
}
if (record_canceled) {
wasPaused = true;
LogService.log(TAG, "waspaused intent: " + wasPaused);
}
if (/* VideoDataManager.getInstance().getVideoRecorded() || */wasPaused) {
LogService.log(TAG, "seek");
mMediaPlayer.seekTo(100);
play.setImageResource(R.drawable.play);
} else if (record_canceled) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
}
play.setImageResource(R.drawable.play);
} else {
LogService.log(TAG, "dont seek: " + wasPaused);
mMediaPlayer.start();
mMediaPlayer.seekTo(100);
wasPaused = false;
play.setImageResource(R.drawable.pause);
}
updateButtonStates();
updateStatistics();
loading.setVisibility(View.INVISIBLE);
if (VideoDataManager.getInstance().getVideoRecorded() && wasPaused) {
LogService.log(TAG, "------- pause the new recorded video, setVideoRecorded(false)");
// VideoDataManager.getInstance().setVideoRecorded(false);
}
if (VideoDataManager.getInstance().getVideoRecorded() && mReloadVideo) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// NetworkInfo ni = cm.getActiveNetworkInfo();
// if ((ni != null) && (ni.getState() ==
// NetworkInfo.State.CONNECTED)) {
// fragmentNavigator.uploading();
// }
mReloadVideo = false;
} else if ((VideoHolderActivity.notificationBar.getTextMessageTag(VideoHolderActivity.notificationTextMessage).equals("new") || VideoHolderActivity.notificationBar.getTextMessageTag(VideoHolderActivity.notificationTextMessage).equals("gcm")) && (all_videos.size() > 1)) {
fragmentNavigator.BackButtonForNotification();
VideoDataManager.getInstance().setVideoRecorded(false);
} else if (runOfflineReload) {
setVideoPlayback();
runOfflineReload = false;
}
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
LogService.log(TAG, "-------------------Onbuffering time: " + (System.currentTimeMillis() - startTimePrepare) + "||||percentage: " + percent);
if (isAsync) {
LogService.log(TAG, "-------------------Onbuffering time: " + (System.currentTimeMillis() - startTimePrepare));
mIsVideoReadyToBePlayed = true;
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown && pm.isScreenOn()) {
startVideoPlayback();
downloadService();
mp.setOnBufferingUpdateListener(null);
isAsync = false;
}
}
}
最佳答案
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnErrorListener(....);
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
playButton.setClickable(true);
mp.start();
}
});
}
关于android - MediaPlayer 在 prepareAsync 上需要很长时间,如何最大限度地减少时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16851621/
这个问题在这里已经有了答案: Isn't an Int64 equal to a long in C#? (2 个答案) 关闭 9 年前。 它不应该是一个整数类型吗? 这样,一些使用 int 的函数
当我遇到一些我想知道的事情时,我正忙着解析一个二进制文件。 Stream.Position属性的类型为Int64或long。为什么是这样?因为流中的位置不能为负,所以使用 UInt64 不是更有意义吗
所以第一部分是我从用户那里获得输入,在本例中,输入是“1”作为从另一个函数接收的字符值。 printf ("\nPlease enter 1, 2, 3 or q: "); option =
我正在尝试使用以下代码从 REST 服务返回 JSON: $categories = $categoriesController->listAll(); if($categories){ hea
我阅读了文档,它说 long 是 %li,但打印输出返回为 -2147024891。是什么赋予了? 最佳答案 您甚至没有提供要打印的号码,但我猜您已经无意中发现了签名打印和未签名打印之间的区别。 使用
我正在创建自定义购物车,我正在构建一个查询,该查询从检索我刚刚保存到购物车表中的 session_id 开始。我知道这个值被保存了,我在 mysql 命令行运行这个查询,它返回我需要的但我没有将值放入
我有一个包含 textView 的 scrollView。如果文本很长并且不适合屏幕,我想增加 textView 高度(我想我可以通过添加 NSLayoutConstraint outlet 并修改它
我有一个基本的数据库处理程序类,其中有一个使用 PDO::FETCH_ASSOC 参数返回结果集的公共(public)方法: public function resultSet() { $th
在后台线程中,我调用 PublishSubject.onNext(); 并在主线程中通过 subscribe(PublishSubject.filter(message -> message.getI
我想知道为什么 Amazon Web Services 控制台登录页面有这么长的 url?为什么不只发布数据而不显示其中包含大量数据的冗长 url。以这种方式实现有什么充分的理由吗? 最佳答案 我认为
这个问题在这里已经有了答案: Can I mix MySQL APIs in PHP? (4 个答案) 关闭 6 年前。 希望我犯了一个快速而明显的错误,我浏览了 previous question
我得到了答案:如果我禁用了cookie,那么使用URL重定向我可以传递JSESSIONID,但我的URL已经很长,因为我使用它有约束的GET方法。那怎么办我应该使用我的 session 吗?我希望我的
目前,当我使用 DOMDocument 对象并调用 saveHTML() 时,它会自动添加一些我不需要的 html 标签。我尝试了此处建议的解决方案 ( https://stackoverflow.c
我是一名优秀的程序员,十分优秀!