¿Qué carga el formato h. 264 en Android E IOS?


Teóricamente tanto IOS como ANDROID reproducirán archivos h.264, pero no puedo averiguar una configuración para codificarlos para que realmente funcionen multiplataforma. ¿Alguien sabe cómo codificar para Android e IOS usando un archivo?

P. S. Sé todo sobre el vídeo html5 y las fuentes de reserva, simplemente no quiero codificar y alojar un nuevo vídeo para cada dispositivo que viene por el pike.

Author: JKirchartz, 2011-06-16

3 answers

Aquí está la línea de comandos ffmpeg que usamos para transcodificar a MPEG-4 h.264 en nuestro entorno de producción. Hemos probado la salida en varios dispositivos Android, así como iOS. Puede usar esto como punto de partida, simplemente ajustando cosas como el tamaño de fotogramas/velocidad de fotogramas y qfactor.

ffmpeg -y 
-i #{input_file} 
-s 432x320 
-b 384k 
-vcodec libx264 
-flags +loop+mv4 
-cmp 256 
-partitions +parti4x4+parti8x8+partp4x4+partp8x8 
-subq 6 
-trellis 0 
-refs 5 
-bf 0 
-flags2 +mixed_refs 
-coder 0 
-me_range 16 
-g 250 
-keyint_min 25 
-sc_threshold 40 
-i_qfactor 0.71 
-qmin 10 -qmax 51 
-qdiff 4 
-acodec libfaac 
-ac 1 
-ar 16000 
-r 13 
-ab 32000 
-aspect 3:2 
#{output_file}

Algunas de las opciones importantes que afectan la compatibilidad de Android son:

-coder 0      Uses CAVLAC rather than CABAC entropy encoding (CABAC not supported on Android)
-trellis 0    Should be shut off, requires CABAC
-bf 0         Turns off B-frames, not supported on Android or other h.264 Baseline Profile devices
-subq 6       Determines what algorithms are used for subpixel motion searching. 7 applies to B-frames, not supported on Android.
-refs 5       Determines how many frames are referenced prior to the current frame.  Increasing this number could affect compatibility

Después de codificar nuestro video con esta receta ffmpeg, también pasamos el video a través de qt-faststart. Este paso vuelve a ejecutar el vídeo para su transmisión. Lo transmitimos a través de HTTP a una VideoView incrustada dentro de nuestra aplicación para Android. No hay problemas para transmitir a cualquier dispositivo Android que conozcamos.

Actualización 2013-06-17: Solo quería añadir una nota que es mejor seguir con el perfil de "línea de base" para la codificación H. 264 para la máxima compatibilidad en todos los dispositivos Android. La línea de comandos anterior no especifica explícitamente un perfil H. 264, pero ffmpeg tiene un -profile bandera de línea de comandos que es útil si está utilizando sus presets . Probablemente no deberías meterte con -profile. He codificado videos para mi tableta ASUS Transformer 300 (Android 4.2) utilizando el perfil "principal" en lugar de "línea de base" (a través del freno de mano). El perfil "principal" dio problemas para que el audio no se sincronizara con el video durante la reproducción.

 51
Author: mportuesisf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-17 18:20:04

Usé esto para hacer una aplicación para Android e iOS con videos incrustados. Los vídeos reproducidos en ambas versiones. (Ejemplo de Android) (Ejemplo de iOS)

Respuesta suplementaria

Esta respuesta es un suplemento a la respuesta aceptada explicando algunos de los parámetros.

ffmpeg 
-y                  # Overwrite output files without asking.
-i input_filename   # input file name    
-s 432x320          # size of output file
-b:v 384k           # bitrate for video
-vcodec libx264     # use H.264 video codec
-flags +loop+mv4    # use loop filter and four motion vector by macroblock
-cmp 256            # ??? Full pel motion estimation compare function
-partitions +parti4x4+parti8x8+partp4x4+partp8x8      #???
-subq 6             # determines algorythms for subpixel motion searching and partition decision
-trellis 0          # optimal rounding choices
-refs 5             # number of frames referenced prior to current frame
-bf 0               # turn of B-frames, something to do with H.264 and Baseline Profile
-flags2 +mixed_refs # ??? gave me an error so I just deleted it
-coder 0            # turn of the CABAC entropy encoder
-me_range 16        # max range of the motion search
-g 250              # GOP length (250 is the recommended default)
-keyint_min 25      # Minimum GOP length (25 is the recommended default)
-sc_threshold 40    # adjusts sensitivity of x264's scenecut detection (default is 40) 
-i_qfactor 0.71     # Qscale difference between I-frames and P-frames (0.71 is the recommended default)
-qmin 10 -qmax 51   # min and max quantizer (10 and 51 are the recommended defaults)
-qdiff 4            # max QP step (4 is recommended default)
-c:a aac            # Set the audio codec to use AAC
-ac 1               # number of audio channels 
-ar 16000           # audio sampling frequency
-r 13               # frames per second
-ab 32000           # audio bitrate
-aspect 3:2         # sample aspect ratio
output_filename     # name of the output file

Siéntase libre de editar esto si puede completar algunos de los detalles de los que no estaba seguro.

Aquí está de nuevo en un formato de cortar y pegar. (También tuve que añadir el -strict -2 parámetro para que aac funcione en mi computadora.)

ffmpeg -y -i input_file.avi -s 432x320 -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -c:a aac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -strict -2 output_file.mp4

Estudio adicional

La mayor parte de esta información la encontré en los siguientes enlaces:

Véase también

 3
Author: Suragch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-06 02:45:57

Ver Formatos de Medios compatibles con Android, lo que indica que h.264 solo es compatible con Android 3.0+. Las versiones anteriores de Android admiten h.263. EDIT : Como mportuesisf menciona a continuación, he malinterpretado la tabla enlazada. Ignora esta respuesta.

 -1
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-19 10:51:57