1

我正在尝试使用 MediaPlayer 从 LocalSocket 播放媒体。流是 MPEG-TS 类型,在 LocalSocket 输入流中可用

以下代码尝试到setDataSourceof FileDescriptorLocalSocket但失败了。

LocalSocket wsIns = fileThread.getReadSocket();
p = new MediaPlayer();
p.setDisplay(holder);
FileDescriptor fd = wsIns.getFileDescriptor();
Log.e("TS","is valid ? "+fd.valid());
p.setDataSource(fd ,0, fileThread.getLength());

setDataSource 失败,出现以下异常。

10-13 17:21:31.510: W/System.err(6472): java.io.IOException: setDataSourceFD failed.: status=0x80000000
10-13 17:21:31.510: W/System.err(6472):     at android.media.MediaPlayer.setDataSource(Native Method)
10-13 17:21:31.510: W/System.err(6472):     at com.example.test.TSRenderActivity.surfaceCreated(TSRenderActivity.java:94)

调试日志表明错误主要是由于这个fstatLocalSocket 的文件描述符将文件的大小返回为 0。

但是如果我尝试wsIns.getInputStream().available()这个 api 会提供非零的可用字节数。

注意:使用相同的错误p.setDataSource(fp);

4

0 回答 0