Servidor multimedia
El objeto roMediaStreamer le permite configurar una canalización de elementos de procesamiento multimedia para su ejecución. Esto puede implicar la transmisión de los resultados mediante RTP o UDP, pero no es capaz de comportarse como un servidor verdadero, que escucha conexiones y luego actúa sobre ellas. Esta es la función del Media Server, representado por el objeto roMediaServer .
El Media Server espera solicitudes, se encarga de cualquier negociación y, en última instancia, crea una canalización de Media Streamer que ejecuta para satisfacer la solicitud. El Media Server actualmente admite el protocolo RTSP (como el utilizado, por ejemplo, por VLC) y solicitudes HTTP. Estas solicitudes del cliente deben tener el siguiente formato:
protocol://IP_address:port/media_streamer_pipeline
- protocolo: rtsp o http
- IP_address:puerto: La dirección IP del reproductor BrightSign y el número de puerto en el que se está ejecutando el Media Server. Para obtener más información, consulte el ejemplo a continuación.
- media_streamer_pipeline: Una canalización de Media Streamer como la presentada en ejemplos anteriores, pero sin el componente de destino final (ya que el destino está implícito en la solicitud del cliente).
No utilice los puertos 8888 o 9999, ya que estos puertos pueden ser utilizados por BrightSignOS.
Las funciones de Media Server actualmente no están disponibles en BrightAuthor Classic, pero puede configurar un streamer/servidor mediante el plugin Media Server.
Inicializar el Media Server
Un RTSP Media Server puede iniciarse de la siguiente manera:
s = CreateObject("roMediaServer")
s.Start("rtsp:port=554")Esto iniciará un servidor RTSP que escucha en el puerto 554. El número de puerto y el protocolo de transmisión pueden personalizarse: por ejemplo, se puede iniciar un servidor HTTP en el puerto 8080 de la siguiente manera:
s = CreateObject("roMediaServer")
s.Start("http:port=8080")El media server admite varios parámetros opcionales después del parámetro puerto , que pueden añadirse a la cadena de comandos con un "&" (ampersand):
- puerto: Especifica un número de puerto para el servidor. Si este parámetro no se especifica, el servidor utiliza de forma predeterminada 554 para RTSP y 8080 para HTTP.
- rastro: Muestra un rastreo de mensajes durante la negociación con el cliente. Este parámetro es útil principalmente para depurar sesiones RTSP. Por ejemplo: rtsp:port=554&trace
- maxbitrate: Establece la tasa de bits instantánea máxima (en Kbps) de la transferencia RTP iniciada mediante RTSP. Este parámetro no tiene efecto para HTTP. Un valor de 80000 (es decir, 80Mbps) funciona bien. El comportamiento predeterminado (también logrado al pasar 0) es no limitar en absoluto la tasa de bits. Por ejemplo: rtsp:port=554&trace&maxbitrate=80000
- hilos: Establece el número máximo de hilos que el servidor está preparado para ejecutar. Cada hilo maneja una única solicitud de cliente. El valor predeterminado es 5. Por ejemplo: http:port=8080&threads=10
Para detener el Media Server, use el método Stop() . Esto en realidad envía una señal a todos los hilos para que se detengan, pero no espera a que esto suceda. Para bloquear hasta que todo haya finalizado realmente, use s.Terminate() (que también puede usarse por sí solo), o simplemente permita que el objeto Media Server esté sujeto a la recolección de basura.
Ejemplos de Media Server
Estos ejemplos son URL del lado del cliente que pueden pegarse en VLC para realizar pruebas. Tenga en cuenta que no se permiten espacios entre los componentes de la canalización de Media Streamer, ni nombres de archivo que contengan comas.
Solicitar un archivo para transmitir
Use la siguiente URL para solicitar al servidor que transmita un archivo desde el almacenamiento local:
rtsp://IP_address:port/file:///file.ts
El parámetro loop puede añadirse para repetir el archivo indefinidamente:
rtsp://IP_address:port/file:///file.ts?loop
Use lo siguiente para transmitir el archivo file.ts mediante HTTP en su lugar:
http://IP_address:port/file:///file.ts
Solicitar un flujo de entrada HDMI codificado
Use la siguiente URL para solicitar al servidor que transmita su entrada HDMI®:
rtsp://IP_address:port/hdmi:,encoder:
Solicitar un flujo de memoria
Flujos de memoriaMemory streams configurados previamente pueden solicitarse mediante RTSP o HTTP. El siguiente ejemplo transmitirá el flujo de memoria denominado name, que se había iniciado previamente:
http://IP_address:port/mem:/name/stream.ts
Tenga en cuenta que /stream.ts se añade para indicar el flujo completo, en lugar de solo partes de este (como en el caso de HLS).
Solicitar un flujo HLS
Un componente de flujo de memoria indexado (es decir, no simple) ya debe estar en ejecución para atender una solicitud HLS. La transmisión HLS se puede iniciar solicitando la siguiente URL:
http://IP_address:port/mem:/name/index.m3u8
Esto recuperará el archivo de lista de reproducción para el flujo de memoria llamado name. Observe que /index.m3u8 debe añadirse para indicar el archivo de índice, en lugar del flujo en sí. Alternativamente, si los archivos de índice y segmentos HLS se han guardado previamente en el almacenamiento del servidor, se puede acceder a ellos mediante solicitudes HTTP normales.
Este flujo de prueba se puede usar en reproductores BrightSign: http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8
Sintaxis URL para un cliente RTSP
Al especificar la URL, un reproductor BrightSign que actúa como cliente puede interpretar partes de la URL después de un "?" (signo de interrogación) como opciones para analizar; asimismo, las etapas del Media Server que atienden la solicitud del cliente pueden esperar lo mismo. Por ejemplo, en la siguiente URL, puede ser ambiguo si el parámetro bucle está destinado al reproductor del lado del cliente o al transmisor multimedia del lado del servidor:
rtsp://IP_address:port/file:///file.ts?loop
Para aclarar esta ambigüedad, el reproductor del lado del cliente buscará parámetros después del último "?", aunque ignorará los parámetros que no reconozca. Para garantizar que todos los parámetros se envíen al lado del servidor, añada un "?" final adicional a la URL:
rtsp://IP_address:port/file:///file.ts?loop?
Etapas de canalización de múltiples reproductores
Cuando un reproductor actúa como cliente de transmisión y otro reproductor actúa como Media Server, en ocasiones puede ser necesario que el cliente defina etapas de canalización en el Media Server. Por ejemplo, el cliente puede requerir que el Media Server codifique su HDMI Input antes de transmitirlo a través de HTTP (porque un servidor no puede transmitir fotogramas de video HDMI sin procesar a través de la red). En estos casos, puede usar paréntesis en la solicitud del cliente para delimitar etapas de canalización en el servidor:
(http://IP_address:port/hdmi:,encoder:),file:///hdmi.ts
En el ejemplo anterior, el código del lado del cliente indica al Media Server que codifique la entrada HDMI y la transmita al cliente, que luego la guarda como un archivo.
Canalizaciones remotas
Es posible que un reproductor cliente especifique etapas de canalización únicamente en el Media Server. Por ejemplo, el cliente puede hacer que el Media Server inicialice un flujo multicast, sin conectarse realmente al flujo. El siguiente código ordenará al Media Server inicializar un flujo multicast utilizando un archivo en su almacenamiento local:
(remote://IP_address:port/filesimple:///file.ts,rtpsimple://239.192.0.0:5004/)
El protocolo remoto: y los paréntesis que lo abarcan indican al servidor que esta es una canalización completamente autónoma para ejecutar. No se transmite ningún medio al cliente, pero cualquier señal (incluidos mensajes de fin de flujo y error) se reenvía a través del socket al cliente, que puede usar el objeto roMessagePort para recibir dichos mensajes.
Restablecer la instancia roMediaStreamer en el lado del cliente forzará el cierre de la conexión del socket y, por lo tanto, también terminará la canalización en el servidor.