japifer
Posts: 10
Joined: Sun Apr 27, 2014 4:46 am

Transmisión de vídeo en directo con Kinesis de AMAZON

Tue Mar 03, 2020 2:09 am

Hola a todos, mi nombre es Javier.
Escribo en esta oportunidad por que estoy liado con un programa y quería ver si me pueden ayudar.
estoy trabajando con streaming en directo con amazon y su SDK kinesis. pues descargué y creé el SDK C++ Producer de Transmisión de vídeo de Kinesis de lo mas bien y puede ver la secuencia en directo sin mayor dificultad ejecutando estas tres acciones en el terminal:

export AWS_ACCESS_KEY_ID=<Access Key ID>
export AWS_SECRET_ACCESS_KEY=<Secret Access Key>
./kinesis_video_gstreamer_sample_app -w 640 -h 480 -f25 -b 6000000 kinesis-video-raspberry-pi-producer

pero ahora requiero de automatizar esto y hacer que se ejecute solo. por esto mismo cree un .py para ejecutar estos comando pero estoy teniendo el siguiente error:

log4cplus:ERROR Unable to open file: ./log/kvs.log

las pruebas las he realizado tanto con os.system........ y subprocess runapp...... y en ambos me aroja el mismo error, al programa le he dado todo los tipos de permisos y nada, lo ejecuto con sudo y el mismo error, como root y mismo error. ya no se me ocurre que hacer......... por eso pido ayuda. Reitero que si ejecuto los comando directo en la terminal la transmisión funsiona sin problema y puedo tener el video en directo.

de antemanos gracias!!
Saludos
Javier

User avatar
lmarmisa
Posts: 1264
Joined: Thu Feb 14, 2013 2:22 am
Location: Jávea, Spain

Re: Transmisión de vídeo en directo con Kinesis de AMAZON

Wed Mar 04, 2020 3:45 pm

pero ahora requiero de automatizar esto y hacer que se ejecute solo.
¿A qué te refieres con automatizar?. ¿A encapsular los 3 comandos en un script que pueda ser invocado desde un terminal?.

Si fuera así, simplemente crea un bash script. Supongo que usas Raspbian. Te aconsejo que uses una carpeta $HOME/bin para guardar allí tus ejecutables y scripts. Raspbian añadirá al PATH del sistema ese subdirectorio $HOME/bin y podrás invocar los comandos desde cualquier carpeta de tu cuenta (normalmente estarás esando el usuario pi, pero podría ser cualquier otro).

Code: Select all

cd $HOME                               # si quieres escribir menos, puedes teclear simplemente cd
mkdir bin
. .profile                               # los puntos y el espacio entre ellos son importantes
Con eso el directorio $HOME/bin estará creado y listo para usarse. Te recomiendo también copiar o mover a ese directorio bin el programa kinesis_video_gstreamer_sample_app.

Ahora crea el bash script en el directorio recién creado:

Code: Select all

nano bin/myscript

El contenido deberá ser algo así:

Code: Select all

#!/bin/bash
export AWS_ACCESS_KEY_ID=<Access Key ID>
export AWS_SECRET_ACCESS_KEY=<Secret Access Key>
kinesis_video_gstreamer_sample_app -w 640 -h 480 -f25 -b 6000000 kinesis-video-raspberry-pi-producer
Una vez salvado el fichero, deberás dar al script los permisos de ejecución con este comando:

Code: Select all

chmod +x bin/myscript
Finalmente puedes llamar a myscript desde cualquier directorio de tu cuenta:

Code: Select all

myscript

japifer
Posts: 10
Joined: Sun Apr 27, 2014 4:46 am

Re: Transmisión de vídeo en directo con Kinesis de AMAZON

Thu Mar 05, 2020 2:33 am

hola imarmisa. primero gracias por tan buena explicación.
Lo otro es que efectivamente requiero que el programa se ejecute al inicio de la raspberry por medio del crontab y eso requiero de sacar el error del log.

Saludos

User avatar
lmarmisa
Posts: 1264
Joined: Thu Feb 14, 2013 2:22 am
Location: Jávea, Spain

Re: Transmisión de vídeo en directo con Kinesis de AMAZON

Thu Mar 05, 2020 12:20 pm

Cuando cron arranca una nueva tarea, el proceso creado no dispone del mismo entorno de ejecución que un proceso interactivo que corre en un terminal, sino de un conjunto mínimo en donde las variables de entorno o no existen (p. e. $DISPLAY) o sus contenidos están restringidos (p. e. $PATH).

Eso supone una fuente de problemas y desafortunadamente la solución para disponer del mismo entorno que en modo interactivo no es trivial.

Si quieres mantener el arranque en crontab y el problema está limitado al PATH, puedes probar esta solución. Abre un terminal y copia el varlor de la variable $PATH en modo interactivo con este comando:

Code: Select all

echo $PATH
Ahora edita el bash script de llamada a tu programa de vídeo

Code: Select all

nano bin/myscript
y añade una línea para definir entre comillas el PATH con el contenido que copiaste con el comando echo $PATH:

Code: Select all

#!/bin/bash
export PATH="/home/pi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games"
export AWS_ACCESS_KEY_ID=<Access Key ID>
export AWS_SECRET_ACCESS_KEY=<Secret Access Key>
kinesis_video_gstreamer_sample_app -w 640 -h 480 -f25 -b 6000000 kinesis-video-raspberry-pi-producer
Por supuesto crontab deberá referenciar a /home/pi/bin/myscript a la hora de arrancar la tarea. Si sólo es problema de PATH, este procedimiento debería funcionar.

Si tienes el entorno gráfico de Raspbian activado, es posible usar un método de arranque automático diferente de cron y que no tiene problemas de entorno. En este caso no sería necesario añadir la línea del PATH al script de arranque.

Simplemente edita el fichero

Code: Select all

nano .config/lxsession/LXDE-pi/autostart
y añade al final una línea como ésta:

Code: Select all

...
@/home/pi/bin/myscript
En cualquiera de los dos métodos propuestos será necesario un reinicio de la RPi.

Suerte.

Return to “Español”