MediaPlayer を使用して LocalSocket からメディアを再生しようとしています。ストリームのタイプは MPEG-TS であり、LocalSocket 入力ストリームで使用できます
次のコードは of を試みsetDataSource
ます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を試してみると、利用可能なバイト数が0以外になります。
注:使用時の同じエラーp.setDataSource(fp);