After several requests from our customers we have enabled MPEG-DASH and HLS live streaming with bitcodin. Our live streaming seamlessly integrates with our VoD encoding concepts such as outputs and encoding profiles. This means that you can create live streams with arbitrary resolutions and bitrates for MPEG-DASH and HLS. You could then connect this livestream with an output, i.e. Google Cloud Storage (GCS) and all segments as well as the manifests will be written to that storage. Currently we only support GCS but future releases will add support for AWS S3, AzureBlob, FTP, SFTP, etc. (basically everything that is already available with our VoD encoders). You could use this output storage as origin for your CDN or for multiple CDNs. This works really well with GCS as Google offers a CDN Interconnect for several CDNs such as Fastly, Level3, HighWinds and CloudFlare.
Live streaming in the bitcodin portal
Our live streaming feature is available through our API but also through the web interface. Just select “Create new Live Stream” under Live to create a live stream for MPEG-DASH and HLS. You need to configure the live stream name, stream key, timeshift, encoding profile and output.
The configuration variables have the following meaning:
- Livestream-Name: Arbitrary name to identify your livestream
- Stream-Key: The stream key identifies your stream in the bitcodin encoding service
- Timeshift: Timeshift buffer in seconds that enables live DVR for your clients
- Encoding Profile: The encoding configuration for MPEG-DASH and HLS that contains the resolutions and bitrates of your encoded stream
- Output: An output location such as Google Cloud Storage to which all segments and the manifests are transfered
API based MPEG-DASH and HLS live streaming
Our live streaming could be fully controlled through our REST-API or through one of our API clients, for example Python. In the following we will describe a simple example with Python to setup your live stream using the Python API client:
- Follow the instructions on github to setup bitcodin-python.
- Make sure to set the correct API key:
bitcodin.api_key = 'INSERT YOUR API KEY'
- Create an Google Cloud Storage Output where the MPEG-DASH and HLS files will be transferred to
date = datetime.datetime.today() prefix = "%s%d%d%d%d%d%d" % ('livestream', date.year, date.month, date.day, date.hour, date.minute, date.second) output = bitcodin.GCSOutput( name='Livesteam Output', access_key='Your GCS access key', secret_key='Your GCS secret key', bucket='Your bucket name', prefix=prefix, make_public=True ) output = bitcodin.create_output(output)
- Create an Encoding Profile for MPEG-DASH and HLS Output
video_configs = list() # 3 MBIT, 1920x1080, FULL HD video_configs.append(bitcodin.VideoStreamConfig( default_stream_id=0, bitrate=3000000, profile='Main', preset='standard', height=1080, width=1920 )) # 1,5 MBIT, 1280x720, 720p video_configs.append(bitcodin.VideoStreamConfig( default_stream_id=0, bitrate=1500000, profile='Main', preset='standard', height=720, width=1280 )) # 1 MBIT, 640x480, 480p video_configs.append(bitcodin.VideoStreamConfig( default_stream_id=0, bitrate=1000000, profile='Main', preset='standard', height=480, width=640 )) # CONFIGURE AUDIO REPRESENTATION audio_configs = list() # 256 kbps audio_configs.append(bitcodin.AudioStreamConfig( default_stream_id=0, bitrate=256000 )) live_profile = bitcodin.EncodingProfile('Live Stream profile', video_configs, audio_configs) live_profile = bitcodin.create_encoding_profile(live_profile)
- Set your stream key and the timeshift buffer and start your live stream
stream_key = "stream" time_shift = 120 live_stream = bitcodin.LiveStream("test live stream", stream_key, live_profile.encoding_profile_id, time_shift, output.output_id) live_stream = bitcodin.create_live_instance(live_stream) print(vars(live_stream))
- Get the RTMP input url and the MPD/M3U8 manifest urls for playback
while live_stream.status != 'RUNNING': live_stream = bitcodin.get_live_instance(live_stream.id) print(vars(live_stream)) if live_stream.status == 'ERROR': print("Error occurred during live stream creation!") sys.exit(-1) time.sleep(2) print("Ready to stream. RTMP URL: %s" % live_stream.rtmp_push_url) print("MPD URL: %snHLS URL: %snSTREAM KEY: %sn" % (live_stream.mpd_url, live_stream.hls_url, live_stream.stream_key))
RTMP Input Examples
To input a video stream into our live stream encoders you can use any client (ffmpeg, Open Broadcaster, etc.) or encoder (Elemental, Envivio, Cisco, etc.) that supports RTMP push!
ffmpeg
Here is an example ffmpeg command that can be used to input a video stream into our live stream encoders:
ffmpeg -re -i -c copy -f flv
Open Broadcaster
Open Broadcaster could also be used to ingest videos into the bitcodin live streaming encoders. The important settings are under Broadcast settings. Basically you will have to select the Live Stream mode and Streaming Service is custom so that you are able to input the RTMP push url that you get from the bitcodin live streaming encoders. The stream key must be set to the value that has been provided during the live streaming setup with bitcodin.
Under encoding it is most important to set the correct audio sample rate (Format) according to the sample rate that has been set in the encoding profile. If the sample rate of the input stream and the encoding profile differ this could lead to synchronization issues of audio and video. If no sample rate is set in the encoding profile, bitcodin chooses the sample rate automatically based on the input stream.
Another important setting is under Video. Same as for audio it is important to set the same frame rate (FPS) rate for video as set in the bitcodin encoding profile because otherwise synchronization issues of audio and video could occur. If no frame rate is set in the encoding profile, bitcodin chooses the frame rate automatically based on the input stream.
Playback your MPEG-DASH and HLS live stream
Playback your video stream with an MPEG-DASH and/or HLS compatible player such as bitdash, dash.js, JWPlayer or Flowplayer. The first step is that you enable CORS on your origin, which allows streaming through HTML5 and also add a crossdomain.xml to enable Flash based streaming. If you want to know more why this is important you can take a look at our CORS and Crossdomain.xml – What you need to know blog post.
Enable CORS and crossdomain.xml on GCS
To enable MPEG-DASH streaming through HTML5 you need to enable “Cross-Origin Resource Sharing” (CORS). Just follow the google documentation. An example CORS configuration could look like the following:
[ { "origin": ["*"], "responseHeader": ["application/json"], "method": ["GET","HEAD"], "maxAgeSeconds": 3600 } ]
To enable MPEG-DASH & HLS playback in Flash, add a crossdomain.xml in the root directory of your GCS Bucket.
Testing
If you want to simply test your video stream if everything is working as expected you can use the following URLs for MPEG-DASH or HLS and test it on the dash-player website directly:
Setup your live stream playback with bitdash
Get your Free bitdash Player
To playback your content download the bitdash MPEG-DASH & HLS player at dash-player.com. You just need to enter your email address and the domain name as configured on GCS or on your CDN, which is connected with GCS.
After hitting DOWNLOAD FOR FREE you will be forwarded to the bitmovin player portal and your personal player is generated. Once the generation is finished (usually takes a few seconds), you are able to download the player files, by selecting Download self-hosted player and clicking Download Player.
The downloaded .zip package contains all necessary player files. The unpacked files should be placed on Google Cloud Storage. Please make sure to place all files within the same folder.
Prepare a Sample Page
Next step is to download a pre-configured sample page (using the Download Code button), which demonstrates the player setup.
To ensure, your self-hosted player files are loaded, just insert the correct URL to bitdash.min.js at line 6 of the sample page.
To configure the player with your live stream, you simply have to change the player config object (lines 2-4 within the sample page). Just replace the values for mpd, hls, and poster (not needed entries can be deleted) pointing to the location of live stream encoded with bitcodin and served through GCS or a CDN.
source: { dash: '//path/to/your/dash-manifest.mpd', hls: '//path/to/your/hls-manifest.m3u8', poster: '//path/to/your/poster.jpg' }
Publish
Last step is to upload your sample page to Google Cloud Storage with the domain you specified at the player generation.
Once you open the page, you will see your live stream playing through MPEG-DASH or HLS (based on your browser) with low startup-delay, no buffering and in the best possible quality!
Conclusion
If you want to create some MPEG-DASH and HLS live streams you can use our bitcodin encoding service that offers a free plan with 2.5GB encoding output per month. That’s great for testing and playing around with our live streaming feature. If you are missing something in our live streaming feature just drop us a line we are always interested in your feedback, which helps us improving our service.
DASH & HLS Live Streaming
Original URL: http://feedproxy.google.com/~r/feedsapi/BwPx/~3/qYpXQoEwbYo/