android自定义media,java如何将自定义 android.media.MediaDataSource 与 android.media.MediaPlayer 一起使用?_java_开发99...

我知道Android的MediaPlayer很棒,它允許播放本地文件和媒體流,使用非常簡單:MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setDataSource("http://streaming.shoutcast.com/80sPlanet"); // this steam broadcasts audio/mpeg

mediaPlayer.prepareAsync();

mediaPlayer.start();

通過用不同的參數集調用重載的setDataSource(),可以設置不同類型的DataSource,這個函數有一個有趣的原型:void setDataSource(MediaDataSource dataSource)

看起來可以用自己的實現完全覆蓋DataSource,它確實有效:import android.media.MediaDataSource;

import java.io.BufferedInputStream;

import java.io.IOException;

import java.net.URL;

import java.net.HttpURLConnection;

public class UrlMediaDataSource extends MediaDataSource {

URL url;

HttpURLConnection connection;

BufferedInputStream stream;

public UrlMediaDataSource(URL url) throws IOException {

this.url = url;

connection = (HttpURLConnection) url.openConnection();

}

@Override

public long getSize() {

return 0;

}

@Override

public int readAt(long position, byte[] buffer, int offset, int size) throws IOException {

if (stream == null)

stream = new BufferedInputStream(connection.getInputStream());

return stream.read(buffer, offset, size);

}

@Override

public void close() throws IOException {

stream.close();

stream = null;

connection.disconnect();

connection = null;

}

}

在主代碼中:UrlMediaDataSource dataSource = new UrlMediaDataSource(new URL("http://streaming.shoutcast.com/80sPlanet"));

mediaPlayer.setDataSource(dataSource);

這有用,但是,如果我嘗試音頻#aacp廣播流,就無法工作了。aecq跟蹤:06-07 23:26:01.680 1352-1147/? E/GenericSource: Failed to init from data source!

06-07 23:26:01.681 1352-1093/? D/NuPlayerDriver: notifyListener_l(0xf3e051e0), (100, 1, -2147483648)

06-07 23:26:01.735 1352-2013/? D/NuPlayerDriver: reset(0xf3e051e0)

06-07 23:26:01.735 1352-2013/? D/NuPlayerDriver: notifyListener_l(0xf3e051e0), (8, 0, 0)

06-07 23:26:01.736 1352-1093/? D/NuPlayerDriver: notifyResetComplete(0xf3e051e0)

但是,當沒有使用自定義MediaDataSource時,URL工作正常(音樂播放):mediaPlayer.setDataSource("http://111.223.51.8:8005");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值