Cuaderno de GNUtas

Reproducir contenido dlna en Emacs mediante un enlace personalizado de Org Mode

Llevo desde hace tiempo intentando hacer de Emacs una suerte de «centro multimedia» en texto plano. O, para ir afinando más: almacenar en documentos de Org Mode enlaces a contenido de vídeo y audio tanto locales como en la red. Pero lo que me faltaba es poder definir un tipo de enlace que fuese capaz de entender al servidor dlna que tengo corriendo en mi raspberry mediante minidlna. Finalmente, y gracias al excelente script Simple dlna browser de Javier López he conseguido algo que funcione de manera bastante decente, así que paso sin más preámbulos a comentar la faena.

Lo primero que necesitamos, por supuesto, es descargar el script desde la página de GitHub del autor y guardarlo en una ruta accesible, tras haberle dado los habituales permisos de ejecución. A fin de que el script encuentre y reconozca el servidor dlna activo y realice las transacciones pertinentes, tendremos que instalar también el programa socat (yo lo instalé en Arch con un simple sudo pacman -S socat).

Y, nada, aquí va la primera versión de mi enlace personalizado, que llama externamente al reproductor vlc mediante xargs para reproducir el contenido multimedia:

(org-link-set-parameters
 "dlna-cutre"
 :follow (lambda (ruta)
           (let
               ((comando (concat "~/Scripts/./simple-dlna-browser.sh " "\""  ruta "\""  " | xargs vlc")))
             (start-process-shell-command comando nil comando)))
 :face '(:foreground "green4" :weight bold :underline t))

Si en cualquier documento de Org escribimos un enlace con la etiqueta dlna-cutre: seguida del (simplemente) nombre del archivo multimedia alojado en el servidor (no hace falta la extensión: *.mkv, *.avi, etc.), y lo activamos mediante la típica orden de Org org-open-at-point, lo esperable es que se nos abra el reproductor vlc (es el que usamos en este ejemplo) con el contenido a reproducir.

enlaces-dlna.png

Figura 1: Probando unos cuantos enlaces a vídeos de mi servidor dlna

Por supuesto, podemos hacer las cosas aún más emacscéntricas y que el archivo se reproduzca mediante emms (Emacs Multimedia System). En esta segunda versión de nuestro enlace personalizado ya no es necesario llamar a vlc mediante xargs con una tubería de bash.

(org-link-set-parameters
 "dlna-cutre-emms"
 :follow (lambda (ruta)
           (let
               ((comando (concat "~/Scripts/./simple-dlna-browser.sh " "\""  ruta "\"")))
             ;; hay que asegurarse de eliminar el búfer con la
             ;; información de salida del comando
             (when (get-buffer "*dlna*")
               (kill-buffer "*dlna*"))
             (call-process-shell-command comando nil "*dlna*" t)
             (emms-play-url (save-window-excursion
                              (switch-to-buffer "*dlna*")
                              (goto-char (point-min))
                              (re-search-forward "\\(http:.+\\)")
                              (match-string 1)))))
 :face '(:foreground "green4" :weight bold :underline t))

Aquí, un breve vídeo de prueba.

Reproducir contenido dlna en Emacs mediante un enlace personalizado de Org Mode (test) from Juan Manuel Macías Chaín on Vimeo.

Publicado: 24/11/20

Última actualización: 07/08/22


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs