visual studio reproductor reproducir musica hacer como c# video compression windows-phone avi

studio - reproducir mp3 en c#



Comprimir marcos dentro de un video AVI (1)

Creé una clase Windows Phone para convertir algunos WriteableBitmap en un AVI Full Frame (sin comprimir). Los videos son realmente enormes. ¿Existe una implementación de códec simple, como un códec que solo crea imágenes zip, o algo que está haciendo un XOR siguiente / anterior y luego lo zip en jpeg?

Windows Phone no permite ningún código inseguro y la mayoría de los archivos DLL no pueden incluirse en una biblioteca C # WP. Entonces, es por eso que estoy codificando algo desde cero. Tenga en cuenta que soy más eficiente en la codificación desde cero que en el estudio de fuentes existentes en C ++ (no soy un codificador de C ++), por lo que estoy buscando información sobre un formato AVI comprimido que se puede lograr sin escribir 100000 líneas. He usado AVI porque las especificaciones son simples.

[EDITAR]

He encontrado algo muy interesante aquí en codeproject, de un artículo de 2004. Es una fuente 100% C # para convertir fotogramas a mpeg-1. Lamentablemente, ese es i frame, y no p frame, por lo que los archivos son 3 veces más grandes que el tamaño promedio esperado de un archivo mpeg-1.

[EDITAR]

Para describir más mi proyecto, lo que haré es aplicar algunos efectos en una película capturada. Esta película se cargará en Youtube u otros sitios web. Por lo tanto, el usuario espera la resolución exacta utilizada en el teléfono, al menos 25 cuadros / s, una calidad decente y un tiempo de carga corto. Entonces no puedo parar con un Mpeg-1 I-Frames. Tendré que estudiar sobre la predicción en mpeg-1.


Considero que se trata de una continuación / re-publicación de su pregunta anterior (pero con algunos detalles más). Como mencioné en los comentarios de esa publicación, hay un universo entero de códecs de video. Una razón para la proliferación es que a mucha gente le gusta reinventar las ruedas. Sin embargo, una razón más importante es que hay muchos casos de uso diferentes para video.

Parece que está pidiendo mucho, pero hay muchas variables que no ha presentado:

  • Usted expresa la necesidad de un codificador de video que se ejecute exclusivamente en el software de un dispositivo con Windows Phone, que necesariamente es una máquina de muy baja potencia; ¿necesitas que se ejecute en tiempo real? Es decir, ¿espera que un cuadro de video se comprima casi inmediatamente después para enviar el cuadro sin comprimir (dentro de unos pocos milisegundos)? ¿O puede dejar que el dispositivo piense en la compresión por un tiempo?
  • ¿Qué tan grandes son los marcos de video? ¿Estás haciendo capturas de pantalla en un dispositivo WP, es decir, datos generados por computadora? ¿O está leyendo marcos sin procesar de la cámara y esperando comprimirlos?
  • Siguiendo con el punto anterior, ¿qué tipo de datos de video? Los datos generados por computadora se verán mejor con una cierta clase de códecs. Las imágenes de calidad fotográfica (desde la cámara) implican una familia diferente de códecs.
  • ¿Qué bitrate estás buscando? Si tienes 1 segundo de video, ¿cuál es la cantidad máxima de bytes que debería ocupar (o eso esperas)?
  • ¿Quién es el consumidor final del video? En la última publicación, indicó que quería subir a YouTube. Si ese es el caso, estás de suerte, ya que YouTube, respaldado por FFmpeg, maneja casi todos los codecs del universo, por lo que tendrías muchas opciones.

No sé mucho sobre la programación de Windows Phone. Sin embargo, cualquier dispositivo WP técnicamente tendrá capacidades de codificación de video por hardware. He hecho algunas búsquedas rápidas en Google para determinar si tienes acceso a eso en el nivel de programación de la aplicación, pero no puedo encontrar ninguna evidencia de que sea posible (y esta respuesta indica que la funcionalidad no está allí).

Espero impresionarte que escribir un codificador de video es MUCHO trabajo (mira mi nombre de usuario, sé de dónde hablo). En general, requieren una gran cantidad de potencia de la CPU (y, en consecuencia, la potencia de la batería, especialmente cuando se implementa en software puro). Sin embargo, ya ha hecho algunas conjeturas sobre un códec que usa zlib estándar. De hecho, hay algunos códecs de video basados ​​en zlib directo, es decir, MSZH y ZLIB, colectivamente las bibliotecas de códecs de Lossless . Esa página wiki tiene una descripción básica de bitstream (revelación: yo opero ese sitio wiki). Estoy seguro de que las bibliotecas WP incluyen acceso a la codificación zlib, por lo que este podría ser un punto de partida, y YouTube debería poder digerir los archivos resultantes.

También hay un códec de video que combina XOR y zlib como usted adivinó ( Dosbox Capture Codec ), pero probablemente no sea apropiado para su aplicación.

¿Las bibliotecas proporcionan acceso a JPEG estándar (es decir, puede codificar archivos JPEG)? Otra opción (dependiendo del tipo de video) serían los cuadros sucesivos de imágenes JPEG aún rellenas en el archivo AVI. Esto se conoce como Motion JPEG o MJPEG. Sin embargo, es aproximadamente equivalente en bitrate a MPEG-1 intra-único, que usted expresó como inadecuado.

Espero haberles dado algunas ideas y avenidas útiles para buscar una solución en su camino.