2016-04-30 45 views
6

mp4 meta verilerini okumak ve düzenlemek (yazmak). Özellikle aşağıdaki resimde gösterildiği gibi androidde Tag meta verilerini okumak/yazmak istiyorum.Android: Okuma ve yazma .mp4 meta verileri -Tag

Mp4 Metadata Picture

internette bu aramış ve mp4Parser buldum ama mp4Parser Başlık Kelime yazmayın düşünüyorum.

.jpg dosyası için başlığı temsil eden XPKeyword meta verileri kullanılır. Aynı şekilde .mp4 dosyası için de nasıl yapılır. MetaData here değerleri hakkında

cevap

7

Android SDK MediaMetadataRetriever dosyanızın içindeki tüm meta veri değerleri almak için sınıf içerir, daha okuyabilirsiniz./Yazma meta verileri düzenlemek için

enter image description here

public void readMetaData() { 
    File sdcard = Environment.getExternalStorageDirectory(); 
    File file = new File(sdcard,"/Android/data/myfile.mp4"); 

    if (file.exists()) { 
     Log.i(TAG, ".mp4 file Exist"); 

     //Added in API level 10 
     MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
     try { 
      retriever.setDataSource(file.getAbsolutePath()); 
      for (int i = 0; i < 1000; i++){ 
       //only Metadata != null is printed! 
       if(retriever.extractMetadata(i)!=null) { 
        Log.i(TAG, "Metadata :: " + retriever.extractMetadata(i)); 
       } 
      } 
     } catch (Exception e) { 
      Log.e(TAG, "Exception : " + e.getMessage()); 
     } 
    } else { 
     Log.e(TAG, ".mp4 file doesn´t exist."); 
    } 
} 
Android SDK gelmiyor.Fark muhtemelen telif hakkı sorunları ile, herhangi bir yöntemi var ama gibi seçenekleri kullanabilirsiniz:

https://github.com/sannies/mp4parser

http://multimedia.cx/eggs/supplying-ffmpeg-with-metadata/

https://github.com/bytedeco/javacv/blob/master/src/main/java/org/bytedeco/javacv/FFmpegFrameRecorder.java

+0

Yukarıda belirtilen MediaMetadataRetriever kodunuzu kullanarak IllegalArgumentException alıyorum. –

+0

Merhaba, wich satırında? – Jorgesys

+0

Bu satırda: - retriever.setDataSource (file.getAbsolutePath()); –

0

Umarım çok geç değildir ancak MP4 dosyalarında meta veri alanları eklemek/düzenlemek/silmek isterseniz, JCodec'in meta veri düzenleme sınıflarını kullanabilirsiniz.

Bir java API'si tarafından desteklenen bir CLI aracı var. CLI, org.jcodec.movtool.MetadataEditorMain'da ve API, org.jcodec.movtool.MetadataEditor'dadır.

bu konuda daha fazla bilgi: http://jcodec.org/docs/working_with_mp4_metadata.html

Yani temelde ne anahtar (lar) o tekabül bilmeniz gereken bazı meta verileri eklemek istediğinizde. Öğrenmenin bir yolu, ihtiyacınız olan meta verilere sahip bir örnek dosyayı incelemektir.Eğer aynı CLI kullanabilirsiniz ya sizinle çalışmak isteyen anahtarı biliyorum Sonra

./metaedit <file.mp4> 

: Bunun için sadece mevcut tüm meta veri alanlarını (değerlerle tuşları) çıktısını edeceğini JCodec en CLI aracı çalıştırabilirsiniz aracı:

# Changes the author of the movie 
./metaedit -f -si ©ART=New\ value file.mov 

veya Java API ile aynı şey:

MetadataEditor mediaMeta = MetadataEditor.createFrom(new 
    File("file.mp4")); 
Map<Integer, MetaValue> meta = mediaMeta.getItunesMeta(); 
meta.put(0xa9415254, MetaValue.createString("New value")); // fourcc for '©ART' 
mediaMeta.save(false); // fast mode is off 

bir dosyadan bir meta veri silmek için:

gibi bir şey kullanabilirsiniz fourcc 0
MetadataEditor mediaMeta = MetadataEditor.createFrom(new 
    File("file.mp4")); 
Map<Integer, MetaValue> meta = mediaMeta.getItunesMeta(); 
meta.remove(0xa9415254); // removes the '©ART' 
mediaMeta.save(false); // fast mode is off 

tamsayı dize dönüştürmek için:

byte[] bytes = "©ART".getBytes("iso8859-1"); 
int fourcc = 
    ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt(); 

düzenlemek istediğiniz takdirde/sen depolandığı çünkü (fucntion farklı bir dizi kullanmanız gerekir android meta silmek farklı) iTunes meta verileri daha: alternatif

./metaedit -sk com.android.capture.fps,float=25.0 file.mp4 

VEYA API üzerinden aynı:

MetadataEditor mediaMeta = MetadataEditor.createFrom(new 
    File("file.mp4")); 
Map<String, MetaValue> meta = mediaMeta.getKeyedMeta(); 
meta.put("com.android.capture.fps", MetaValue.createFloat(25.)); 
mediaMeta.save(false); // fast mode is off