Komprimieren von Videos mit android MediaCodec api

Will ich komprimieren lokal gespeicherte video-Datei auf eine kleinere Größe, um auf einen server hochladen.

Da ich MediaCodec , ich habe einige Tipps zum komprimieren von Videos . Hier sind die Schritte, die ich gefolgt

1) . Extrahiert die media-Datei mit MediaExrtactor und Decodiert es.
2) . Schafft der Encoder mit der gewünschten Datei-format
3) . Erstellen muxer zum speichern der Datei in dem lokalen Speicher. (nicht vollständig)

Frage : Aber ich weiß nicht, wie zu Kodieren, die bereits dekodierten stream und speichern den Strom in die lokalen Speicher verwenden MediaMuxer.

public class CompressMedia {

    private static final String SAMPLE = Environment
            .getExternalStorageDirectory() + "/DCIM/Camera/20140506_174959.mp4";

    private static final String OUTPUT_PATH = Environment
            .getExternalStorageDirectory()
            + "/DCIM/Camera/20140506_174959_REC.mp4";

    private MediaExtractor extractor;
    private MediaCodec decoder;
    private MediaCodec encoder;
    String mime;

    private static final String MIME_TYPE = "video/avc";

    public void extractMediaFile() {

        //work plan
        //locate media file
        //extract media file using Media Extractor
        //retrieve decoded frames

        extractor = new MediaExtractor();
        try {
            extractor.setDataSource(SAMPLE);
        } catch (IOException e) {
            //TODO Auto-generated catch block
            //file not found
            e.printStackTrace();
        }

        //add decoded frames
        for (int i = 0; i < extractor.getTrackCount(); i++) {
            MediaFormat format = extractor.getTrackFormat(i);
            mime = format.getString(MediaFormat.KEY_MIME);
            if (mime.startsWith("video/")) {
                extractor.selectTrack(i);
                decoder = MediaCodec.createDecoderByType(mime);
                decoder.configure(format, null, null, 0);
                break;
            }
        }

        if (decoder == null) {
            Log.e("DecodeActivity", "Can't find video info!");
            return;
        }

        //- start decoder -
        decoder.start();
        extractor.selectTrack(0);

        //- decoded frames can obtain in here -

    }

    private void createsEncoder() {

        //creates media encoder to set formats
        encoder = MediaCodec.createDecoderByType(MIME_TYPE);

        //init media format
        MediaFormat mediaFormat = MediaFormat.createVideoFormat(MIME_TYPE, /* 640 */
                320, /* 480 */240);
        mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 400000);
        mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 25);
        mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,
                MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
        mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
        encoder.configure(mediaFormat, null, null,
                MediaCodec.CONFIGURE_FLAG_ENCODE);
        encoder.start();

        //- encoded data format is avaiable in here

    }

    private void createMuxer() {

        //creates media muxer - media muxer will be used to write the final
        //strem in to a desired file :)

        try {
            MediaMuxer muxer = new MediaMuxer(OUTPUT_PATH,
                    OutputFormat.MUXER_OUTPUT_MPEG_4);

            int videoTrackIndex = muxer.addTrack(encoder.getOutputFormat());

            //muxer.writeSampleData(videoTrackIndex, inputBuffers, bufferInfo);
            muxer.start();

        } catch (IOException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

Hier sind die links, die ich follwed
Android MediaCodec: Reduzieren Sie den mp4-video-Größe und

Video Kompression auf android mit neuen MediaCodec Bibliothek

Hallo Herr G., ich brauche eine Hilfe von Ihnen. Ich möchte zum komprimieren der Videos. Können Sie mir sagen, wie zu komprimieren das video mit MideaCodec. Oder zeigen Sie ein Beispiel für die Komprimierung von video?
ich verwendete intel-transcode-pack zur Kompression, arbeitete er von kit-kat , habe nicht versucht, von mediacodec , ich denke, der einfachste Weg, es zu tun , mit ffmepg , u bekomme ffmpeg-Support auf android-studio unter Einsatz von vorkompilierten libs FFPEG
Danke für die Antwort..

InformationsquelleAutor Mr.G | 2014-05-26

Schreibe einen Kommentar