Página 1 de 1
SDK C++ amazon kinesis (transmisión en directo)
Publicado: 03 Mar 2020, 03:17
por japifer
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
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 03 Mar 2020, 13:26
por egrueda
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?
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 04 Mar 2020, 16:00
por japifer
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
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 04 Mar 2020, 16:16
por egrueda
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:
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?
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 05 Mar 2020, 02:18
por japifer
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.
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 05 Mar 2020, 03:08
por japifer
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'
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 05 Mar 2020, 07:59
por egrueda
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 ;-)
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 05 Mar 2020, 13:08
por japifer
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...
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 05 Mar 2020, 13:53
por egrueda
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:
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/
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 07 Mar 2020, 19:08
por japifer
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')
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 07 Mar 2020, 19:12
por egrueda
Un poco drástico, ¿no? Jajajaja
Re: SDK C++ amazon kinesis (transmisión en directo)
Publicado: 07 Mar 2020, 22:28
por japifer
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