DatagramSocket からビデオ データを取得します。これはご存知のように byte[] であり、この byte[] を正確にデコードすることはできません。そのため、この作業を行うには MediaExtractor を使用する必要があります。ここに私のコードがあります:
@Override
public void run() {
eosReceived = false;
try {
socket.receive(packet);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromDatagramSocket(socket);
FileDescriptor fd = pfd.getFileDescriptor();
mExtractor.setDataSource(fd, 0, packet.getData().length);
for (int i = 0; i < mExtractor.getTrackCount(); i++) {
MediaFormat format = mExtractor.getTrackFormat(i);
String mime = format.getString(MediaFormat.KEY_MIME);
if (mime.startsWith(VIDEO)) {
mExtractor.selectTrack(i);
mDecoder = MediaCodec.createDecoderByType(mime);
try {
Log.d(TAG, "format : " + format);
mDecoder.configure(format, surface, null, 0 /* Decoder */);
} catch (IllegalStateException e) {
Log.e(TAG, "codec '" + mime + "' failed configuration. " + e);
}
mDecoder.start();
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
コードが mExtractor.setDataSource(fd, 0, packet.getData().length); で実行されるとキャッチされます。例外は java.io.IOException: Failed to instanceiate extractor です。この問題を解決する方法が本当にわかりません....ちなみに、昨日の朝はうまくいきましたが、昨日の午後からはもううまくいきません....助けてください、どうもありがとうございます:)