草庐IT

Android MediaPlayer 流媒体错误 : 100: MEDIA_ERROR_SERVER_DIED

coder 2023-12-18 原文

我开发了一个应用程序,它利用了 native Android 的 MediaPlayer。我类使用媒体播放器的源代码如下。

问题是只有在某些设备上播放几毫秒后(我只能听到声音,屏幕仍然是黑的)我不断收到 error(100,0),根据 documentation

public static final int MEDIA_ERROR_SERVER_DIED

Media server died. In this case, the application must release the MediaPlayer object and instantiate a new one.

在论坛上,我发现每次获得它时我都需要重置播放器...但是我在很短的时间内获得它然后它就永远消失了。由于播放无用,我无法每秒重置播放器。我不明白为什么有些设备有这个问题而其他设备没有。我知道的是 Android OS > 4.0。

当然,首先调用 init(),然后调用 showVideo()。然后调用代码为 100 的最后一个 onError。使流连续运行而不中断的潜在解决方案是什么?

public class NativePlayer extends Player implements OnBufferingUpdateListener,
        OnCompletionListener, OnErrorListener, OnInfoListener {

    private VideoView videoview;
    private PlayerListener listener;
    private MainActivity context;

    private final Logger logger = LoggerFactory.getLogger(NativePlayer.class);

    @Override
    public void init(MainActivity activity) {
        this.videoview = (VideoView) activity.findViewById(R.id.video);
        context = activity;
    }

    @Override
    public void showVideo(final String url, final PlayerListener _listener) {
        listener = _listener;
        videoview.setVisibility(View.VISIBLE);
        try {
            Uri video = Uri.parse(url);
            videoview.setVideoURI(video);
        } catch (Exception e) {
            logger.error("Error playing video", e);
            listener.onVideoError();
            return;
        }

        videoview.setOnCompletionListener(this);
        videoview.setOnErrorListener(this);
        videoview.requestFocus();

        videoview.setOnPreparedListener(new OnPreparedListener() {
            public void onPrepared(MediaPlayer mp) {
                videoview.start();
                if (listener != null) {
                    listener.onVideoStarted();
                }
            }
        });
    }

    @Override
    public void onStop() {
        stop();
    }

    private void stop() {
        if (videoview == null) {
            return;
        }
        if (videoview.isPlaying()) {
            videoview.stopPlayback();
        }
    }

    @Override
    public void onDestroy() {
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        stop();
    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        if (listener != null) {
            listener.onVideoError();
        }
        return false;
    }

    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        if (listener != null) {
            listener.onInfo(what, extra);
        }
        return false;
    }

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        if (listener != null) {
            listener.onBufferingUpdate(percent);
        }
    }
}

最佳答案

我遇到了同样的问题(错误 100、媒体播放器死机等)。 我通过使用 .stopPlayback() 解决了它,并再次开始播放。 下面是我的部分代码:

private void startWatchVideo(final string video_link) {
        videoViewVA.setMediaController(new MediaController(this));
        videoViewVA.setVideoURI(Uri.parse(video_link));
        videoViewVA.requestFocus();
        videoViewVA.setOnPreparedListener(new OnPreparedListener() {
            public void onPrepared(MediaPlayer media) {
                media.start();
            }
        });

        videoViewVA.setOnErrorListener(new OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer media, int what, int extra) {
                if (what == 100)
                {
                    videoViewVA.stopPlayback();
                    startWatchVideo(video_link);
                }
                return true;
            }
        });
    }

在实践中,视频似乎只是变慢了

关于Android MediaPlayer 流媒体错误 : 100: MEDIA_ERROR_SERVER_DIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869473/

有关Android MediaPlayer 流媒体错误 : 100: MEDIA_ERROR_SERVER_DIED的更多相关文章

  1. ruby-on-rails - Ruby on Rails : . 常量化 : wrong constant name error? - 2

    我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby​​常量:Content2而不是content2。Aconstantnamestart

  2. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  3. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  4. 怎样用一台手机做自媒体? - 2

    其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时

  5. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  6. ruby-on-rails - rails : uninitialized constant just happen on production server - 2

    我有一个放在lib/network中的类:moduleNetworkApiclassNetworkProxyendend然后在另一个类中,我引用了这个类:network_proxy=::NetworkApi::NetworkProxy.new(params)一切都在我的开发环境中正常运行,但是当我部署到服务器时,我在上面一行收到错误消息:NameError:uninitializedconstantNetworkApi::NetworkProxy我不知道为什么会出现这个奇怪的错误。请告诉我为什么。 最佳答案 请注意Rails5dis

  7. ruby-on-rails - 冒号(:) gives load error in locale YAML file - 2

    我在en:语言环境中有一个字符串display_device:toplay:getplayer冒号给我的错误是cannotloadtranslationsfromC:/DocumentsandSettings/rajg/discoveryaws/branches/internationalization/config/locales/en.yml,expectedittoreturnahash,butdoesnot我怎样才能让它工作? 最佳答案 如果你用这样的引号将它括起来,你可以在你的字符串中转义冒号(和其他“重要”字符):dis

  8. ruby - gem install pg error : couldn't understand kern. osversion `14.0.0' on Yosemite w/Ruby 2.1.5 - 2

    我使用RVM安装Ruby-2.1.5并再次运行bundle。现在pggem不会安装,我得到这个错误:geminstallpg-v'0.17.1'----with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_configBuildingnativeextensionswith:'--with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config'Thiscouldtakeawhile...ERROR:Error

  9. ruby-on-rails - 32651 :ERROR comparison of Float with Float failed ruby - 2

    我是Rails的新手,我遇到了一个错误,但我似乎找不到问题所在。这是日志:[32651:ERROR]2012-10-0913:46:52::comparisonofFloatwithFloatfailed[32651:ERROR]2012-10-0913:46:52::/home/sunny/backend/lib/analytics/lifetime.rb:45:in`each'/home/sunny/backend/lib/analytics/lifetime.rb:45:in`max'/home/sunny/backend/lib/analytics/lifetime.rb:45

  10. ruby - rspec: raise_error 用法来匹配错误信息 - 2

    我使用raise(ConfigurationError.new(msg))引发错误我试着用rspec测试一下:expect{Base.configuration.username}.toraise_error(ConfigurationError,message)但这行不通。我该如何测试呢?目标是匹配message。 最佳答案 您可以使用正则表达式匹配错误消息:it{expect{Foo.bar}.toraise_error(NoMethodError,/private/)}这将检查NoMethodError是否由privateme

随机推荐