I ran into a problem with the echo show playing rtsp video stream.
My skill-id is amzn1.ask.skill.99d96a67-6368-4bcb-b596-f3f1c54d71a2.
I used echo show to test whether my skill can play video stream. Since aws requires video stream to be transmitted on port 443 and TLS encryption, I used stunnel.
When I received the lambda command from alexa, I use ffmpeg to simulate streaming to the stunnel rtsp server, source file format is an MP4 file (h264, aac, 640 * 360).
Echo show can't play, and I can play it using ffplay or vlc.
I found out that ssl handshake was successful from stunnel.log (see attachment file), but then the connection was reset by echo show.
My test account and other information :
1. Account linking credentials (please contact me for test account and password)
2. I don't know the version of the Echo Show, but konw the Serial Number (G000 MW06 7247 0EJ3). The OS version is Fire OS 5.5.3.3 (645583020)
3. I have ever doubt if there is something wrong with our SSL certificate. Thus I have checked our domain certificate information on the website (https://www.sslshopper.com/ssl-checker.html), showing that it is no problem.
Our certificate is issued by DST Root CA X3 which is in the list of supported CA certificates provided by aws. (https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport).
4. my streaming server is deployed on aws ec2 , its ip is 3.218.14.127, and the domain name is alexamedia.nooie.com.
5. my camera's name is office camera.
6. dialogue is as follows:
I: alexa, show me the office camera.
alexa: em, the camera is not responding.
Below are my test flow and some screenshots of the echo show we usage process.
About lambda:
1. AcceptGrant response
{
"event": {
"header": {
"namespace": "Alexa.Authorization",
"name": "AcceptGrant.Response",
"payloadVersion": "3",
"messageId": "e3321967-1158-4482-b7a3-df4fdadc026b"
},
"payload": {}
}
}
2. Discover response
{
"event": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover.Response",
"payloadVersion": "3",
"messageId": "e1a642bc-ae75-4de9-832e-2dd5c5026703"
},
"payload": {
"endpoints": [
{
"endpointId": "6d6578d8a3440632a8e0ed6d434946ab",
"manufacturerName": "Nooie",
"description": "IPC007-1080P",
"friendlyName": "office camera",
"displayCategories": [
"CAMERA"
],
"capabilities": [
{
"type": "AlexaInterface",
"interface": "Alexa.EndpointHealth",
"version": "3",
"properties": {
"supported": [
{
"name": "connectivity"
}
],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
},
{
"type": "AlexaInterface",
"interface": "Alexa.CameraStreamController",
"version": "3",
"cameraStreamConfigurations": [
{
"protocols": [
"RTSP"
],
"resolutions": [
{
"width": 640,
"height": 360
}
],
"authorizationTypes": [
"BASIC"
],
"videoCodecs": [
"H264"
],
"audioCodecs": [
"AAC"
]
}
]
}
]
}
]
}
}
}
3. InitializeCameraStreams request (This request is used to inform the rtsp stream server to push stream)
{
"directive": {
"header": {
"namespace": "Alexa.CameraStreamController",
"name": "InitializeCameraStreams",
"payloadVersion": "3",
"messageId": "643f0255-7612-45d0-b492-b8b543de6ac8",
"correlationToken": "AAAAAAAAAACD5AMtsU8hiA69Zs/p9CLMDAIAAAAAAAAZ2VLrpz5G/hjywM1DDqH7NNAkSS6xQNzEwdN8OAZC5FuXHVTlmVk/vMFWBFdK9868N40AoXgqO0qJZFXicIJ07V6dqo9xh10GsVs3uFDvZD6q2H8BHspsIo74CGrIgBr1KnisFlmnKO3KWZVBf+9kZ0AC5sFQTdo0rAbfUW5Uz/JVQArKdW2Q74/Y39UaODix4DzSjoVKXKZzhIYoR+V0dYBAB8CImi4a+uHe1AWrV0qqNGfeXES9kax8sRw4n1OjqWY+4eAXgtrKsEBMQRiyfUO3Hi2k8o1/Inr2lWBQDr5be3qkVoZ0ucvebGU2e3HG9/HvQ3NrWrJRPQlqYPJBiNGJUu8L++auUaSxGwoD64XnA13jZBIwZChXeMKBOiekHmpLPc9WxogKnCymEqvNFIRHPDQSgqhmFNexLLHtDhkM03PUrwumqwr6j+auJg2RhJgHgO+L48n4u6AtjpXMBDli489XfIT/2cdsuEy4PUgDJueI2/niYvtTA4sbBygXKEc9W+oQ6Y+jzWJIuQFVeWGH3YsLr9Sc/Ndoqe2avoaSyuMhwPrcvRr9BeNpWcnyH736KKrHx47/b8gfXHkKAxcPHuA/nejgvGnYmyhdkC+PBrkG5PW5BZg3l8OjkTUZV8l16U80uFODDsIfu0EJSF/ZBomzbtC+XkaOqAN9u6HS4aIxC/PtBr4F9A=="
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "95eafbc8cd08b5a34d9d6bd6f2f2ef4302da2f66"
},
"endpointId": "6d6578d8a3440632a8e0ed6d434946ab",
"cookie": {}
},
"payload": {
"cameraStreams": [
{
"protocol": "RTSP",
"resolution": {
"width": 640,
"height": 360
},
"authorizationType": "BASIC",
"videoCodec": "H264",
"audioCodec": "AAC"
}
]
}
}
}
4. InitializeCameraStreams response (This response is used to tell the echo show some information about the rtsp video stream)
About rtsp server of stunnel (used for TLS encryption ):
1. stunnel.log (ssl handshake)