Android MediaPlayer流媒体YouTube音频流意外响亮

2024-04-25 06:48:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目的是:
我正在远程服务器上的Python守护进程中使用youtube dl来获取URL。
该URL会被输入到Android应用程序的MediaPlayer实例中。

发生了什么:
媒体播放器偶尔会以正常速度播放静态音乐,有时会以1.5倍的速度播放。
下面是一段视频。耳机警告YouTube Video

观察结果:
如果是静态的,则为整首歌(不是间歇性的)。
我已经获取了它提供的网址,它们在一个没有静态的PC浏览器中播放得很好。

它发生在不同的手机上,而且不仅仅是我的手机。
启动静态轨迹所需的时间较长。
静态的轨迹使我的进度条(显示秒-分)的行为很奇怪。我看到它在前几秒里上下倒数,速度是我刚才说的1.5倍。

MediaHTTPConnection引发了许多我不知道如何处理的异常。

E/MediaHTTPConnectionEx: disconnecting
E/MediaHTTPConnectionEx: RuntimeException: Unbalanced enter/exit
                     mConnection.disconnect();

下面是Python守护进程返回URL的部分

^{pr2}$

这是(基本上是样板)媒体播放器

^{3}$

Tags: 目的服务器应用程序url远程进程youtube轨迹
1条回答
网友
1楼 · 发布于 2024-04-25 06:48:59

我觉得别人会有这个问题,所以我要把我的解决方案贴出来。在

所以我注意到每个音轨都会弹出一个mime类型错误。我已经解决了这个问题,但噪音已经停止,错误仍然出现。

以下是启动车轮转动的错误:

E/MediaHTTPConnectionEx: getMIMEType
                     [seekToEx] offset:0/mCurrentOffset:-1


我注意到youtube dl为webm提供的一些URL没有在URL中指定mime类型。

下面是一个例子:

^{pr2}$

但是所有的m4a流在URL中都有一个mime类型

...70F61&mime=audio%2Fmp4&itag=140&key...

所以我认为,虽然我的解决方案不是最好的,但却是最简单的。因为所有的m4a流都有一个指定的mime,所以我仅限于这些流。在

问题在于:
我很确定,如果我只是检查了指定的mime字段的URL,我仍然可以播放大多数webm文件。唯一失败的(静态的)是没有该字段的url。在

我的解决方案:

Python只提取m4a文件:

...
'format':'bestaudio[ext=m4a]',
...

Android现在传递硬编码的标题:

Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "audio/mp4"); // change content type if necessary
Uri uri = Uri.parse(mediaFile);
Log.d(TAG, "getMimeType="+getMimeType(uri));//this is ALWAYS null
mediaPlayer.setDataSource(getApplicationContext(), uri, headers);

相关问题 更多 >