RTSP over SSL (RTSPS) - ssl

We have a video streaming (video on demand) server implemented using wowza streaming engine. Clients (android application, web browser) access the stream using RTMP (web browser) and RTSP (android application). As we have requirement that the streaming should be over SSL, as web browser's player (jw player) supports RTMPS, I have configured wowza to support RTMPS and tested the functionality. But we also need to support RTSP over SSL (RTSPS). I have read that wowza doesn't support RTSPS (ref: https://www.wowza.com/forums/showthread.php?34002-RTP-RTSP-over-SSL). Then we need to terminate the SSL on ELB itself(our video streaming server is behind an ELB).
We are using ffmpeg player in android player. Under this link there is nothing mentioned regarding RTSPS or RTSP over SSL. Just I am wondering whether such a protocol exists ?. If so, is there any android player or any other player I can use for testing RTSPS ?

Please go through the below link to configure your server to accept secured connection
[https://www.wowza.com/docs/how-to-get-ssl-certificates-from-the-streamlock-service#rtmpsPlayback][1]
Cross compile your ffmpeg to support openssl library.
Push your video stream to wowza using "rtsps"
eg:
ffmpeg -re -i -acodec copy -vcodec copy -f rtsp
rtsps://username:password#:443/live/myStream

I was recommend place a LB infront of my Wowza for SSL offloading so you can load the m3u8 over SSL. I was also told you can do that quite easily using HA Proxy for example. It is explained how to accomplish this here for RTMP but the same can obviously done with HTTP:
https://github.com/arut/nginx-rtmp-module/issues/457#issuecomment-250783255
Note, I have not tried this yet and I am unclear on exactly the proper use scenario. Hope this is helpful.

You can add a hostport to enable Streaming RTP/RTSP over SSL
<HostPort>
<Name>Default Secure Streaming</Name>
<Type>Streaming</Type>
<ProcessorCount>${com.wowza.wms.TuningAuto}</ProcessorCount>
<IpAddress>*</IpAddress>
<Port>1937</Port>
<HTTPIdent2Response></HTTPIdent2Response>
<SSLConfig>
<KeyStorePath>${com.wowza.wms.context.VHostConfigHome}/conf/keystore.jks</KeyStorePath>
<KeyStorePassword>somePassword</KeyStorePassword>
</SSLConfig>
...
</HostPort>

You can playback over RTSPS with Wowza Streaming Engine.
With your SSL certificate in place, try this to test playback using the sample file provided in [install-dir]/content/sample.mp4 and the provided vod application.
ffplay rtsps://[your-wowza/cert-domain]:443/vod/mp4:sample.mp4

Related

Apache + Nginx Server With RTMP Live Streaming

I am using CWP Pro (Control Web Panel)
I have selected webserver = Apache + Nginx
I want to install RTMP and want to live stream on my website with obs studio.
My queries are =
Do I need to install NGINX even if I am using Apache+Nginx server ?
Maximum tutorials / search results are showing NGINX + RTMP installation guide. Do I need to install NGINX too ? Or only RTMP module ?
After installing RTMP, I have created url for streaming (e.g. rtmp://my_ip_address/live/stream_key), and added it in OBS studio. Started OBS streaming. But I am stuck at Code To Embed this live streaming in my html page of my website. How Can I EMbed it with video player lie video.js or other suggestions ?
Please consider about this solution in two parts:
CWP, the admin control dashboard, to manage your system and live streams.
Media System, the live streaming system, to publish by OBS, to play the live stream by some proper protocols.
Generally, there are some HTTP Callback and HTTP-API between the two system, so it's better to deploy and build them separately.
For Media System, the generally workflow is:
Generate the live stream URL by your CWP system, like the RTMP url you mentioned.
Use encoder, OBS as such, to publish the RTMP stream. RTMP is the widely used protocol by encoder, SRT is an optional, WebRTC is also able to publish live stream now, see this post.
Depends on your scenarios, H5 or Mobile, use some players to play the live stream. Well, it's complex, but RTMP definitely doesn't work, please use HLS/HTTP-FLV/DASH/WebRTC, see this post.
There are some commercial solutions too, which does the same things.

Stream live video from Raspberry Pi Camera to Android App

I have multiple Raspberry Pi Devices with the native camera in my home and office (PUBLISHERS). - Publisher(Pi) they are on a local network behind a firewall/router and connected to the internet.
I have an EC2 webserver (BROKER). It is publicly accessible over a public IP Address.
I have an Android App on my phone. It has internet connectivity through a 4G Network. (SUBSCRIBER/CONSUMER/CLIENT)
I am trying to view the live feed of each of the raspberry cameras on my Android app. The problem is more conceptual than technical. I am unable to decide what should be the right approach and most efficient way to achieve this in terms of costs and latency.
Approaches, I have figured out based on my research on this:-
Approach 1:
1. Stream the camera in RTSP / RTMP in the pi device via raspvid/ffmpeg
2. Have a code in the pi device that reads the RTSP stream saves it to AWS S3
3. Have a middleware that transcodes the RTSP stream and saves it in a format accessible to mobile app via S3 url
Approach 2:
1. Stream the camera in RTSP / RTMP in the pi device via raspvid/ffmpeg
2. Have a code in the pi device that reads the RTSP stream pushes it to a remote frame gathering (ImageZMQ) server. EC2 can be used here.
3. Have a middleware that transcodes the frames to an RTSP stream and saves it in a format on S3 that is accessible to the mobile app via pubicly accessible S3 URL
Approach 3:
1. Stream the camera in WebRTC format by launching a web browser.
2. Send the stream to a media server like Kurento. EC2 can be used here.
3. Generate a unique webrtc pubicly accessible url to each stream
4. Access the webrtc video via mobile app
Approach 4:
1. Stream the camera in RTSP / RTMP in the pi device via raspvid/ffmpeg
2. Grab the stream via Amazon Kinesis client installed on the devices.
3. Publish the Kinesis stream to AWS Cloud
4. Have a Lambda store to transcode it and store it in S3
5. Have the mobile app access the video stream via publicly accessible S3 url
Approach 5: - (Fairly complex involving STUN/TURN Servers to bypass NAT)
1. Stream the camera in RTSP / RTMP in the pi device via raspvid/ffmpeg
2. Grab the stream and send it a to mediaserver like gstreamer. EC2 can be used here.
3. Use a live555 proxy or ngnix RTMP module. EC2 can be used here.
4. Generate a unique publicly accessible link for each device but running on the same port
5. Have the mobile app access the video stream via the device link
I am open to any video format as long as I am not using any third-party commercial solution like wowza, antmedia, dataplicity, aws kinesis. The most important constraint I have is all my devices are headless and I can only access them via ssh. As such I excluded any such option that involves manual setup or interacting with desktop interface of the PUBLISHERS(Pis). I can create scripts to automate all of this.
End goal is I wish to have public urls for each of Raspberry PI cams but all running on the same socket/port number like this:-
rtsp://cam1-frontdesk.mycompany.com:554/
rtsp://cam2-backoffice.mycompany.com:554/
rtsp://cam3-home.mycompany.com:554/
rtsp://cam4-club.mycompany.com:554/
Basically, with raspvid/ffmpeg you have a simple IP camera. So any architecture applicable in this case would work for you. As example, take a look at this architecture where you install Nimble Streamer on your AWS machine, then process that stream there and get URL for playback (HLS or any other suitable protocol). That URL can be played in any hardware/software player upon your choice and be inserted into any web player as well.
So it's your Approach 3 which HLS instead of WerRTC.
Which solution is appropriate depends mostly on whether you're viewing the video in a native application (e.g. VLC) and what you mean by "live" -- typically, "live streaming" uses HLS, which typically adds at least 5 and often closer to 30 seconds of latency as it downloads and plays sequences of short video files.
If you can tolerate the latency, HLS is the simplest solution.
If you want something real-time (< 0.300 seconds of latency) and are viewing the video via a native app, RTSP is the simplest solution.
If you would like something real-time and would like to view it in the web browser, Broadway.js, Media Source Extensions (MSE), and WebRTC are the three available solutions. Broadway.js is limited to H.264 Baseline, and only performs decently with GPU-accelerated canvas support -- not supported on all browsers. MSE is likewise not supported on all browsers. WebRTC has the best support, but is also the most complex of the three.
For real-time video from a Raspberry Pi that works in any browser, take a look at Alohacam.io (full disclosure: I am the author).

Is it possible to deliver RTSP stream via Kurento. WebRTC to RTSP

I want to use Kurento as media server which takes WebRTC as an input and provides RTSP stream as url: rtsp://kurento/streamName
Is this possible?
I saw https://github.com/lulop-k/kurento-rtsp2webrtc/ project which does opposite thing.
My final goal is to deliver a stream to mobile browsers via JSMPEG.
This is not possible, as Kurento team says: "We can consume it, but not produce it."
Now, as a common solution for this, you could stream from Kurento to Wowza media server using an RTP endpoint, and then re-stream RTSP from Wowza. In KMS google group there is a lot of content related to the integration between the two of them.

Restreaming an rtsp stream through ffmpeg on iOS

I have an iOS application that displays an rtsp stream from an IP camera on the local network, I would like to restream it to an external server in real time (Wowza to be specific) the server will take care of converting rtsp to HLS so that the users can view the live broadcast on their devices.
On a computer it would be pretty straight forward:
ffmpeg [input-options] -i [input-file] [output-options] [output-stream-URI]
But I need to do it programmatically on iOS, and I'm not really sure if it's even possible. Anyone?
If you already have a server (where Wowza is installed) a good idea would be to run FFMPEG there. You can trigger that from mobile (with a script requests that executes ffmpeg command).

RTSP streaming iOS 6 using WoWza Server

Does any one knows about RTSP streaming using WOWza Server ?
I want to play it on a MPMoviePlayer controller in iOS6 but it shows not enough buffer to keep it up. My webservice urls work fine because I have also checked them using a browser but I can't find anything about RTSP streaming.
Does any one have any tutorials about RTSP streaming on iPhone using WOWza Server ?
rtsp streaming is not possible on iPhone, iPad and iPod touch. Please refer to the following link.
http://www.wowza.com/forums/content.php?62
MPMoviePlayer only supports HTTP live streaming. to have RTSP working on iPhone, you must implement your client on the iOS.
There is library live555 which implements for you, but you must integrate it with the code. Also decoding of the stream must be implemented in software, by you or a 3rd party library.
Wowza support re-restreaming the content as HLS, if this is your wowza server than there are easy instructions on the www.wowza.com site, if its not perhaps they are streaming HLS.
If you have to use rtsp, there are several good players available on the app store, or you can build your own using lib 555 as mentioned or one of our open or closed sourced frameworks.
https://github.com/mooncatventures-group/AVDemoPlay2L