Android'de verilen video dosyasının anahtar çerçevelerinin zaman damgalarının listesini bana veren herhangi bir API var mı?Android'de bir video dosyası için anahtar çerçevelerin (senkronizasyon çerçeveleri) zaman damgalarının listesi nasıl alınır?
cevap
http://dranger.com/ffmpeg/tutorial07.html Ben doğru cevap isoparser API okumak ve MP4 dosya yapısı yazabilir http://code.google.com/p/mp4parser/
olduğuna inanıyoruz. Bu sözde kutular ile uğraşan düşük seviyeli bir araçtır, ancak parça ve film gibi yapı ile uğraşmak kadar iyi.
Güzel API ve
Zarif bir çözüm için, bunu başarmak için android için ffmpeg kullanmanız gerekecek gibi görünüyor. Başka biri şu şekilde denedi: How to get the frame from video file in android; ve ffmpeg kullanması önerildi.
ı referans kılavuzu kontrol, ama burada açıklandığı gibi sadece MediaMetadataRetriever() kullanarak zaman içinde belirli bir konumda göreli (zaman damgası olmadan) bir kareyi kendisi için bir yol bulabiliriz: http://developer.android.com/reference/android/media/MediaMetadataRetriever.html#extractMetadata%28int%29Eğer don' (bilmiyorum) muhtemelen da oldukça yavaş ...
private ArrayList<int> getKeyFrameTimestamps(String filename) {
ArrayList<int> timeStamps = new ArrayList<int>();
try {
MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
mRetriever.setDataSource(getDataSource(filename));
mRetriever.getFrameAtTime(i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
Bitmap lastFame = mRetriever.getFrameAtTime(0, MediaMetadataRetriever.OPTION_NEXT_SYNC);
result.add(0);
for(int time=1; frame ; ++time) {
Bitmap frame = mRetriever.getFrameAtTime(time, MediaMetadataRetriever.OPTION_PREVIOUS_SYNC);
if (frame && !frame.sameAs(lastFrame)) {
result.add(time);
lastFrame = frame;
}
}
} catch (Exception e) { /* TODO: HANDLE THIS */ }
return timeStamps;
}
Bu değil elbette çok şık, ama muhtemelen ffmpeg yüklemek için uğraşmadan çalışacak: t aşağıdaki deneyebilirsiniz ffmpeg kullanmak istiyorum . Ama belki de ihtiyacın olan şey budur.
PS: sorununuzu uyan bir ffmpeg öğretici burada bulunabilir:
Merhaba Stefan sayesinde, ama ben zaten bu çözümü denedim ve lanet yavaş çalışır ve garip sonuçlar sağlar. Daha fazla araştıracağım (örneğin, ffmpeg/ffprobe) ve bu konuyu güncel tutacağım. –
Beklediğim şey bu. Bunu hızlandırmak için bir fikir 'time + = lastdistance' deniyor; 'set 'lastdistance = lastFrameTime - time setini kullandığınızda;' bir ana kare bulunursa, 'lastFrameTime + lastdistance - 1' hala son kare olup olmadığını kontrol edin. Eğer öyleyse, devam edin ... başka bir sonraki çerçeve – SDwarfs
çapraz derlemek ffmpeg android üzerine bulmak için "yavaş arama" kullanın. I resimlerin listesini almak için -show_frames seçeneği ile ffprobe komutunu kullanın. Bu, tüm video türleri için çalışmalı ve oldukça hızlıdır. Önce PC'de kontrol et. [Eğer ffmpeg kurduysanız, ffprobe da sahip olmalısınız]. İhtiyacınız olan tüm bilgileri alacaksınız. Daha hızlı olan -show_packets var ve bilmek istediğiniz tek şey referans kareleri olmayan referanslar için yeterli olduğunu kanıtlayabilir. – av501
4.1+ ffmpeg devi çok daha hızlı yolları - Eğer getsyncsamples zaman damgalarını hesaplamak zorunda mp4parser daha hızlı altında yerli yapılır çünkü ve kod temizleyici
mp4parser olduğunu + Ayrıca can sıkıcı olan ve ffprobe ile eşleşmeyen getampledurations. Bu istenilen zamanda süreleri ve/veya belirli bir kareyi çerçeveleri, tüm anahtarı (senkronizasyon) olabilir MediaExtractor kullanarak doğru sonuçlar
MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(getVideoPath());
int trackindex = MediaExtractorUtil.selectVideoTrack(extractor);
extractor.selectTrack(trackindex);
while (extractor.getSampleTime() != -1) {
long sampleTime = extractor.getSampleTime();
// check not really necessary but JIC
if ((extractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) > 0) {
mKeyframeTimestampsMS.add(sampleTime/1000);
}
extractor.seekTo(sampleTime + 1, MediaExtractor.SEEK_TO_NEXT_SYNC);
}
bitmap'sini oluşturmak için kod çözücü/kodlayıcı içermiyor, bu projeye geri döndüğümde kontrol edeceğim. –
alır. + bazı daha faydalı veriler.
Daha sonra MediaMetadataRetriever -> getFrameAtTime ile Bitmap'ler çerçevesini alabilirsiniz. Burada
MediaExtractor kullanmak için bir örnek kod: çabalarınız içinmediaExtractor = new MediaExtractor() ;
mediaExtractor.setDataSource(mediaPath);
int numTracks = mediaExtractor.getTrackCount();
for (int i = 0; i < numTracks; ++i) {
MediaFormat format = mediaExtractor.getTrackFormat(i);
String mime = format.getString(MediaFormat.KEY_MIME);
if (mime.startsWith("video")) {
mediaExtractor.selectTrack(i);
}
Log.i("LOG_Extractor" , "track "+i+" "+mime);
}
currentTime = mediaPlayer.getCurrentPosition();
mediaExtractor.seekTo((long)currentTime*1000 , MediaExtractor.SEEK_TO_PREVIOUS_SYNC);
previousKeyFrameTimeMilis = mediaExtractor.getSampleTime() /1000 ;
- 1. imleç aracılığıyla androidde Zaman damgası sütun değeri nasıl alınır
- 2. Bir pandalar veri aralığındaki zaman damgalarının ofseti nasıl ayarlanır?
- 3. .NET Dosyası Senkronizasyon Kütüphanesi
- 4. androidde openssl nasıl kurulur
- 5. Video küçük resimleri nasıl alınır?
- 6. Geoserver'dan katmanların listesi nasıl alınır
- 7. ini4j - Bir tuştaki tüm anahtar isimler nasıl alınır?
- 8. androidde greyview için özel adaptör
- 9. Anahtar kelime için bir metin dosyası aranıyor
- 10. Bir domuz haritasından bir değişken anahtar için değer nasıl alınır?
- 11. DataTable bir sütun değerleri listesi nasıl alınır?
- 12. Redshift'deki UDF listesi nasıl alınır?
- 13. Android'de video dosyası nasıl oynanır?
- 14. Anahtar adıyla mongoDB'den nasıl bir değer alınır?
- 15. Bir laravel form talebinden anahtar nasıl alınır?
- 16. Kategorideki anahtar kelimeler nasıl alınır?
- 17. CVS deposunda oluşturulan etiketlerin listesi nasıl alınır?
- 18. Belirli Python modülündeki değişkenlerin listesi nasıl alınır?
- 19. Video dosyası yakalanamadı Emgu
- 20. VideoView'da video dosyası oynatılamıyor
- 21. Android'de video kare hızı nasıl alınır?
- 22. Video dosyası yüklenemedi
- 23. Anahtar/değer JSON nesnesinden anahtarlar nasıl alınır?
- 24. Apache Commons XMLConfiguration - belirli bir düğümdeki nesnelerin listesi nasıl alınır?
- 25. Taleo powered websitesinde işlerin listesi nasıl alınır
- 26. Selenium hub'dan mevcut tarayıcıların listesi nasıl alınır?
- 27. VS2008 C# projesinde formların listesi nasıl alınır?
- 28. Yüklenen çalışma süresi paketlerinin listesi nasıl alınır?
- 29. Exchange Server'dan kişi listesi nasıl alınır?
- 30. Ülkeler ve şehirlerin listesi nasıl alınır?
evet ama isoparser, kutunun mdat bölümünün – Nativ