Posso richiedere un PHAsset video utilizzando il framework Photos in iOS8. Mi piacerebbe sapere quanto è grande il file è su disco. Sembra che non ci sia una proprietà di PHAsset. Qualcuno ha una soluzione? (Usando le foto quadro non richiesto)Come determinare la dimensione del file sul disco di un PHAsset video in iOS8
risposta
Modifica
Per quanto riguarda iOS 9.3, utilizzando requestImageDataForAsset
su un tipo di video PHAsset
si tradurrà in un'immagine, che è il primo fotogramma del video, in modo che non lavoro più. Utilizzare il seguente metodo invece, per il video normale, l'opzione di richiesta può essere nil
, ma per i video al rallentatore, è necessario impostare PHVideoRequestOptionsVersionOriginal
.
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
AVURLAsset* urlAsset = (AVURLAsset*)asset;
NSNumber *size;
[urlAsset.URL getResourceValue:&size forKey:NSURLFileSizeKey error:nil];
NSLog(@"size is %f",[size floatValue]/(1024.0*1024.0)); //size is 43.703005
}
}];
// risposta originale
Per PHAsset, utilizzare questo:
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
float imageSize = imageData.length;
//convert to Megabytes
imageSize = imageSize/(1024*1024);
NSLog(@"%f",imageSize);
}];
Per ALAsset:
ALAssetRepresentation *rep = [asset defaultRepresentation];
float imageSize = rep.size/(1024.0*1024.0);
ho testato su una risorsa video, mostra la PHAsset dimensioni come 43.703125, ALAsset mostra la dimensione come 43.703005.
Modifica Per PHAsset, un altro modo per ottenere la dimensione del file. Ma come ha detto @Alfie Hanssen, funziona su video normali, per i video al rallentatore, il metodo seguente restituirà un asset AVComposition nel blocco, quindi ho aggiunto il controllo per il suo tipo. Per i video al rallentatore, utilizzare il metodo requestImageDataForAsset
.
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
AVURLAsset* urlAsset = (AVURLAsset*)asset;
NSNumber *size;
[urlAsset.URL getResourceValue:&size forKey:NSURLFileSizeKey error:nil];
NSLog(@"size is %f",[size floatValue]/(1024.0*1024.0)); //size is 43.703005
NSData *data = [NSData dataWithContentsOfURL:urlAsset.URL];
NSLog(@"length %f",[data length]/(1024.0*1024.0)); // data size is 43.703005
}
}];
È tirare piuttosto elevata probabilità, che il video che vuoi sapere è di dimensioni non è il tipo di AVURLAsset
. Ma va bene che sotto il cofano ci sono più file di cui il tuo video è composto (per esempio campioni grezzi, intervalli di tempo slow-mo, filtri, ecc ...), perché vuoi conoscere la dimensione di un concreto file riproducibile. Non sono sicuro di come le dimensioni dei file stimati soddisfino la realtà in questo caso, ma questo è come dovrebbe essere fatto:
PHImageManager.defaultManager().requestExportSessionForVideo(asset, options: nil, exportPreset: AVAssetExportPresetHighestQuality, resultHandler: { (assetExportSession, info) -> Void in // Here you set values that specifies your video (original, after edit, slow-mo, ...) and that affects resulting size.
assetExportSession.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(asset.duration, 30)) // Time interval is default from zero to infinite so it needs to be set prior to file size computations. Time scale is I believe (it is "only" preferred value) not important in this case.
let HERE_YOU_ARE = assetExportSession.estimatedOutputFileLength
})
Solo una nota, i documenti dicono che 'assetExportSession.estimatedOutputFileLength' sarà restituire sempre 0 per 'AVAssetExportPresetPassThrough'. Attenzione ... –
nota, poiché si tratta di 'EstimateOutputFileLength', non si può considerare che sia il file effettivo. Nel mio caso c'era una differenza di 30 MB. –
- 1. Come determinare la dimensione di un file aperto in Python?
- 2. Determinare la dimensione dell'immagine PHAsset più grande disponibile sul dispositivo iOS
- 3. R Come stimare la dimensione del file csv prima di scriverlo sul disco
- 4. Come ridurre la dimensione sdk di Android sul disco rigido
- 5. Come rilevare correttamente un tipo di file PHAsset (GIF)
- 6. AVURLAsveglia la dimensione del video
- 7. È possibile determinare la dimensione del file da scaricare?
- 8. Come posso determinare la dimensione di un tipo in Haskell?
- 9. video calcolo bitrate e dimensione del file
- 10. Come si ottiene la dimensione del file in C#?
- 11. come ridurre la dimensione del video prima di caricare sul server in modo programmatico su Android
- 12. Come determinare la lunghezza del contenuto di un file gzip?
- 13. Determinare la dimensione dell'array nell'inizializzatore del costruttore
- 14. Come registrare video su un disco locale in AIR?
- 15. Come ottenere la dimensione effettiva su disco di un file da PowerShell?
- 16. Come determinare la larghezza e l'altezza del video su Android
- 17. Perché il pickle python carica e scarica la dimensione di un oggetto sul disco?
- 18. Riproduci file video (disco rigido) locale con tag video HTML5?
- 19. Come interrogare le informazioni sul file "Dimensioni su disco"?
- 20. C'è un modo per determinare la dimensione fisica del monitor?
- 21. Come determinare la dimensione massima della transazione in MySQL?
- 22. Ottieni la dimensione del file dalla matrice di byte (senza salvare su disco)
- 23. come determinare la dimensione del tablespace oracolo 11g
- 24. Manca la tastiera sul simulatore iOS8?
- 25. Come determinare la dimensione di una stringa dato un font
- 26. Come determinare la dimensione di un'icona da un HICON?
- 27. Dimensione directory Java su disco?
- 28. Limitare la dimensione del disco e la larghezza di banda di un contenitore Docker
- 29. Aprire un file diretto sul disco rigido da firefox (file: ///)
- 30. Come limitare la dimensione del file di registro in python
Grazie! È strano che non ci sia richiestaVideoDataForAsset ... e che requestImageDataForAsset restituisca la dimensione del video – jlw
Sì, puoi usare requestAVAssetForVideo, che è specifico per il video. – gabbler
Questo metodo sembra restituire una composizione AV (impossibile eseguire il cast come AVURLAsset). Il tentativo di farlo come mostrato sopra provoca un crash. iOS 8.1.2. –