天道酬勤,学无止境

MediaPlayer Streaming issues on Android 4.4 (API 19)

My app is having issues with the MediaPlayer streaming, specifically on Nexus 5. I'm not sure if this is Nexus 5 or API level 19 causing the problem. Basically my MediaPlayer gets prepared and I call MediaPlayer.start(), but the MediaPlayer doesn't begin streaming.

This happens at random and only on my Nexus 5 device. When this happens, if I try seeking the MediaPlayer it begins to play. Is anyone else experiencing this?

UPDATE: I've filed a bug against Android: https://code.google.com/p/android/issues/detail?id=62304

评论

Not sure if it's related, I had similar issue with local file playback, only on 4.4 occasionally, not reproducible on 4.3. This only happens when I want to play a new song reusing the existing MediaPlayer.

Solution: I had to call stop(); before reset(); and setDataSource():

    stop();
    reset();

    try {
        setDataSource(context, uri);
        prepareAsync();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

time solution: in onprepare before start try this code:

if (mSeekWhenPrepared != 0) {
            seekTo(mSeekWhenPrepared);
        } else {seekTo(0);}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • MediaPlayer在Android 4.4上随机停止(19)(MediaPlayer randomly stops on Android 4.4 (19))
    问题 我的应用在Nexus 5以外的所有设备上都可以正常播放音频。在Nexus 5上,MediaPlayer随机停止播放。 不确定4.4中关于响度(http://developer.android.com/about/versions/android-4.4.html#Multimedia)的更改是否破坏了某些内容。 还有其他人注意到这个问题吗? 似乎某些用户正在发生,但我无法在自己的Nexus 5上进行复制。 更新:所以我能够在Nexus 5上重现该问题。这似乎实际上是在剪辑结尾处发生的。 剪辑中还剩下大约1-5秒,则MediaPlayer会调用OnCompletionListener.onCompletion()方法。 这仅发生在Nexus 5上,并且随机发生在某些片段上。 我几乎可以在30%的时间内重现它。 请注意,当剪辑提早结束时,如果我尝试返回并再次播放该剪辑,则它将第二次完全播放完该剪辑。 我知道Android 4.4刚刚发布,但希望有人可以提供帮助! 谢谢。 更新:我已经针对Android提交了一个错误:https://code.google.com/p/android/issues/detail?id=62304 回答1 好了,我找到了解决方案。 我不确定这是否是您现在都面临的问题,但是它可以解决我的问题。 基本上,Android 4.4+引入了许多新的电源管理功能
  • MediaPlayer randomly stops on Android 4.4 (19)
    My app is streaming audio fine on all devices except Nexus 5. On Nexus 5, the MediaPlayer randomly stops playing. Not sure if the changes with respect to Loudness (http://developer.android.com/about/versions/android-4.4.html#Multimedia) in 4.4 has broken something. Is anyone else noticing this issue? Seems to be happening to some users, but I'm unable to reproduce on my own Nexus 5. UPDATE: So I was able to reproduce the issue on my Nexus 5. It seems to actually be happening near the end of the clip. With about 1 - 5 seconds left in the clip, the OnCompletionListener.onCompletion() method is
  • 在android中流式传输音频.pls(Stream an audio .pls in android)
    问题 我正在制作一个使用流媒体的应用程序。 在这里,我需要从链接 ( http://somedomain/some.pls ) 流式传输音频。 我已经创建了MediaPlayer并且知道如何从音频文件播放。 但不知道如何从网络流式传输。 编辑:我在使用以下代码时得到的 logcat MediaPlayer mp = new MediaPlayer(); mp.setDataSource(http://somedomain/some.pls); mp.prepare(); mp.start() 通过日志标签**MediaPlayer** 02-15 05:50:11.761: VERBOSE/MediaPlayer(23715): constructor 02-15 05:50:11.761: VERBOSE/MediaPlayer(23715): setListener 02-15 05:50:11.761: INFO/MediaPlayer(23715): uri is:http://some:444/sdfd.pls 02-15 05:50:11.761: INFO/MediaPlayer(23715): path is null 02-15 05:50:11.761: DEBUG/MediaPlayer(23715): Couldn't open file on client
  • 是否所有版本的 Android 都支持 MediaPlayer 流媒体?(Do all versions of Android support the MediaPlayer streaming?)
    问题 正如标题所说,我基本上想知道 MediaPlayer 流媒体支持是否适用于所有版本的 Android。 这是我目前使用的代码,它在我的 Android 2.2 手机上运行良好: MediaPlayer mp = new MediaPlayer(); mp.setDataSource(SHOUTCAST_STREAM); mp.prepare(); mp.start(); 但这会适用于 1.5 或 1.6 吗? 或者我是否必须为流构建自己的缓冲管理系统? * 更新 * 刚刚在 1.6 模拟器上测试了它,并得到以下错误。 在 2.2 模拟器上它工作正常。 23:15:50.074 31 ERROR PlayerDriver Command PLAYER_INIT completed with an error or info PVMFFailure 23:15:50.074 282 ERROR MediaPlayer error (1, -1) 23:15:50.074 282 ERROR MediaPlayer io error 23:15:50.074 282 ERROR MediaPlayer java.io.IOException: Prepare failed.: status=0x1 23:15:50.074 282 ERROR MediaPlayer at
  • Android MediaPlayer - Downloading and Streaming at same time revisited
    This question has been asked before, but now with the newer versions of Android (up to Jelly Bean), I was wondering if there's been any progress on downloading AND streaming a file at the same time. From the API, it doesn't look like it's inherently possible, as these are the available setDataSource methods: void setDataSource(String path) Sets the data source (file-path or http/rtsp URL) to use. void setDataSource(Context context, Uri uri, Map<String, String> headers) Sets the data source as a content Uri. void setDataSource(Context context, Uri uri) Sets the data source as a content Uri
  • Android MediaPlayer - 重温同时下载和流式传输(Android MediaPlayer - Downloading and Streaming at same time revisited)
    问题 以前有人问过这个问题,但现在有了更新版本的 Android(直到 Jelly Bean),我想知道在下载和流式传输文件的同时是否有任何进展。 从 API 来看,这似乎不是天生的,因为这些是可用的 setDataSource 方法: void setDataSource(String path) Sets the data source (file-path or http/rtsp URL) to use. void setDataSource(Context context, Uri uri, Map<String, String> headers) Sets the data source as a content Uri. void setDataSource(Context context, Uri uri) Sets the data source as a content Uri. void setDataSource(FileDescriptor fd, long offset, long length) Sets the data source (FileDescriptor) to use. void setDataSource(FileDescriptor fd) Sets the data source (FileDescriptor) to use
  • Android ExoPlayer播放音视频的使用指南 
    一、简介 在安卓设备上播放视频和音乐是很受欢迎的活动。Android框架提供了MediaPlayer作为一个快速的解决方案,可以用最少的代码来播放媒体。Android还提供低级别的媒体api框架,如MediaCodec、AudioTrack和MediaDrm,可用于构建自定义媒体播放器解决方案。 ExoPlayer是一款开源的应用级媒体播放器,基于Android的低级媒体API构建。本指南描述了ExoPlayer库及其使用。它是指ExoPlayer的主要演示应用程序中的代码,以提供具体的示例。该指南介绍了使用ExoPlayer的优缺点。它展示了如何使用ExoPlayer播放DASH,SmoothStreaming和HLS自适应流,以及MP4、M4A、FMP4、WebM、MKV、MP3、Ogg、WAV、MPEG-TS、MPEG-PS、FLV和ADTS (AAC)的格式。它还讨论了ExoPlayer事件、消息、自定义和DRM支持。 ExoPlayer是Android的应用程序级媒体播放器。 它提供了Android的MediaPlayer API的替代品,用于在本地和互联网上播放音频和视频。 ExoPlayer支持Android MediaPlayer API目前不支持的功能,包括DASH和SmoothStreaming自适应回放。 与MediaPlayer API不同
  • MediaPlayer 在 Android 5.0 (Lollipop) 中抛出错误(MediaPlayer throwing errors in Android 5.0 (Lollipop))
    问题 我编写了一个使用 HTTP 连接流式传输 MP3 的媒体应用程序。 这在 Android 版本 2.x - 4.x 上运行良好,但现在在 5.x 中产生错误。 该应用程序循环播放包含 MP3 的播放列表对象,每个对象都有自己唯一的 HTTP 地址。 第一个文件流良好,但下一个文件(与哪个文件无关prepareAsync()在调用prepareAsync()时产生以下错误: 07-04 18:57:19.785 65-10860/? E/NuCachedSource2﹕ source returned error -1, 10 retries left 07-04 18:57:22.874 65-10860/? E/NuCachedSource2﹕ source returned error -1, 9 retries left 07-04 18:57:25.907 65-10860/? E/NuCachedSource2﹕ source returned error -1, 8 retries left 07-04 18:57:28.929 65-10860/? E/NuCachedSource2﹕ source returned error -1, 7 retries left 07-04 18:57:31.972 65-10860/? E/NuCachedSource2﹕
  • 使用MediaPlayer在Android中流式传输来自URL的音频?(Streaming Audio from A URL in Android using MediaPlayer?)
    问题 我一直在尝试使用Android的内置MediaPlayer类通过HTTP流mp3。 该文档向我建议,这应该很简单: MediaPlayer mp = new MediaPlayer(); mp.setDataSource(URL_OF_FILE); mp.prepare(); mp.start(); 但是,我反复得到以下内容。 我也尝试了不同的URL。 请不要告诉我,流无法在mp3上播放。 E/PlayerDriver( 31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported W/PlayerDriver( 31): PVMFInfoErrorHandlingComplete E/MediaPlayer( 198): error (1, -4) E/MediaPlayer( 198): start called in state 0 E/MediaPlayer( 198): error (-38, 0) E/MediaPlayer( 198): Error (1,-4) E/MediaPlayer( 198): Error (-38,0) 任何帮助,不胜感激,谢谢 回答1 简单的带媒体流示例的Media Player。对于xml部分
  • 如何通过蓝牙将音频从一个Android设备流传输到另一个Android设备?(How to stream audio from one Android device to another Android device Via Bluetooth?)
    问题 是否可以通过蓝牙流音频? 在研究过程中,我发现只有使用A2DP(Advanced Audio Distribution Profile)才有可能。 并且每个Android设备都支持A2DP吗? 如果没有,是否可以使用蓝牙在两个Android设备之间传输音频? 请帮助我理解这一点。 我浏览了以下链接: 通过Android中的蓝牙接收音频, Google确认了适用于Android 4.2下一版本的蓝牙音频流修复程序如何通过蓝牙从另一台设备流式传输音频? 回答1 是否可以通过蓝牙流音频? 下面的线索说明了在设备之间可以通过蓝牙流音频的可能性,但直到Google官方宣布我们已解决N7上的a2dp流口吃问题的问题时,其成功率才有问号。 下一个版本应具有此修复程序。 对不起,这个问题。 修复了4.2.2中不良的A2DP质量 使用Galaxy Nexus升级到4.2后,蓝牙音质会受到影响 适用于Nexus 7 Flo的Android 4.3蓝牙音频质量修复 并且每个Android设备都支持A2DP吗? 在Android开发人员网站上提到了支持兼容性,该兼容性是从API Level-11 with appropriate features.添加的API Level-11 with appropriate features. 但是我遇到了XDA踏板,其中Android 2.1中的OP提到了问题
  • 如何在android应用程序中播放直播?(How to play live streaming in android application?)
    问题 我想申请板球直播。 我想知道以下事情: 从哪里可以找到播放板球直播的链接? 这些是哪种类型的链接? 有没有播放器可以播放这种类型的视频? 目前,我已经实现了网页,但我正在寻找其他替代方案。 下面是我的代码: link1 = (RelativeLayout) findViewById(R.id.link1); link2 = (RelativeLayout) findViewById(R.id.link2); link3 = (RelativeLayout) findViewById(R.id.link3); link4 = (RelativeLayout) findViewById(R.id.link4); link5 = (RelativeLayout) findViewById(R.id.link5); link6 = (RelativeLayout) findViewById(R.id.link6); link7 = (RelativeLayout) findViewById(R.id.link7); link1.setOnClickListener(this); link2.setOnClickListener(this); link3.setOnClickListener(this); link4.setOnClickListener(this); link5
  • Android MediaPlayer在2.1上抛出“准备失败。:状态= 0x1”,在2.2上工作(Android MediaPlayer throwing “Prepare failed.: status=0x1” on 2.1, works on 2.2)
    问题 我真的很想敲桌子,试图让MediaPlayer类尝试在Android 2.1上播放h.264编码的视频。 我的代码很简单: AssetFileDescriptor fileDescriptor = getResources().openRawResourceFd(R.raw.my_movie); introMoviePlayer = new MediaPlayer(); introMoviePlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getDeclaredLength()); introMoviePlayer.prepare(); 这总是在prepare()处引发异常,文本为java.io.IOException: Prepare failed.: status=0x1 。 通过将MediaPlayer.create()与URI一起使用,我得到了更多信息,该信息还会抛出prepare() ,实际上它是由MediaPlayer.create()调用的,消息Command PLAYER_PREPARE completed with an error or info
  • Android MediaPlayer 准备时间过长(Android MediaPlayer is preparing too long)
    问题 嘿,我正在使用 MediaPlayer 播放常规 ShoutCast 流。 代码很简单,带有 prepareAsync() 和一个用于开始播放的处理程序。 虽然它与某些流如 DI.FM 或 ETN.FM (http://u10.di.fm:80/di_progressive) 完美配合,但对于其他流 (http://mp3.wpsu.org:8000/),它不会t 越过准备状态。 也不会调用其他侦听器。 //Uri streamUri = Uri.parse("http://u10.di.fm:80/di_progressive"); /* works */ Uri streamUri = Uri.parse("http://mp3.wpsu.org:8000/"); /* stuck on prepare state */ MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.start(); } }); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
  • 失败代码 -32 MediaPlayer (Android 4.4)(Failure code -32 MediaPlayer (Android 4.4))
    问题 大家好,我的应用程序在尝试在 Android 4.4 (KitKat) 中播放视频时返回失败代码 -32。 我实际上无法找到有关此错误代码的任何信息,也许你们中的任何人都对此问题了解更多? 11-04 13:43:08.966: E/AndroidRuntime(26482): java.lang.RuntimeException: failure code: -32 11-04 13:43:08.966: E/AndroidRuntime(26482): at android.media.MediaPlayer.invoke(MediaPlayer.java:664) 11-04 13:43:08.966: E/AndroidRuntime(26482): at android.media.MediaPlayer.getInbandTrackInfo(MediaPlayer.java:1692) 11-04 13:43:08.966: E/AndroidRuntime(26482): at android.media.MediaPlayer.scanInternalSubtitleTracks(MediaPlayer.java:1851) 11-04 13:43:08.966: E/AndroidRuntime(26482): at android.media
  • Android MediaPlayer 流在网络更改时停止(Android MediaPlayer streaming stops on network change)
    问题 我在 Android 上使用 MediaPlayer 流式传输音频。 当设备从 Wi-Fi 移动到蜂窝网络或反之亦然时,MediaPlayer 将停止播放。 通常,缓冲区中有几秒钟的音频,因此播放不会立即停止。 理想情况下,我想获取不间断播放的流,但我不知道该怎么做。 我正在处理托管在服务器上的 mp3 文件和直播流。 回答1 从服务器的角度来看,将网络模式从 WiFi 更改为 3G(反之亦然),看起来就像是来自单独 IP(客户端)的全新连接。 如果您正在下载的服务器不支持跟踪流(例如秒数、序列、字节)(与媒体服务器不同),它将不得不再次从 0 字节开始为您的 mp3 提供服务。 如果您的 URL 指向位于标准 HTTP 服务器上的 MP3 文件,那么您的情况将如期而至。 您应该考虑使用媒体流服务器,以便您可以选择继续下载/流媒体。 当您收到连接丢失/恢复的意图时,您可以将您的媒体播放器指向 URL 中文件位置的新 URL(例如,秒 = 19,字节 = 57365)。 不确定这是否对您有帮助,但它解释了“幕后”发生的事情。 回答2 尝试设置您的setOnCompletionListener和setOnErrorListener 。 完成直播后,您只需再次调用prepareAsync()再次启动直播。 除非您编写自己的媒体框架,否则没有任何优雅的方式可以做到这一点。
  • Android MediaPlayer works fine in Custom audio Streaming application up to Android 2.1 but not in higher versions
    EDIT: Android 2.2 MediaPlayer is working fine with one SHOUTcast URL but not with the other one I need to play audio files from external URLs(shoutcast stream). Currently the audio files are downloaded incrementally & are played as soon as we get enough audio in phone local temporary storage. i am using the StreamingMediaPlayer class. Check this piece of code: private MediaPlayer createMediaPlayer(File mediaFile) throws IOException { MediaPlayer mPlayer = new MediaPlayer(); //example of mediaFile =/data/data/package/cache/playingMedia0.dat FileInputStream fis = new FileInputStream(mediaFile)
  • Android MediaPlayer在最高至Android 2.1的自定义音频流应用程序中均能正常工作,但在更高版本中则不能(Android MediaPlayer works fine in Custom audio Streaming application up to Android 2.1 but not in higher versions)
    问题 编辑: Android 2.2 MediaPlayer可以与一个SHOUTcast URL正常工作,但不能与另一个URL正常工作 我需要播放来自外部URL(广播流)的音频文件。 当前,音频文件将以增量方式下载并在我们在电话本地临时存储中获得足够的音频后立即播放。 我正在使用StreamingMediaPlayer类。 检查这段代码: private MediaPlayer createMediaPlayer(File mediaFile) throws IOException { MediaPlayer mPlayer = new MediaPlayer(); //example of mediaFile =/data/data/package/cache/playingMedia0.dat FileInputStream fis = new FileInputStream(mediaFile); mPlayer.setDataSource(fis.getFD()); mPlayer.prepare(); return mPlayer; } 当前状态: 1-从Android 1.6到2.1都可以正常工作,但在更高的版本(如Android 2.2)中则不能。 2-“ mPlayer.setDataSource(fis.getFD())”是引发错误的行。 3-错误是
  • 更改 MediaPlayer 上的缓冲区大小(change buffer size on MediaPlayer)
    问题 有什么方法可以更改流式MediaPlayer上的默认缓冲区大小吗? 回答1 缓冲区大小已写入固件。 您所能做的就是密切关注缓冲区的填充量,即使这也只是基于百分比。 对不起! 回答2 大小在frameworks/base/media/libstagefright/include/NuCachedSource2.h 中设置 kDefaultHighWaterThreshold和kDefaultLowWaterThreshold在 Android 2.3.7 和 Android 4.0.4 之间上升 缓冲区大小增长了 8 倍,如该线程中所述 Android - ICS 4.0 中的 MediaPlayer 缓冲区大小 您将需要一个自定义 rom。 安卓 2.3.7 enum { kPageSize = 65536, kHighWaterThreshold = 5 * 1024 * 1024, kLowWaterThreshold = 512 * 1024, // Read data after a 15 sec timeout whether we're actively // fetching or not. kKeepAliveIntervalUs = 15000000, }; 安卓 4.0.4 enum { kPageSize = 65536
  • Android 4.0.4 MediaPlayer 使用 RTSP url 准备问题(Android 4.0.4 MediaPlayer prepare issue using RTSP urls)
    问题 我正在使用的视频流应用程序遇到一个奇怪的问题。 实际的视频/音频流在我所有的测试设备上都运行良好。 然而,在任何设备 4.0+ 上,当使用 RTSP URL 时,prepare() 会立即返回(这会导致在加载视频时向用户提供正确反馈的问题,并干扰我现有的一些其他系统)。 下面是我初始化和设置 MediaPlayer 的代码块,但请记住以下几点: 我的 initPlayer 方法是从 AsyncTask 调用的。 视频最终确实可以正确播放,但准备立即返回会在视频加载期间缺乏对用户的反馈。 整个过程没有出现任何错误 start() 是通过我的 OnPreparedListener 中的 onPrepared 方法在 MediaPlayer 上调用的,当 prepare() 在实际准备好播放之前返回时,这显然会成为一个问题。 HTTP 流似乎工作正常,并且在 4.0 以下的每个测试设备上都不会出现此问题。 我一直在努力解决这个问题,但一直无法找到遇到此问题的其他人。 任何想法将不胜感激。 public void initPlayer() { //We first need to make sure the MediaPlayer isn't null if(mMediaPlayer==null){ mMediaPlayer = new MediaPlayer()
  • Android: AAC+ radio streaming doesn't work with MediaPlayer (Android 4.2.2 / Shoucast links)
    I'm recently faced with some problems of streaming AAC+ radio streams with the Android MediaPlayer. Regarding to the documentation, there should be support for streaming AAC+ in Android 4.1. (Test Device is a Nexus 2 with Android 4.2.2) I found some related questions (check here, here or here), but they are mainly related to older Android versions or dated before the release of 4.1. I found the AACPlayerAndroid libary, but there you must purchase for a license.. If I try streaming an AACPlus Stream, the MediaPlayer throws MediaPlayerError (1,-2147483648), which is defined as "unsupported media