tamaño - Flex: crea dinámicamente una imagen de vista previa para un video
vista previa mac descargar (3)
Estoy bastante seguro de que esto no es posible. Bien puede ser ... pero no lo creo. Creo que la única manera de cargar video es usar el objeto NetStream y NetConnection, que como ya sabes, inicia la carga del video.
Si este es un video generado por el usuario, creo que la mejor opción es tener algún script secundario de serever que genere la imagen de vista previa. No tengo idea de cómo se hace esto, pero creo que así es como funcionan la mayoría de los sitios de clip.
Si todos los videos están bajo su control, es posible escribir un script para uno de los programas de edición de video para automatizar la generación de la imagen para un marco específico a partir de una lista de archivos. Creo que esta es probablemente tu mejor ruta como alternativa para que puedas comenzar a funcionar rápidamente.
Perdón por la respuesta vaga ... puede indicarle la dirección correcta si necesita una solución rápida.
Estoy usando VideoDisplay para jugar flv''s, mov''s y mp4''s y todo está funcionando bien. Todos se cargan mediante descarga progresiva y no se transmiten. Lo que me gustaría hacer es tomar un único marco específico (como lo que se muestre en la marca de los 10 segundos), convertirlo en un mapa de bits y usar ese mapa de bits como imagen de vista previa para el video. Me gustaría hacer esto en tiempo de ejecución para no tener que crear una imagen de vista previa para cada video que se muestre.
¿Alguna idea sobre cómo hacer esto? Prefiero no fingir jugando - buscando ese marco específico y luego pausarlo, pero no tengo otra opción.
Estoy de acuerdo con James, la única manera de hacer esto sería hacerlo con un script del lado del servidor y sacar ciertos fotogramas del video. Incluso si pudieras hacer esto con flex, realmente no querrías poner la carga para hacer esto (que sería un procesador intensivo, creo) en la máquina del cliente. Sin mencionar que será mucho más eficiente crear la imagen antes de la mano que tener flexibilidad para determinar la miniatura que se muestra cada vez que se carga.
Ryan y James están en lo cierto: la forma correcta es probablemente extraer los fotogramas en el momento de la carga / transcodificación. Pero si eso no es una opción, puede optar por usar algún tipo de imagen propia predeterminada / placeholder (algo genérico o de alguna manera adecuado para todos los videos cuyos pulgares aún no se han capturado), y simplemente use DisplayObject-ness de VideoDisplay para agarra y luego sube un marco a tu servidor, por ejemplo:
<mx:Script>
<![CDATA[
var captured:Boolean;
private function creationCompleteHandler(event:Event):void
{
videoDisplay.source = "http://yourserver/yourvideo.flv";
}
private function videoDisplay_playheadUpdate(event:VideoEvent):void
{
if (!captured && videoDisplay.playheadTime >= 10)
capture();
}
private function capture():void
{
var bmpData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height);
bmpData.draw(videoDisplay);
captured = true;
// Now just upload the byte array to your server for the next user
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
// ... etc.
}
]]>
</mx:Script>
<mx:VideoDisplay id="videoDisplay" playheadUpdate="videoDisplay_playheadUpdate(event)" />
Nuevamente, quizás no sea la solución más elegante, pero ciertamente funciona. De esta forma, el primer usuario ve la imagen genérica, pero a partir de entonces todos los usuarios obtienen la miniatura generada. (Que, por supuesto, ya habrás cargado y asociado correctamente). ¿Tiene sentido?