01 de enero 1904, 1970, Youtube, los conflictos internacionales y curvas manos

Por desgracia, desaparecido hace tiempo vínculos temas, pero a veces las cosas muy entretenidas de primera mano. Recomendar puesto Anatoly Vorobeya (desarrollador trabaja en "Google").

En el formato de video MP4 (MPEG-4 estándar), es posible grabar el "momento de la creación" de cualquier flujo de datos mediante el uso de una etiqueta especial. El valor de esta etiqueta en la norma: el número de segundos desde el 1 de enero de 1904, o la llamada «время por edad mac », porque amapolas fueron los primeros en utilizar una temporización tales. Mientras tanto, los servidores de hoy son mucho más fáciles de tratar con "el tiempo en época de Unix", es decir, el número de segundos desde 1 de enero de 1970. Como resultado de ello, en una variedad de programas que se ejecutan en Linux u otros sistemas operativos Unix, hay un pedazo de código que se parece a esto:
  • obtener el "tiempo ahora para Unix»;
  • Añadir la diferencia entre Unix y el tiempo en el Macintosh - que es un poco una constante;
  • el resultante "tiempo ahora para mac" escribir en el archivo MP4, que creamos. ¿Qué es la "diferencia entre Unix y hora en mac?" constante Es exactamente el número de segundos transcurridos entre enero 1 de 1904 y 1 de enero de 1970. Este es de 66 años, de los cuales 17 son años bisiestos (comprobar si usted no confía en mí). Días tienen: 66 * 365 + 17 = 24 107, y en segundo lugar, dado 86.400 segundos en un día:. 24 107 86 * 400 = 2 082 844 800. Este es el valor correcto de la constante

    Pero hay un poco pequeño poser imperceptible. Parte de la norma MPEG-4 - bibliotecas de código que pueden leer y escribir archivos en el software mp4 tan de referencia en C ++, que todo el mundo puede utilizar para pedir prestado o compare con su código. El título completo de esta parte de la norma: ISO / IEC 14496-5. Si estás interesado, puedes descargar este часть estándar gratis desde la web oficial. Y si nos fijamos en el código fuente, verás que usa un valor diferente de esta constante, es decir, 2.082.758 400. Esto es exactamente 86.400 segundos, es decir, por la noche, a menos que el valor correcto.

    ¿Cómo los creadores del MPEG-4 consideran indebidamente la diferencia entre dos fechas? Tal vez alguien considera manualmente años bisiestos y cometió un error? No lo sé. De cualquier manera, el valor incorrecto debido a su presencia en la horrible estándar en muchas bibliotecas para los formatos de lectura y escritura. Poco a poco, en los últimos años el valor correcto empieza a cambiar; si usted busca en google ambos números, verá varios descripción exacta del problema en el código fuente de varios proyectos: "La norma sugiere usar 2082758400, pero el valor correcto es 2082844800." En otros proyectos, el valor correcto es la pena, simplemente porque contaban con la base de una determinada época, y no utilizan el código fuente de la norma.

    Si la biblioteca que crea para usted MP4 archivos registra el valor incorrecto, entonces, ¿qué va a pasar cuando quiere grabar un momento de "ahora"? Tomará el número correcto de segundos en sistemas Unix, añadir una constante al día es menos de lo necesario, y por lo tanto dar el número de segundos, de acuerdo a la época del mac que se corresponde con el tiempo en la noche antes. Envié una descripción de los problemas y soluciones a los desarrolladores de YouTube, y espero que este error desaparecerá pronto.

    Todo en este mundo está interconectado. Curvas manos autores de MPEG-4 conduce a teorías de conspiración en el conflicto de Ucrania. Y vivimos.

    Fuente: habrahabr.ru/post/230571/

Tags

Vea también

Nueva y Notable