我一直在尝试实现一个android service
可以将音频流下载到文件中然后可以同时播放该文件的方法。
这样我也可以实现缓冲。
我正在使用多个线程。所以第一次尝试了我的手ExecutorService
。
代码在 github 上,有很多注释可以解释。
它会在一段时间内完美地下载和播放流,但几分钟后(比如 1 或 2 分钟后)它会停止而不会抛出任何异常,甚至不会在日志中打印任何内容。
代码说明:
要关注的主要类是 ServiceExecutor,它是一个 android 服务。
- 它首先启动一个 AsyncTask 来启动整个过程。其中:
- 设置将下载文件的临时文件。
- 启动一个线程以在后台获取流的持续时间。此持续时间在缓冲时很有用。请注意,此线程不会播放流。
- 启动第二个线程,将流下载到临时文件中。
- 启动第三个线程来播放文件中的流。
- 这第三个线程将在其 MediaPlayer 的 onPrepared() 函数内部也将启动第四个线程来处理流的缓冲。
通过缓冲我的意思是递归检查文件是否有足够的数据来连续播放流。在每次通话中,它都会检查临时文件的剩余流是否少于 2 秒,并且文件仍在下载,然后暂停媒体播放器 5 秒。它维护一个变量“pausedAtMilliSec”,它记录流暂停的位置,以便如果播放器也突然停止,它可以从那里恢复。
正如你现在所看到的,我在线程方面不是很好。在我看来,问题在于多线程处理(似乎,但不确定)。
因此,请随时发表任何评论或建议。我不会难过,我会很开心。
请检查一次代码。
我知道PocketJourney 的代码。但也想试试我的。
谢谢你