0

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 です。この問題を解決する方法が本当にわかりません....ちなみに、昨日の朝はうまくいきましたが、昨日の午後からはもううまくいきません....助けてください、どうもありがとうございます:)

4

0 に答える 0