当前位置: 首页 > 知识库问答 >
问题:

Android Media Player流媒体-在emulator中工作,在硬件上失败

耿俊
2023-03-14

我面临着一个与Android、流媒体和媒体播放器相关的奇怪问题。

实际的应用程序非常复杂,但我已经给出了最简单的测试用例:“Hello,World”活动会启动带有硬编码URL的媒体播放器。在Android emulator中,无论是API级别7(这是真实应用程序的最低级别)还是API级别17,这都可以很好地工作。但是,相同的应用程序在API级别为15的硬件设备上失败-Media Player在prepare()调用期间失败:

  • 如果使用blocking prepare(),则会失败,并出现IOException
  • 如果使用非阻塞prepareAsync(),则会失败并触发onErrorListener(不会引发异常)

失败总是(阻塞和非阻塞准备)显示“错误(1,-2147483648)”。媒体播放器文档没有这样的错误代码-2147483648 (0xffffffff)。

该应用程序具有访问互联网的适当权限(android.permission.Internet),并且设备的互联网连接正在工作(同一应用程序可以从互联网下载文件)。

这不是编解码器问题,因为仿真器可以播放相同的流,并且任何其他流在硬件设备上以相同的方式失败。

尝试了许多其他没有帮助的事情:

  • 使用pepareAsync()和onPreparedListener调用start()
  • 在媒体播放器上调用reset()
  • 通过Uri设置数据源。parse()
  • 从音频管理器获取音频焦点

硬件工作正常,因为同一台设备可以使用Android内置的默认音频播放器应用程序从其存储中播放音频文件

我不太相信鬼魂,但我已经没有其他选择了。有人见过这样的东西吗?该应用程序在模拟器中工作,但在硬件上不工作?

任何人都可以在硬件设备上尝试此代码吗(我只有1台Android设备)?

public class MainActivity extends Activity {

private MediaPlayer mediaPlayer;
private String listen_url = "http://stream15.top-ix.org:80/radiojukebox-low";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mediaPlayer = new MediaPlayer();
    //mediaPlayer.reset();

    try {
        mediaPlayer.setDataSource(listen_url);
        //mediaPlayer.setDataSource(this, Uri.parse(listen_url));
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        mediaPlayer.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
                    // We fail here!
        e.printStackTrace();
    }

    mediaPlayer.start();
}
}

共有1个答案

巫马越彬
2023-03-14

这通常是因为您使用的设备不支持流类型。你试过简单的MP3流吗?

 类似资料:
  • spark作业提交到minicube创建的kubernetes集群中的spark集群后的输出: 来自spark web ui的信息: 我的文件中的foreachRDD。scala:49详细信息 组织。阿帕奇。火花流动。数据流。数据流。foreachRDD(DStream.scala:625)myfile。运行(myfile.scala:49)Myjob$。main(Myjob.scala:100)

  • 我想在Apache Flink中做流媒体工作来做Kafka- 这应该是流式处理。

  • 实际上,我的目标是实现一个webview,并在webview中捕获流视频的url。我尝试了这么多代码,但没有结果。这是我迄今为止尝试过的代码`

  • 目前我正在使用Streaming API(https://stream.twitter.com/1/statuses/filter.json)。 连接成功后,我会将服务器上的所有推文记录到数据库中。只有在运行了几个小时或几天没有问题后,问题才会出现,然后无法检索更多推文。如果我重新启动客户端,处理会恢复正常,一切正常,直到下一次挂起。

  • 使用系统将“服务器发送事件(SSE)样式”事件流式传输到F#中的前端的轻量级方式是什么。网Http库?我了解事件流格式(例如,这个PHP示例代码),但我正在寻求一些指导,以便在服务器端F#应用程序(我在.Net Framework 4.8上)中实现流部分。

  • Streaming API用于通过令牌读取JSON令牌。 它将JSON内容读写为离散事件。 JsonReader和JsonWriter将数据读/写为令牌,称为JsonToken 。 它是处理JSON的三种方法中最强大的方法。 它具有最低的开销,并且在读/写操作中非常快。 它类似于XML的Stax解析器。 在本章中,我们将展示使用GSON流API来读取JSON数据。 Streaming API与to