SDK C++ amazon kinesis (transmisión en directo)

Discusión general sobre Raspberry Pi
Responder
japifer
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 03 Mar 2020, 03:12
Agradecido: 0
Agradecimiento recibido: 0

Hola a todos, mi nombre es Javier.
estoy trabajando con la raspi 3 y rasbian.
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:

Código: Seleccionar todo

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:

Código: Seleccionar todo

[b]log4cplus:ERROR Unable to open file: ./log/kvs.log[/b]
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
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Ese error, ¿te sale cuando ejecutas el .py de forma manual? ¿cómo lo ejecutas exactamente?
¿Desde qué directorio lo ejecutas? ¿puedes hacer un "ls -l" de ese directorio?
japifer
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 03 Mar 2020, 03:12
Agradecido: 0
Agradecimiento recibido: 0

Hola Agrueda, efectivamente el .py lo he estado ejecutando de forma manual sudo python StationsControl.py le puse todo los permisos chmod 777. el directorio que se ejecuta el .py es el mismo que esta el programa kinesis_video_gstreamer_sample_app

el ls -l en la carpeta me arroja:
-rwxrwxrwx 1 root root 19010 mar 4 02:08 StationsControl.py
-rwxr-xr-x 1 root root 115864 ene 15 18:31 kinesis_video_gstreamer_sample_app

te comento igual que logre ejecutar el programa mediante un sub proceso y al log poniendole solo =INFO, pero aún asi tengo el problema de
log4cplus:ERROR Unable to open file: ./log/kvs.log
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Ok, prueba a crear manualmente el directorio "log" para que él pueda crear el archivo kvs.log dentro de ese directorio
O sea, en el directorio donde está el script:

Código: Seleccionar todo

sudo mkdir log
No estoy seguro de los permisos que debería tener ese directorio, aunque en teoría si ejecutas "sudo python StationsControl.py" se ejecutará como root y no tendrás problemas.

¿Lo pruebas y nos cuentas?
japifer
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 03 Mar 2020, 03:12
Agradecido: 0
Agradecimiento recibido: 0

Justamente estaba probando eso egrueda, y efectivamente ahí me funciona!! en hora buena !!.
pero ahora me salio otro problema. jajajaj
tire el scrip a un crontab para que lo ejecute en el inicio de la raspi con:

@reboot sleep 45; /usr/bin/python /home/pi/Downloads/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/StationsControl.py

pero me se me cae el scrip, ahora dentro de mi ignorancia yo creo que a lo mejor es donde el programa esta ejecutando un subproceso y la ejecución del crontab esta mal realizada.
es raro, por que lo lanzo desde la terminal y funciona de lo mas bien, pero lo tiro del crontab y no parte la cámara, pero si los demás procesos que tiene el programa.
japifer
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 03 Mar 2020, 03:12
Agradecido: 0
Agradecimiento recibido: 0

me respondo ya que encontré el error del crontab. Resulta que el el directorio del subproceso como estaba dentro de la misma carpeta del scrip, yo lo llamaba sin indicar el directorio. osea así:
dir_sub = './kinesis_video_gstreamer_sample_app -w 640 -h 480 -f25 -b 6000000 kinesis-video-raspberry-pi-producer'
y por eso el crontab no ejecutaba el subproceso. solo basto con añadir toda la ruta del subproceso y listo. osea

dir_Sub = '/home/pi/Downloads/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/./kinesis_video_gstreamer_sample_app -w 640 -h 480 -f25 -b 6000000 kinesis-video-raspberry-pi-producer'
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Me alegro de que lo tengas resuelto.
La segunda incidencia es como dices, si no tienes una sesión abierta, no existe lavariable PATH y por eso debes indicar las rutas absolutas y no relativas ;-)
japifer
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 03 Mar 2020, 03:12
Agradecido: 0
Agradecimiento recibido: 0

ahora solo me queda hacer una cosa... al lanzar el programa obtengo el pid de mi subproceso y revisar ese pid para ver si el subproceso esta vivo, en caso contrario lanzarlo nuevamente...
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Ahí es cuando tienes que hacer un script de arranque y parada "de verdad".
La respuesta es systemd. Si creas un script (unit) para el arranque y la parada podrás definir qué comandos se ejecutan, bajo qué usuario lo hacen y establecer el arranque automático (quitando lo del @reboot que es algo cutre)

Quizá quieras crear un script en bash que ejecute todos los comandos y parámetros en python, para simplificar
Systemd llamará a tu script en el arranque de la máquna
Y si al script de systemd le añades el "restart on failure", entonces podrá reiniciarlo en caso de que caiga:

Código: Seleccionar todo

restart=on-failure
Ahora bien, sería más importante arreglar el problema que pueda hacer que la aplicación deje de funcionar, claro.

Más info:
https://www.youtube.com/watch?v=WE_gz2BY4i0
https://serversforhackers.com/c/process ... th-systemd

Usando un PID:
https://singlebrook.com/2017/10/23/auto ... e-systemd/

Opción B: Monit
https://mmonit.com/monit/
japifer
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 03 Mar 2020, 03:12
Agradecido: 0
Agradecimiento recibido: 0

hola hola,

pues bueno dentro en la función de mi subproceso que lanza la transmisión puse

Código: Seleccionar todo

         RUN = subprocess.Popen(app,
                                 bufsize = 0,
                                 stdout = subprocess.PIPE,
                                 stderr = subprocess.PIPE,
                                 shell = sh)
      .........
        return RUN.pid
luego en mi main

Código: Seleccionar todo

.................
y del while 1:
...............
      try:
        Chech_RunCam = not os.waitpid(pidProsCam, os.WNOHANG)[0]
      except OSError:
          #Aquí capturo si la cámara se callo
          # en este caso reinicio la RPI
         os.system('sudo reboot')
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Un poco drástico, ¿no? Jajajaja
japifer
Pi Newbie
Pi Newbie
Mensajes: 7
Registrado: 03 Mar 2020, 03:12
Agradecido: 0
Agradecimiento recibido: 0

jajaja si, jajaj. en realidad, bueno esto lo hago hasta encontrar el por que se cae la cámara. en ocaciones el SDK no me detecta las credenciales y basta con volver a lanzarlas y listo, pero en otros caso me sale esto del log:

[2020-03-05 09:38:40]-INFO-Using region: us-west-2
[2020-03-05 09:38:40]-INFO-Using aws credentials for Kinesis Video Streams
[2020-03-05 09:38:40]-INFO-No session token was detected.
[2020-03-05 09:38:40]-INFO-createKinesisVideoClient(): Creating Kinesis Video Client
[2020-03-05 09:38:40]-INFO-heapInitialize(): Initializing native heap with limit size 134217728, spill ratio 0% and flags 0x00000001
[2020-03-05 09:38:40]-INFO-heapInitialize(): Creating AIV heap.
[2020-03-05 09:38:40]-INFO-heapInitialize(): Heap is initialized OK
[2020-03-05 09:38:40]-INFO-New credentials expiration is 1583414320
[2020-03-05 09:38:40]-INFO-createDeviceResultEvent(): Create device result event.
[2020-03-05 09:38:40]-INFO-Creating Kinesis Video Stream -w
[2020-03-05 09:38:40]-INFO-createKinesisVideoStream(): Creating Kinesis Video Stream.
[2020-03-05 09:38:42]-INFO-writeHeaderCallback(): RequestId: a379c71c-68a7-4f4e-bcec-b53d5faaa49f
[2020-03-05 09:38:42]-INFO-describeStreamResultEvent(): Describe stream result event.
[2020-03-05 09:38:43]-INFO-writeHeaderCallback(): RequestId: 4f300ab7-81b1-4d2c-94dd-81b666787bff
[2020-03-05 09:38:43]-INFO-getStreamingEndpointResultEvent(): Get streaming endpoint result event.
[2020-03-05 09:38:43]-INFO-New credentials expiration is 1583414323
[2020-03-05 09:38:43]-INFO-getStreamingTokenResultEvent(): Get streaming token result event.
[2020-03-05 09:38:44]-INFO-Streaming from live source
[2020-03-05 09:38:44]-INFO-kinesisVideoStreamFormatChanged(): Stream format changed.
[2020-03-05 09:38:44]-INFO-putStreamResultEvent(): Put stream result event.
[2020-03-05 09:38:46]-INFO-writeHeaderCallback(): RequestId: da8c7167-0ce5-ed8d-8c56-84717c393caa
[2020-03-05 10:06:25]-INFO-Using region: us-west-2
[2020-03-05 10:06:25]-INFO-Using aws credentials for Kinesis Video Streams
[2020-03-05 10:06:25]-INFO-No session token was detected.
[2020-03-05 10:06:25]-INFO-createKinesisVideoClient(): Creating Kinesis Video Client
[2020-03-05 10:06:25]-INFO-heapInitialize(): Initializing native heap with limit size 134217728, spill ratio 0% and flags 0x00000001
[2020-03-05 10:06:25]-INFO-heapInitialize(): Creating AIV heap.
[2020-03-05 10:06:25]-INFO-heapInitialize(): Heap is initialized OK
[2020-03-05 10:06:25]-INFO-New credentials expiration is 1583415985
[2020-03-05 10:06:25]-INFO-createDeviceResultEvent(): Create device result event.
[2020-03-05 10:06:25]-INFO-Creating Kinesis Video Stream -w
[2020-03-05 10:06:25]-INFO-createKinesisVideoStream(): Creating Kinesis Video Stream.
[2020-03-05 10:06:26]-INFO-writeHeaderCallback(): RequestId: 08e8f487-04b2-4d14-922d-8383881cd5f5
[2020-03-05 10:06:26]-INFO-describeStreamResultEvent(): Describe stream result event.
[2020-03-05 10:06:27]-INFO-writeHeaderCallback(): RequestId: b380c9af-6ae7-4cd6-a049-bace66dd6c33
[2020-03-05 10:06:27]-INFO-getStreamingEndpointResultEvent(): Get streaming endpoint result event.
[2020-03-05 10:06:27]-INFO-New credentials expiration is 1583415987
[2020-03-05 10:06:27]-INFO-getStreamingTokenResultEvent(): Get streaming token result event.
[2020-03-05 10:06:28]-INFO-Streaming from live source
Responder