Android MediaPlayer 从 PHP 重定向流式传输不起作用!

phpAndroid

1个回答

写回答

Android
Android

使用Android MediaPlayer从php重定向流式传输不起作用!

Android开发中,MediaPlayer是一个非常常用的类,用于播放各种音频和视频文件。通常情况下,我们可以通过设置MediaPlayer的数据源来播放本地文件或者网络文件。然而,有时候我们可能需要通过php重定向的方式来实现流式传输,但是发现MediaPlayer无法正常播放。本文将探讨这个问题,并提供解决方案。

问题描述

当我们尝试使用MediaPlayer从php的重定向URL中播放音频或视频时,可能会遇到无法播放的问题。即使设置了正确的URL,MediaPlayer也无法获取到音频或视频的数据流,导致无法播放。这可能是因为MediaPlayer无法正确处理php的重定向。

解决方案

为了解决这个问题,我们可以使用Android的HttpClient类来手动处理重定向。具体步骤如下:

1. 创建一个HttpClient对象。

2. 创建一个HttpGet对象,并设置URL为php的重定向URL。

3. 调用HttpClient的execute方法执行HttpGet请求,获取HttpResponse对象。

4. 判断HttpResponse的状态码是否为302(重定向)。

5. 如果是重定向,则从HttpResponse的Header中获取新的URL,然后重复步骤2-4,直到不再是重定向。

6. 最终获取到的HttpResponse对象中包含了音频或视频的数据流,我们可以通过调用getEntity方法获取到HttpEntity对象。

7. 使用HttpEntity对象的getcontent方法获取到输入流,并将其传递给MediaPlayer的setDataSource方法。

示例代码

下面是一个使用HttpClient处理重定向的示例代码:

Java

import Android.media.MediaPlayer;

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import Java.io.IOException;

import Java.io.InputStream;

public class MAInActivity extends AppCompatActivity {

private MediaPlayer mediaPlayer;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setcontentView(R.layout.activity_mAIn);

mediaPlayer = new MediaPlayer();

try {

HttpClient httpClient = new DefaultHttpClient();

HttpGet httpGet = new HttpGet("http://example.com/redirect.php");

HttpResponse httpResponse = httpClient.execute(httpGet);

int statusCode = httpResponse.getStatusLine().getStatusCode();

if (statusCode == 302) {

String newUrl = httpResponse.getFirstHeader("Location").getValue();

httpGet.setURI(new URI(newUrl));

httpResponse = httpClient.execute(httpGet);

}

InputStream inputStream = httpResponse.getEntity().getcontent();

mediaPlayer.setDataSource(inputStream.getFD());

mediaPlayer.prepare();

mediaPlayer.start();

} catch (IOException e) {

e.printStackTrace();

}

}

}

注意:在使用HttpClient类时,需要添加Apache HttpClient库的依赖。可以在build.gradle文件中添加以下代码:

groovy

dependencies {

implementation 'org.apache.httpcomponents:httpclient:4.5.13'

}

通过使用HttpClient类手动处理php重定向,我们成功解决了使用Android MediaPlayer从php重定向流式传输不起作用的问题。现在,我们可以正常播放php重定向的音频或视频文件了。这个解决方案可以帮助开发者更好地利用MediaPlayer类,实现更丰富的音视频播放功能。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号