es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay otra forma de obtener información de metadatos de archivos de video en una aplicación Flutter de escritorio. Puede utilizar el paquete dart:io para acceder a las funcionalidades del sistema y recuperar los metadatos. El paquete dart:io proporciona las clases File y Metadata, las cuales se pueden utilizar para leer y extraer la información de metadatos del archivo de video.

    Aquí hay un ejemplo de código que muestra cómo recuperar los metadatos de un archivo de video MP4:

    import 'dart:io';
    
    void main() {
      final file = File('path/to/video.mp4');
      final metadata = file.metadata;
    
      final creationTime = metadata?.creationTime;
      final modificationTime = metadata?.modifiedTime;
      final fileSize = metadata?.size;
      final duration = getDurationFromMetadata(metadata);
    
      print('Creation Time: $creationTime');
      print('Modification Time: $modificationTime');
      print('File Size: $fileSize bytes');
      print('Duration: $duration segundos');
    }
    
    double getDurationFromMetadata(FileSystemEntity entity) {
      final mp4BoxTypes = ['moov', 'trak', 'mdia', 'minf', 'stbl', 'stsd'];
    
      final file = entity as File;
      final bytes = file.readAsBytesSync();
      for (var i = 0; i < bytes.length; i++) {
        if (bytes[i] == 0x6d) {
          final mp4Box = String.fromCharCodes(bytes.skip(i + 4).take(4));
          if (mp4Box == 'mvhd') {
            final timescale = bytes.skip(i + 12).take(4).toList();
            final duration = bytes.skip(i + 20).take(4).toList();
            final scale = timescale[0] << 24 | timescale[1] << 16 | timescale[2] << 8 | timescale[3];
            final time = duration[0] << 24 | duration[1] << 16 | duration[2] << 8 | duration[3];
            return time / scale;
          } else if (mp4BoxTypes.contains(mp4Box)) {
            i += 4;
            final boxSizeBytes = bytes.skip(i).take(4).toList();
            final boxSize = boxSizeBytes[0] << 24 | boxSizeBytes[1] << 16 | boxSizeBytes[2] << 8 | boxSizeBytes[3];
            i += boxSize;
          }
        }
      }
    
      return null;
    }
    

    En este código, primero creamos un objeto File para acceder al archivo de video. Luego, extraemos los metadatos del archivo utilizando el getter metadata proporcionado por el paquete dart:io. Podemos acceder a propiedades como creationTime, modifiedTime y size desde el objeto de metadatos. Sin embargo, la propiedad duration no está disponible en los metadatos para la mayoría de los formatos de video.

    Para obtener la duración del video, tenemos que analizar el contenido del archivo de video nosotros mismos. La función getDurationFromMetadata hace esto buscando la caja mvhd en los bytes del archivo y extrayendo timescale y duration. Con esta información, podemos calcular la duración del video en segundos.

    Con este enfoque, puede obtener efectivamente la información de metadatos de los archivos de video para su aplicación Flutter de escritorio sin depender de bibliotecas no admitidas como flutter_ffmpeg.

Comments are closed.