草庐IT

Android 4.2 with 4 MediaPlayers = "Can' t play this video"

coder 2023-11-27 原文

每当我尝试加载至少 4 个 mediaPlayer 时,其中一个会破坏它尝试加载的视频并触发 Android 操作系统消息“无法播放此视频”

其他信息:

对于 3 个媒体播放器,一切正常。

在其他 Android 版本上,与 4.2 不同,具有相同 4 个视频的相同代码有效。

4个视频可以在设备上独立播放。没有格式问题。

启动程序并收到“无法播放此视频”消息后,除非我重置设备,否则无法再在任何其他应用程序中播放该视频。

我在 VideoView 或显示在 surfaceView 上的独立 MediaPlayer 上都尝试过。

我在更多运行 Android 4.2 的设备上重现了这个错误。 在 android 4.1.2 和其他 android 4 版本上我不记得代码工作正常。

最佳答案

在 Android 上,与媒体编解码器相关的所有内容都对开发人员隐藏,开发人员必须使用一致且唯一的 API:MediaPlayer .

当您播放媒体时,无论是流还是位于外部设备上的东西,低级编解码器/解析器都会在每次应用程序需要它们帮助时实例化。

但是,由于与硬件解码相关的特殊原因,某些编解码器不能多次实例化。事实上,每个应用程序必须在不再需要它们时通过调用MediaPlayer.release() 释放资源(例如编解码器实例)。处于有效状态。

事实上,我所说的在 documentation of release 中得到了说明。在 Android 开发者网站上:

Releases resources associated with this MediaPlayer object. It is considered good practice to call this method when you're done using the MediaPlayer. In particular, whenever an Activity of an application is paused (its onPause() method is called), or stopped (its onStop() method is called), this method should be invoked to release the MediaPlayer object, unless the application has a special need to keep the object around. In addition to unnecessary resources (such as memory and instances of codecs) being held, failure to call this method immediately if a MediaPlayer object is no longer needed may also lead to continuous battery consumption for mobile devices, and playback failure for other applications if no multiple instances of the same codec are supported on a device. Even if multiple instances of the same codec are supported, some performance degradation may be expected when unnecessary multiple instances are used at the same time.

因此,要么您在播放完毕后没有调用 release,要么另一个应用持有对此类资源的引用。

编辑:

如果您需要在同一 Activity 上渲染多个视频,您有两种选择。正如我在回复中所说,由于低级问题,您最初想要的是不可能的,顺便说一下,它也不是在 iOS 上。

虽然您可以尝试做的是:

  • 如果您正在播放的媒体不是实时流媒体内容,您可以使用广泛使用的免费视频编辑器之一将 4 个视频合并为一个视频。然后在您的 Activity 中全屏呈现视频,看起来您有 4 个 Views

  • 如果它们是实时/非录制内容,请保持第一个 视频不变。我假设每个视频都使用相同的编解码器/容器进行编码。您可能正在尝试对其他 3 个视频进行转码,以便它们使用不同的编解码器和不同的格式。确保您正在转码为 supported by Android 的编解码器/容器.这可能会强制 Android 同时使用不同的解码器。与您预期的结果相比,我认为这有点矫枉过正。

  • 最后,您可以使用不同的后端进行解码,例如 MediaPlayer + FFMPEG 或只是 FFMPEG。但同样,我认为,即使它有效,也将是一个巨大的矫枉过正。

总而言之,您必须做出妥协才能使其发挥作用。

关于Android 4.2 with 4 MediaPlayers = "Can' t play this video",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15839082/

有关Android 4.2 with 4 MediaPlayers = "Can' t play this video"的更多相关文章

  1. ruby-on-rails - rails : keeping DRY with ActiveRecord models that share similar complex attributes - 2

    这似乎应该有一个直截了当的答案,但在Google上花了很多时间,所以我找不到它。这可能是缺少正确关键字的情况。在我的RoR应用程序中,我有几个模型共享一种特定类型的字符串属性,该属性具有特殊验证和其他功能。我能想到的最接近的类似示例是表示URL的字符串。这会导致模型中出现大量重复(甚至单元测试中会出现更多重复),但我不确定如何让它更DRY。我能想到几个可能的方向...按照“validates_url_format_of”插件,但这只会让验证干给这个特殊的字符串它自己的模型,但这看起来很像重溶液为这个特殊的字符串创建一个ruby​​类,但是我如何得到ActiveRecord关联这个类模型

  2. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  3. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  4. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  5. ruby-on-rails - Ruby on Rails with Haml - 如何从 erb 切换 - 2

    我正在从erb文件切换到HAML。我将hamlgem添加到我的系统中。我创建了app/views/layouts/application.html.haml文件。我应该只删除application.html.erb文件吗?此外,仍然有/public/index.html文件被呈现为默认页面。我想创建自己的默认index.html.haml页面。我应该把它放在哪里以及如何使系统呈现该文件而不是默认索引文件?谢谢! 最佳答案 是的,您可以删除任何已转换为HAML的View的ERB版本。至于你的另一个问题,删除public/index/h

  6. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  7. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  8. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  9. ruby CSV : How can I read a tab-delimited file? - 2

    CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|

  10. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

随机推荐