我正在尝试使用 MediaPlayer 从 LocalSocket 播放媒体。流是 MPEG-TS 类型,在 LocalSocket 输入流中可用
以下代码尝试到setDataSource
of FileDescriptor
,LocalSocket
但失败了。
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)
调试日志表明错误主要是由于这个,fstat
LocalSocket 的文件描述符将文件的大小返回为 0。
但是如果我尝试wsIns.getInputStream().available()
这个 api 会提供非零的可用字节数。
注意:使用相同的错误p.setDataSource(fp);