Ejemplo de Java: Cargar vídeo

Este tema explica cómo utilizar una página HTML para cargar un vídeo a la biblioteca multimedia con Java y la API Media Write. Una clase de servlet procesa la página de formulario HTML, obtiene el nombre del vídeo, la descripción y el archivo, y los pasa al método create_video.

Descargando y examinando el ejemplo de código aprenderá a cargar vídeo de manera programada con Java y la API Media Write, y a personalizar la aplicación según necesite.

Antes de empezar

El ejemplo consta de dos archivos:

  • El archivo UploadVideo.java, que define una clase de servlet que obtiene la entrada de un formulario y la pasa al método create_video de la Write API.
  • El archivo uploadVideoForm.html, que muestra un formulario en el que el usuario especifica un nombre, una descripción y una ruta del vídeo. El botón para enviar el formulario pasa la entrada al servlet UploadVideo.

Para poder seguir el código que aparece en este tema, debe estar familizarizado con los servlets de Java y el tratamiento de formularios.

En este tema explicamos:

La clase de servlet UploadVideo

La clase de servlet acepta el POST entrante del formulario y cambia el formato de los datos a una llamada JSON-RPC para la API Write. Para el ejemplo siguiente, se utiliza la clase auxiliar ClientHTTPRequest de la biblioteca ClientHTTP de Vlad Patryshev, y se necesitan los archivos JAR commons-io y commons-fileupload de Apache Commons.

En primer lugar, el servlet analiza el POST entrante del formulario HTML:

/* STEP 1. 
   Tratar la solicitud entrante del cliente
 */
 
// Solicitar el análisis a través de la biblioteca de FileUpload de Jakarta Commons
// http://commons.apache.org/fileupload/
 
// Crear un generador para los elementos de archivo basados en disco  
DiskFileItemFactory factory = new DiskFileItemFactory();
 
// Crear un nuevo controlador de carga de archivos
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1000000000);
 
// Analizar la solicitud en una lista de DiskFileItems
List items = upload.parseRequest(request);
 
// Campos necesarios para la solicitud de la API
String videoName = "";
String videoDescription = "";
File videoFile = null;
String videoFilename = "";
long videoMaxSize = 0;
 
// Repetir en la lista de DiskFileItems
Iterator iter = items.iterator();  
while (iter.hasNext()) {
	DiskFileItem item = (DiskFileItem) iter.next();
 
	if (item.isFormField()) {
		
		if (item.getFieldName().equals("name")) {
			videoName = item.getString();
		} else if (item.getFieldName().equals("desc")) {
			videoDescription = item.getString();                        
		}
 
	} else {
		videoFile = item.getStoreLocation();
		videoFilename = item.getName();
		videoMaxSize = item.getSize();
 
	}
}

Este servlet utiliza una biblioteca auxiliar de Jakarta Commons para analizar la solicitud, pero también puede escribir su propia biblioteca o utilizar una de las muchas bibliotecas de código abierto creadas para este fin. Esta biblioteca utiliza post multipart (del tipo que se envía desde los formularios de carga), y lo guarda en una lista FileItems. Repasando esta lista podrá separar los campos de metadatos de los campos de archivo.

En el siguiente paso se codifican los metadatos en JSON:

/* STEP 2. 
Assemble the JSON params
*/
 
String json = "{\"method\":\"create_video\"" +
          ", \"params\":{" +
          "\"token\":" + "12345asdfasdfa67898" + ", " +
          "\"video\":" + 
                "{\"name\":\"" +  videoName + "\", " +
                "\"shortDescription\":\"" + videoDescription + "\"}, " +
 
          "}}";

Los puntos importantes a tener en cuenta son los siguientes:

  • El método de la llamada es un parámetro JSON, en lugar de en la cadena de consulta como en una llamada GET.
  • params contiene un objeto de argumentos adicionales para la llamada, como su objeto de metadatos de vídeo y token.
  • En el objeto de metadatos de vídeo se especifican las propiedades name y shortDescription (ambas obligatorias). Opcionalmente, puede definir otras propiedades configurables, como tags, relatedLink, economics, etc.

Por último, el servlet toma la cadena JSON y los datos del archivo y utiliza POST para enviar el archivo a Write API. A continuación, podemos observar la estructura de la llamada utilizada para cargar el vídeo en la última parte del código del servlet:

// Definir la URL en la API
String targetURL = "http://api.brightcove.com/services/post";
            
// Crear el objeto de parámetros solicitado por...
Object[] params;
if(videoFile == null) {
  params = new Object[] { "JSON-RPC", json };
} else {
  params = new Object[] {
        "JSON-RPC", json,
        videoFilename, videoFile
  }; 
}              
            
// ... la clase auxiliar ClientHTTPRequest de la biblioteca ClientHTTP de Vlad Patryshev
// http://www.devx.com/Java/Article/17679/1954?pf=true

InputStream in = ClientHttpRequest.post( new java.net.URL(targetURL), params );

Puesto que el nivel de la pila de red de Java es bajo, esta parte del servlet utiliza una biblioteca auxiliar a fin de simplificar la creación de la solicitud HTTP. Con esta biblioteca, únicamente deberá especificar un objeto de parámetros y la dirección URL a la que enviarlos.

Los puntos importantes a tener en cuenta son los siguientes:

  • El servlet realiza una solicitud de tipo JSON-RPC
  • La cadena json contiene los metadatos del vídeo (esta parte se explica en detalle más adelante).
  • Los archivos cargados son videoFilename y videoFile

Carga utilizando un formulario HTML

Ahora que hemos definido la clase de servlet UploadVideo, podemos utilizarlo en un formulario HTML simple. Vea el código del ejemplo funcional.

En este ejemplo, definimos una acción POST para nuestro servlet UploadVideo. El formulario también dispone de dos campos de entrada en los que puede especificar el nombre y la descripción del vídeo que carga, además de un tercer campo de entrada que permite buscar el archivo de vídeo en su sistema:

<FORM ENCTYPE="multipart/form-data" method="POST" 
  action="http://localhost:8080/Library_API_Test/uploadvideo">
  Nombre del vídeo: <INPUT TYPE="text" NAME="name" value="video name"/><br/>
  Descripción: <INPUT TYPE="text" NAME="desc" value="description"/><br/>
  Archivo:	<INPUT TYPE="file" NAME="file" />
  <INPUT TYPE="submit" VALUE="Upload"/>
</FORM>

El botón de envío de formulario transfiere la entrada de formulario al servlet UploadVideo, que, como hemos comprobado, analiza la entrada, y configura y ejecuta el método create_video.

Cómo obtener ayuda adicional

Si necesita ayuda para que sus vídeos se suban al servidor, el Servicio de Asistencia Técnica de Brightcove estará encantado de asesorarle. Puede enviar una solicitud de asistencia técnica aquí. Para que podamos darle una solución lo antes posible, le rogamos que tenga preparada la siguiente lista de requisitos.

  • El tamaño del archivo
  • El método de transferencia (estándar, acelerada, FTP, Write API)
  • El nombre y la extensión del archivo
  • ¿Se "cuelga" la transferencia antes de alcanzar el 100%?
  • ¿Alcanza la transferencia el 100% pero luego genera un error? Si se genera algún error, envíenos (a ser posible) una captura de pantalla. Si no puede enviarnos una captura de pantalla, indíquenos el texto del mensaje de error.

Tras enviar su solicitud de asistencia técnica, recibirá por correo electrónico una confirmación procedente del Servicio de Asistencia Técnica de Brightcove. Puede proporcionar información adicional al Servicio de Asistencia Técnica de Brightcove respondiendo a dicho correo de confirmación.

Publicar nuevo comentario

El contenido de este campo es confidencial y no se mostrará al público.
0

Comentarios