Android MediaPlayer:准备好的视频需要 250 毫秒才能开始播放

2023-12-21

当我使用prepareAsync()播放视频,然后在视频准备好后调用start()时,从start()调用到视频实际开始播放大约需要250毫秒。事情就是这样吗,还是这里发生了一些有趣的事情?请注意,视频位于 raw 目录中。在我的活动的 OnCreate 中,我有:

private VideoView vv;
private MediaPlayer mp = new MediaPlayer();
vv = (VideoView)findViewById(R.id.vv);
vv.getHolder().addCallback(this);
mp.reset();
mp.setDisplay( vv.getHolder() );
mp.setDataSource( this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.moviename) );
Log.d(TAG,"video is preparing");
mp.prepareAsync();

然后是监听器:

@Override
public void onPrepared(MediaPlayer arg0) {
   Log.d(TAG, "video is prepared");
   mp.start();
}

实际上我的代码比这更复杂。用户点击按钮即可播放视频,也可以选择不同的视频。我有一个隐藏视频的图像,在 mp.start() 的一定毫秒数后,我将该图像拉开并显示视频。在我的设备上,我必须将其设置为 250 毫秒,才能可靠地不显示视频以外的其他内容(某些内容要么是黑色的,要么是上一个播放的视频的最后一帧)。

我想知道你是否可以从我的 logcat 中看出这有什么不对劲。我对标题不是 ButtonBookActivity 的消息感到好奇。他们正常吗?这些是mp4。请注意,在这种情况下准备视频只需要 120 毫秒。

04-15 13:30:05.600: D/ButtonBookActivity(1238): video is reset
04-15 13:30:05.620: I/NuCachedSource2(83): ERROR_END_OF_STREAM
04-15 13:30:05.630: D/AwesomePlayer(83): Failed to open file, all profile flags have to set through setprop method.
04-15 13:30:05.630: I/MPEG4Extractor(83):  NON-QT MODE DECIDED 
04-15 13:30:05.640: I/SampleTable(83): There are reordered frames present.
04-15 13:30:05.640: D/ButtonBookActivity(1238): video is preparing
04-15 13:30:05.640: I/OMXCodec(83): [OMX.Nvidia.h264.decode] AVC profile = 77 (Main), level = 32
04-15 13:30:05.640: I/OMXCodec(83): [OMX.Nvidia.h264.decode] video dimensions are 800 x 1280
04-15 13:30:05.640: I/OMXCodec(83): [OMX.Nvidia.h264.decode] Crop rect is 800 x 1280 @ (0, 0)
04-15 13:30:05.760: D/ButtonBookActivity(1238): video is prepared
04-15 13:30:06.540: D/ButtonBookActivity(1238): touch event
04-15 13:30:06.540: D/ButtonBookActivity(1238): button clicked
04-15 13:30:06.550: D/ButtonBookActivity(1238): calling playmovie in onTouch callback
04-15 13:30:06.550: D/ButtonBookActivity(1238): playing movie
04-15 13:30:06.550: D/ButtonBookActivity(1238): delaying movie reveal
04-15 13:30:06.560: D/NvOsDebugPrintf(83): Allocating new output: 800x1280 (x 12)
04-15 13:30:06.570: I/OMXCodec(83): [OMX.Nvidia.h264.decode] video dimensions are 800 x 1280
04-15 13:30:06.570: I/OMXCodec(83): [OMX.Nvidia.h264.decode] Crop rect is 800 x 1280 @ (0, 0)
04-15 13:30:06.620: D/ButtonBookActivity(1238): touch event
04-15 13:30:06.620: D/ButtonBookActivity(1238): ignoring touch event
04-15 13:30:06.770: V/NvAudioALSA(83): open called for devices 00000002 in mode 0...
04-15 13:30:06.770: V/NvAudioALSA(83): getAlsaDeviceName::devices 0x2 IsVoiceCallDevice 0 devName music
04-15 13:30:06.770: V/NvAudioALSA(83): Reset buffer size to 4096 and latency to 92879
04-15 13:30:06.770: V/NvAudioALSA(83): Set PLAYBACK PCM format to S16_LE (Signed 16 bit Little Endian)
04-15 13:30:06.770: V/NvAudioALSA(83): Using 2 channels for PLAYBACK.
04-15 13:30:06.770: V/NvAudioALSA(83): Set PLAYBACK sample rate to 44100 HZ
04-15 13:30:06.770: V/NvAudioALSA(83): Buffer size: 4096
04-15 13:30:06.770: V/NvAudioALSA(83): Period size: 1024
04-15 13:30:06.770: V/NvAudioALSA(83): Latency: 92879
04-15 13:30:06.770: V/NvAudioALSA(83): Period Time: 23219
04-15 13:30:06.770: V/NvAudioALSA(83): Periods: 4
04-15 13:30:07.060: V/NvAudioALSA(83): Initialized ALSA PLAYBACK device music
04-15 13:30:09.550: D/ButtonBookActivity(1238): video completed

This http://code.google.com/p/android/issues/detail?id=3434可能与 android 音频延迟问题有关。 在扬声器实际发出声音之前,调用音频文件的 start() 需要一些时间。也许这也适用于视频,媒体播放器需要一些时间才能显示任何视频帧。

所以你可能无能为力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android MediaPlayer:准备好的视频需要 250 毫秒才能开始播放 的相关文章

  • 在第一个框中输入字符后,将焦点转到下一个框

    我必须实现一个应用程序 其中我设置了较小的值edittext用于输入 PIN 码和手机号码 每个编辑文本一次包含 1 个字符 现在 当我运行这个应用程序时 我发现对于每个框 我需要将焦点放在每个框上edittext 因此 在这种情况下 是否
  • 如何使用 WifiEnterpriseConfig 设置“使用系统证书”

    我想为我的应用程序的用户配置企业 WiFi 网络 因此 用户必须输入用户名和密码 其余的由应用程序处理 身份验证由 RADIUS 服务器 FreeRadius 3 处理 该服务器使用 LetsEncrypt 颁发的证书 因此无需导入我自己的
  • 位图背景图像应支持哪些屏幕尺寸/密度组合?

    我正在编写一个应用程序 我需要一些全屏位图背景 基于我天真的阅读支持多屏 http developer android com guide practices screens support html在 Android 文档中 为了涵盖我的
  • 包管理器已去世

    我收到一位安装了很多应用程序的用户发来的邮件 称当我的应用程序使用以下代码收集活动信息时 他遇到了问题 getPackageManager queryIntentActivities mAinIntent 0 完整来源在这里 https g
  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • 对话框片段嵌入取决于设备

    在我的应用程序中 用户从联系人或通话记录中选择电话号码 选择联系人非常简单 并且在手机和平 板电脑上都可以很好地工作 i e 在手机上会弹出新的全屏活动 在桌子上我会看到带有联系人列表的漂亮弹出对话框 似乎无法从通话记录中选择电话号码 因此
  • Android SQLite 从代码中转储数据库以进行错误报告

    我正在为我的一个 Android 程序开发一种诊断工具 本质上 如果用户遇到问题 我想做一些类似 SQLite 的事情dump 参考 http www sqlite org sqlite html http www sqlite org s
  • 如何在 Jetpack compose 中制作 FlipCard 动画

    我有一个现有的应用程序 我在其中使用 XML 中的 Objectanimator 实现了 FlipCard 动画 如下所示 如果我点击一张卡片 它会水平翻转 但现在我想将其迁移到 jetpack compose 那么jetpack comp
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • 作为附件的 Android 设备

    我有 2 个 Android 设备 我想用 USB OTG 电缆连接它们 并在两个设备之间进行来回通信 据我了解 一台 Android 设备将充当 USB 主机 运行 4 4 的 Nexus 7 另一台 Android 设备将充当 USB
  • java.net.ProtocolException:流意外结束

    我面临一个奇怪的问题 并且无法调试它 我已经实现了上传数据流的逻辑 并使用 Volley 来实现相同的功能 我在HurlStack addBodyIfExistsapi 以便可以处理 application octet stream 类型的
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Flutter - 删除 ListView 中项目之间的空间

    我正在使用 ListView builder 函数来创建项目列表 然而 iOS 中每个项目之间的空间很大 截图 你知道如何删除项目吗 看来是默认的 因为我没有添加它 code 列表显示 return Scaffold body ListVi
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 运行 Android 应用程序时出现错误

    我已经使用 Eclipse 创建了一个 Android 应用程序 但应用程序未在 AVD 上运行 它显示 不幸的是已停止工作 日志猫消息如下 07 29 04 59 50 789 W dalvikvm 784 threadid 1 thre
  • 将触摸事件从 NestedScrollView 传递到父视图

    我在 NestedScrollView 下方有一个 ViewPager 宽度一些顶部填充 以及 ClipToPadding false 和透明背景 如图像 我的 ViewPager 无法获取触摸事件并且无法工作 我怎么解决这个问题 我无法更
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • 推特更新状态

    我正在通过 twitter4j 将 Twitter 集成到 Android 我可以成功阅读我发布的推文 现在我试图用它发布推文 但我不能 我收到如下奇怪的警告 02 01 16 28 43 298 WARN System err 729 4
  • 传递 Android DialogFragment 参数时,onCreateDialog 捆绑参数意外为 null

    我正在尝试使用 DialogFragment 在 Android 中显示一个基本对话框 并使用对话框消息的参数 如中所述StackOverflow线程 https stackoverflow com questions 15459209 p
  • 如何解决android程序中的警告“从不本地读取”

    为什么我收到警告说 The field testscreen ScaleAnimToShow mVanishAfter is never read locally testscreen java testscreen src com tes

随机推荐

  • 如何在 Google Apps 脚本中检查拼写和语法

    如何删除 Google 表格中包含拼写或语法错误的所有行 我更喜欢通过 Google Apps 脚本来完成此操作 我考虑过的 使用 工具 菜单中的拼写检查器太慢了 因为我已经 几万行 我发现了this https stackoverflow
  • ProgramData 和 AppData 有什么区别?

    我需要为我的程序存储一些特定于用户的配置数据 Application Data AppData 在用户目录中 和 ProgramData 在系统驱动器的根目录中 似乎都是放置它的合理位置 程序数据和应用程序数据有什么区别 我应该使用哪一个
  • 查找具有重复值的字典键

    some dict firstname Albert nickname Albert surname Likins username Angel 我想返回我的字典的键 其中它们的值存在不止一次 有人可以告诉我如何实现这一点吗 a list
  • select()系统调用中nfds=0时发生了什么

    我正在 Linux 上调试一个应用程序 它有几个线程定期调用select系统调用 strace shows select 0 NULL NULL NULL 1 342414 So nfds 0 我认为 nfds 是任何集合中出现的最高文件描
  • Chrome 自动完成多个电子邮件字段

    我的表单上有 3 个输入框 Google Chrome 提供自动完成功能 因此 如果您单击其中任何一个或开始输入内容 您将看到 Chrome 选项列表 但当您在这些自动完成选项之间上下移动时 3 个输入框将填充值 而不是当前的文本框 htt
  • Android:本地化标准文本,例如确定、取消和 GPS 未激活 - 例如?

    我希望本地化我的应用程序 当然 我需要本地化特定于我的应用程序的文本 但是标准文本是否存在一些标准资源 例如 确定 和 取消 GPS 未激活等 或者我必须完全本地化所有内容吗 android 是否附带了一些全局文本资源 我如何访问它 提前致
  • C 是否有与 C++ 中的 std::less 等效的东西?

    我最近正在回答一个关于 do 的未定义行为的问题p lt q在C中当p and q是指向不同对象 数组的指针 这让我想到 C 具有相同的 未定义的 行为 lt 在这种情况下 还提供了标准库模板std less保证返回与 lt 当指针可以比较
  • $PATH 中的波形符字符 ('~')? (例如:PATH='~/bin':/usr/bin:/bin)

    根据我的测试 bash很高兴 in PATH but usr bin which不是 是否有关于此的任何标准 如 POSIX Example STEP 100 echo BASH VERSION 4 4 12 1 release STEP
  • 如何在Windows中创建虚拟Com1端口?

    我正在开发一个在袖珍电脑上运行的移动应用程序 我们有一个移动打印机和刷卡器 使用 com1 发送和获取信息 我正在使用设备模拟器 并且想在没有打印机的情况下进行测试 如何创建虚拟 com1 端口以进行读取 我尝试了 com0com 但设备模
  • Go 内置函数是否使用泛型?

    看看 Go 的内置函数 我才意识到它们不使用接口 而是使用神奇的 类型 https golang org src builtin builtin go https golang org src builtin builtin go 那么 在
  • 在 Swift 中创建绑定到特定范围的类型

    假设我有一个函数需要Int 但不仅仅是任何Int 它可能是 仅限自然数 Ints2 至 200 etc 假设有效值的数量太大而无法使用Enum明确声明所有这些都是可行的方法 有没有办法在 Swift 中声明一个指定闭范围的类型 我尝试玩弄R
  • 上传用户 Firebase 的个人资料图片

    我正在尝试将图像添加到 Android 的实时数据库 firebase 中的用户信息中 我已将图像上传到 firebase 存储中 但如何才能将该图像添加到该用户的数据库中 代码如下 inside onCreate method img s
  • 插入 5000 多个 Android 联系人的最有效方法

    我意识到这在很多地方都有所涉及 包括here https stackoverflow com questions 5596354 insertion of thousands of contact entries using applyba
  • 递归SQL语句(PostgreSQL 9.1.4)

    PostgreSQL 9 1 业务情况 每个月都会有一批新的帐户分配给特定流程 每批次可按月份 账户数 账户总余额进行描述 该流程的目标是从客户那里收回部分余额 然后每月单独跟踪每个批次 自批次转移到流程后每个月回收的金额 Goal 我的目
  • 在 LibGDX 中合并模型构建器中的模型

    我是 LibGDX 3D 设施的新手 我想知道如何合并使用创建的两个圆柱体模型构建器 createCylinder http libgdx badlogicgames com nightlies docs api com badlogic
  • 从非活动中使用 startActivityForResult

    我有 MainActivity 它是一个 Activity 和其他类 这是一个简单的 java 类 我们将其称为 SimpleClass 现在我想从该类运行命令startActivityForResult 我虽然我可以仅使用 MainAct
  • 从 FTP 文件夹下载所有文件时出现“权限被拒绝”错误

    到目前为止 我已经从 FTP 站点获取了我需要的文件的名称 请参阅下面的代码 from ftplib import FTP import os sys os path def handleDownload block file write
  • firebase-tools“错误:证书已过期”

    今天早上 我尝试将 React 项目部署到 Firebase 托管 但收到此错误 Error Server Error certificate has expired 然后我尝试执行firebase list命令查看我的项目列表 但我再次收
  • 在 IIS 上尝试 WCF 数据服务时收到“401 - 未经授权”

    我开发了一个WCF数据服务 它运行良好 我可以通过它完成我想要的每一个操作 我开发了一个小型 C 客户端 用于测试所有功能 添加 删除 修改 检索数据 在我的 Visual Studio 服务器上一切正常 但一旦我在 IIS 服务器上 我可
  • Android MediaPlayer:准备好的视频需要 250 毫秒才能开始播放

    当我使用prepareAsync 播放视频 然后在视频准备好后调用start 时 从start 调用到视频实际开始播放大约需要250毫秒 事情就是这样吗 还是这里发生了一些有趣的事情 请注意 视频位于 raw 目录中 在我的活动的 OnCr