I have a MediaLive channel with attached input and OBS streaming into it. An output in several different resolutions saves into a bucket on AWS MediaStore. Everything goes well until eventually, my client loses a connection for a few minutes. During this downtime, MediaLive records a video with a black screen.
1) Can I prevent MediaLive from streaming the "black" video, stop output and wait for the streamer to connect again?
2) Can I replace a black screen with some image as a placeholder to notify users what's happening?
3) Can I trigger somehow when the streamer connects or disconnects from the input?
In the channel settings, there is an option which I suspect to be the answer - Blackout Slate. That's how it looks in the web interface:
The info block states the following:
Setting to enabled causes the encoder to blackout the video, audio, and captions, and raise the "Network Blackout Image" slate when an SCTE104/35 Network End Segmentation Descriptor is encountered. The blackout will be lifted when the Network Start Segmentation Descriptor is encountered. The Network End and Network Start descriptors must contain a network ID that matches the value entered in "Network ID".
But after setting images here everything stays the same - only the black screen with no sign of those placeholders.
On your Output Group settings is a field called Input Loss Action. If you change that from EMIT_OUTPUT to PAUSE_OUTPUT you should get the desired result.
Alternately, you can enable an Input Loss Behavior in the channel's general settings (Global Configuration section) that will allow you to specify either a solid color screen or an input loss image slate, as well as the timing for how long to wait before displaying the slate image.
Regards,
Related
We are trying to receive customer calls through Amazon Connect and leave messages in Amazon Kinesis.
When we call Amazon Connect from our cell phones, the voice plays the expected message and the Beep tone sounds as expected. But then the call ends and we cannot leave a message. We tried removing Wait and Stop media streaming but the problem persisted. What are we doing wrong?
Set Voice: OK
Play prompt(Message): OK
Play prompt(Beep): OK
Start media streaming: NG
If you have a simple, easy to understand sample for this application, let me know!
Looks like the problem is your Wait block. Wait isn't supported for voice calls, so immediately errors.
Replace the Wait block with a Get Customer Input block. Use Text to speech for the prompt, Set the prompt value manually to <speak></speak> and set Interpret as to SSML. Set it to detect DTMF and set the timeout to however long the message is allowed to be. From your flow above that is 10 seconds.
This should get the customers voice sent to the Kinesis stream and you can process the stream from there.
There is a really thorough implementation guide for voice mail here. I've used this then altered it to suite my exact needs in the past.
I cannot find any information how to handle the situation like this:
Stream starts: about 3 o'clock.
1.Before the person who is streaming (let's call him a streamer) start to stream I would like to have static image saying something like: 'The event will start soon'.
2.Streamer start pushing his stream to RTMP endpoint but he's late and starts at 3.02. Up until 3.02 the same picture should be visible (as in point 1).
3.Streamer should finish at 4 o'clock but he finishes 5 minutes before 4 (pushing stop at his device).
4.Now, ending screen should be visible from 5 minutes to four and later.
I know that inputs should be switched in order to change a view and this can be scheduled for fixed time, but I would like this to be switched dynamically, ie. when streamer starts pushing to RTMP URL and stops pushing to RTMP URL (from eg. Larix software). How to handle that in AWS Media Live?
Thank you for asking this question on stackoverflow, the easiest way to achieve what you are looking to do is by using an Input Prepare Scheduled Action. The channel will then monitor the input and raise an alarm if the RTMP source is not there. When the RTMP source begins then the alarm will remit, you can send the alarms to a lambda that will look for these alarms and can do the switch from slate MP4 to the RTMP source when it sees the RTMP input missing alarm was cleared. This can also be done for when RTMP input goes away.
Information on Prepare Inputs:
https://docs.aws.amazon.com/medialive/latest/ug/feature-prepare-input.html
Global configuration - Input loss behavior:
https://docs.aws.amazon.com/medialive/latest/ug/creating-a-channel-step3.html
Zach
Has anyone managed to stream from Atem Mini Pro to AWS MediaLive?
This works fine from OBS, but will not work from the Atem with a customised streaming.xml file.
I have previously customised streaming.xml to work Atem > Wowza. So I know it should work. But the red ON AIR message just flashes and it will not connect.
I have tried changing the MediaLive input codec to AVC/MPEG2, but no joy. Can anyone please help?
Thank you!
A. Create a MediaLive RTMP Push input.
Set the Input Security Group
Set the Application Name and the Application Instance. The Application Instance is also called the Stream Key or Streaming Key
Press the Create button
The console will now display the endpoint(s) created for the input.
As an example set the Application Name to 'live' and the Application Instance to 'AtemPro_1'
You would see the RTMP input endpoint then defined as 'rtmp://<IP_Addr>:1935/live/AtemPro_1'
The stream URL used in the streaming.xml file will be the portion 'rtmp://<IP_Addr>:1935/live/', i.e. rtmp://Addr:Port/ApplicationName/
B. Edit the Atem Streaming.xml file.
Locate the Streaming.XML file
Mac location: /Library/Application Support/Blackmagic Design/Switchers/Streaming.XML
Windows location: C:\Program Files (x86)\Blackmagic Design\Blackmagic ATEM Switchers\ATEM Software Control\Streaming.XML
Make a copy of the Streaming.XML file, to ensure you have a backup to fall back on if you make a mistake.
Open the file in a text editor and edit the parameters - see below for an example
Save the document, and back it up — every time you update your ATEM software, this file will be overwritten
Quit and relaunch the ATEM Software - this reloads the Streaming.xml file in to the switcher.
Select the service that you just created, select the server that was created, select the appropriate quality, enter the streaming key, then start the MediaLive channel and then the stream.
Example Streaming.XML file:
<streaming>
<service>
<name>AWS MediaLive</name>
<servers>
<server>
<name>Primary</name>
<url>rtmp://<IP_Addr>:1935/live</url>
</server>
</servers>
<profiles>
<profile>
<name>Streaming 1080p30 6M Audio 128k</name>
<config resolution="1080p" fps="30">
<bitrate>6000000</bitrate>
<audio-bitrate>128000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
<profile>
<name>Streaming 720p60 6M Audio 128k</name>
<config resolution="720p" fps="60">
<bitrate>6000000</bitrate>
<audio-bitrate>128000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
</profiles>
</service>
</streaming>
You can define any number of profiles from which you can then select one for the specific event.
C. Configure the event.
Once the file has been edited and saved, simply restart the ATEM Software Control application, and select the Output Tab, then select the Platform, which in the example above is called "AWS MediaLive". Select the Server (Called Primary in the example), set the Stream Key to the Application Instance you defined when creating the MediaLive Input, and finally select the profile to be used.
To start streaming to MediaLive, either:
press the ON AIR button (top right) on the ATEM Mini Pro
click the ON AIR button on the software
If everything is correct, then the ON AIR button on the ATEM Mini Pro will go RED, and the software will show ON AIR, with the time code incrementing.
If any of the parameters are incorrect, say the key is invalid, then the ON AIR will flash, and the timecode will not increment.
Note that the MediaLive channel must be in the Running state before the RTMP session handshake can complete between the Atem and the MediaLive channel. Therefore, start the MediaLive channel, and once shown to be in the running state only then start streaming on the Atem.
Silverink
We've successfully tested Atem Mini Pro - RTMP - MediaLive. Looking at your update, the issue may be one of two things:
Did you copy the Application Instance as defined in the MediaLive Input to the Key field (between the Server and Quality fields) in the Atem streaming SW? Note this field is case sensitive and must match exactly the field as entered in the MediaLive Input.
Did you define an Input Security Group in the MediaLive console that allows for traffic from the WAN IP address of your Atem Mini Pro. You want to test with an ISG set to 0.0.0.0/0, just to see if this is the issue, and then when that works tighten it down to a specific address/address range to make the workflow more secure. It is not recommended to run a production workflow with such an open ISG...
If both of these are correct then we will need more detailed info from you to allow us to troubleshoot your MediaLive channel to see what issues it reports. This is not info we can request in an open forum such as this. I would suggest then to either open a ticker from the Support Center that is available in the top-right corner of the MediaLive console. Or you can post a question in the AWS Elemental MediaLive forum (https://forums.aws.amazon.com/forum.jspa?forumID=269), and someone from support will reach out to ask for the specific information needed.
I'm currently developing a custom skill for the echo spot. I'm using AWS Lamda functions in .net core, using the Alexa.NET SDK. One of the intents lets Alexa play a video, which are hosted on a S3 bucket, but sometimes (randomly - once after opening the skill, once after the 4th or 5th video), Alexa immediately understands the command, but takes ages to play the video. According to the cloudwatch logs, the command is parsed and the lambda function executed within a couple of milliseconds, but the video starts playing very delayed (up to two minutes).
REPORT RequestId: xyz Duration: 366.44 ms Billed Duration: 400 ms Memory Size: 576 MB Max Memory Used: 79 MB
The videos being returned by the lambda function are rather short (5-15 seconds) if that could affect the issue. The wifi itself is stable with more than 30mbit available, alexa is not too far away from the wifi router.
We've tried different video encodings (MP4, H264, ...), different audio codecs, samplerates and framerates - the issue remains. Any clues what could cause this issue? We've read the recommendations for videos and applied all the recommended settings to the video.
Can i somehow access the device's logs to see if there's another issue with the video?
Turns out, videos are being streamed when combined with a plain text output speech. If your output speech is empty, the echo spot will download the whole video and start playing once the video is completely loaded. Hence, i recommend adding a speech reply to all of your videos to ensure a smooth loading of the video.
I am working on AWS's Amazon Connect. I am creating a contact flow in which I need to store call recordings. So I am using Enable Call Recording component of Contact Flow and its working fine.
Now, suppose contact flow is taking some sensitive information such as Credit card details, in this case I need to stop call recording and then again start it once user done with sensitive information. How can I do this?
Thanks,
Gans
You can disable recording in the contact flow by using the set recording behavior block, the same way you initially enabled it. This can be enabled or disabled as many times as needed during the contact flow itself, prior to routing the call to an agent. If you need to disable the recording after the call has already been routed at an agent, you would use a quick connect to send the caller back to a contact flow that set the recording behavior to disabled and use LEX or DTMF to capture the sensitive information before setting the recording back to an enabled state and reconnecting the caller to the agent (agent is placed on hold by using the quick connect in this situation).
The problem with the above approach is that it won't work well if you want the same agent to handle the call. The transfer to Quick Connect will put the call on hold on the original leg while reattempting to connect back to the same agent and unless the agent quickly clicks on the "swap" button on CCP the call will be dropped.
You could transfer back to another queue with recording off and the same agent pool, but this would mean the customer may have to wait again for the call to be connected.
A better solution would be an Interactive prompt with an option to disable recording and the start of the contact flow. The timeout could be set to continue with recording enabled so if nothing is pressed the call continues with recording on.
Routing to the last agent is still possible with temp table data store in DynamoDB. The agent have to be blocked to get calls routed from the queue until the contact re-arrives or the call will be placed in the personal (invisible) queue of the agent.
Use APIs that enable you to start, stop, pause, and resume call recording.
The call recording APIs are available in all AWS regions where Amazon Connect is offered. There is no charge to use these APIs. https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-connect-adds-call-recording-apis/