Cisco Meeting Server Streaming to Youtube via WOWZA

Cisco Meeting Server Streaming to Youtube via WOWZA

A-   Topology

B- Scenario

One or more Collaboration endpoints calls to a selected space at the CMS. CMS pushes stream to the Streamer. Streamer passes stream to the WOWZA streaming engine. WOWZA connects media through Youtube with its connector. Finally user can watches live stream from Youtube.

C- Configuration

1-   Setup of Streamer Server

Assumed that CMS Streamer’s VM instance deployed and all other parts such as Call Manager, Im Presence and CMS Call Bridge/XMPP deployed correctly.

Servers Description
Ip Address
CMS01.domain.com
192.168.1.130
CMSSTR.domain.com
192.168.1.132
WOWZA.domain.com
192.168.1.50
DNS Server
192.168.1.100
NTP Server
192.168.1.100
Gateway
192.168.1.1

Some important points.

CMS01 has Call Bridge and XMPP services.

XMPP service records must be entered. Same necessity must be done for also Recording.

  • _xmpp-client._tcp  SRV   10  10  5222    cms01.domain.com

a.    Initial Config of Streamer:

>ipv4 a add 192.168.1.132/24 192.168.1.1                  //giving an ip address

>hostname cmsstr                                                           //setting up a hostname

>dns add forwardzone . 192.168.1.100                       //adding a dns server

>ntp server add 192.168.1.100                                     //adding a ntp server

>timezone Europe/Istanbul                                         //determine timezone

>reboot                                                                             //To apply all config you need to reboot server.

b.     Creating Certificate:

  1. >pki csr cmsstr CN:cmsstr.domain.com subjectAltName:cmsstr.domain.com, domain.com
  2. Use Winscp or vs. to download cmsstr.csr to your computer.
  3. Sing Certificates via your local CA.
  4. Upload signed certificate ”cmsstr.cer” as well as Call Bridge certificate.”cms01.cer” . And “root.cer” is your CA server’s root cert.
  5. To see certificate on cmsstr’s store you can enter “pki list” command.

> pki list

User supplied certificates and keys:

cmsstr.key

cmsstr.csr

cmsstr.cer

root.cer

cms01.cer

c.    Applying certificates and initial streamer config:

> streamer listen a:8443

> streamer certs cmsstr.key cmsstr.cer root.cer

> streamer trust cms01.cer

> streamer enable

SUCCESS: Key and certificate pair match

SUCCESS: certificate verified against CA bundle

SUCCESS: Streamer enabled

2-   Configure Call Bridge Server

For Streaming you should determine which space will use for streaming during conference. We will use marked space as you can see down below.

a.    Point Streamer ip into CMS

Step 1- To see a streamer whether exist or not.

GET : https://192.168.1.130:8443/api/v1/streamers

<?xml version=”1.0″?>

</streamers>

Step 2- Add new streamer ;

POST : https://192.168.1.130:8443/api/v1/streamers

Key = URL, Value = https://192.168.1.132:8443

Or if exist any streamer you can use PUT command to renew url

PUT : https://192.168.1.130:8443/api/v1/streamers/<streamerid>

Key = URL, Value = https://192.168.1.132:8443

Step 3- Verify to url is applied correctly.

GET: https://192.168.1.130:8443/api/v1/streamers/<streamerid>

In my CMS I applied.

GET: https://192.168.1.130:8443/api/v1/streamers/4d63a411-6d50-4e08-8305-ef14d06c654f

<?xml version=”1.0″?>

<streamer id=”4d63a411-6d50-4e08-8305-ef14d06c654f”>

<url>https://192.168.1.132:8443</url>

</streamer>

b.    Enable space for streaming:

To do this we will use Postman: Enter commands respectively. Using Postman little off topic for most network engineers. I suggest that check link and familiar with app.

https://cmslab.ciscolive.com/pod1/API/api

Step 1- To get space id of selected space for streaming purposes.

GET: https://192.168.1.130:8443/api/v1/coSpaces

<?xml version=”1.0″?>

<coSpaces total=”3″>

    <coSpace id=”b0faed65-fecc-4655-a79f-210d3964f8f1″>

<name>Stream Space</name>

<autoGenerated>false</autoGenerated>

<uri>stream.space</uri>

<secondaryUri>81005</secondaryUri>

</coSpace>

<coSpace id=”aa70865a-eb3b-49ed-887e-b584359f604f”>

<name>test </name>

<autoGenerated>false</autoGenerated>

<uri>81000</uri>

</coSpace>

<coSpace id=”5b0422f6-89c2-4974-9821-38faa6e8f2b4″>

<name>users space</name>

<autoGenerated>false</autoGenerated>

<uri>user.space</uri>

<secondaryUri>81002</secondaryUri>

</coSpace>

</coSpaces>

Step 2- PUT: https://192.168.1.130:8443/api/v1/coSpaces/b0faed65-fecc-4655-a79f-210d3964f8f1

Key = streamURL, Value = rtmp://cms:stream@192.168.1.50/live/CMSSTREAM

  • Rtmp = it is a protocol for using streaming.
  • cms:stream = username:password which determined at the WOWZA media server.

Step 3- To see streamURL value is applied you can use this command.

GET : https://192.168.1.130:8443/api/v1/coSpaces/b0faed65-fecc-4655-a79f-210d3964f8f1

<?xml version=”1.0″?>

<coSpace id=”b0faed65-fecc-4655-a79f-210d3964f8f1″>

<name>Stream Space</name>

<autoGenerated>false</autoGenerated>

<uri>stream.space</uri>

<secondaryUri>81005</secondaryUri>

<streamUrl>rtmp://cms:stream@192.168.1.50/live/CMSSTREAM</streamUrl>

</coSpace>

c.    Configure Streaming Mode:

You can start streaming automatically or manual during conference. To do this you have to applied streamingMode into CallProfiles. You can put value as automatic, manual or disable for this option.

If manual selected you can start streaming via dtmftones. I will show at the setting up the dtmf tones section.

Step 1- To see which CallProfiles do you have. You can use;

GET : https://192.168.1.130:8443/api/v1/callProfiles

 <?xml version=”1.0″?>

<callProfiles total=”1″>

    <callProfile id=”f60e0cda-9d25-4522-bf9e-f1f5ebf9d14d”></callProfile>

</callProfiles>

Step 2– Apply streaming mode and value as automatic.

PUT : https://192.168.1.130:8443/api/v1/callProfiles/f60e0cda-9d25-4522-bf9e-f1f5ebf9d14d

Key = streamingMODE, Value = automatic

Step 3- Verify to streaming mode is applied.

GET : https://192.168.1.130:8443/api/v1/callProfiles/f60e0cda-9d25-4522-bf9e-f1f5ebf9d14d

<?xml version=”1.0″?>

<callProfile id=”f60e0cda-9d25-4522-bf9e-f1f5ebf9d14d”>

<recordingMode>manual</recordingMode>

    <streamingMode>automatic</streamingMode>

</callProfile>

d.    Setting up Streaming Control Allowed Parameter for Manual streaming.

Step 1- To get existing Call Leg Profiles.

GET : https://192.168.1.130:8443/api/v1/callLegProfiles

<?xml version=”1.0″?>

<callLegProfiles total=”1″>

    <callLegProfile id=”19c4e3d3-f5d8-45e5-8b9b-1e85caf13f92″></callLegProfile>

</callLegProfiles>

Step 2- Appy streamingControlAllowed parameter.

PUT : https://192.168.1.130:8443/api/v1/callLegProfiles/19c4e3d3-f5d8-45e5-8b9b-1e85caf13f92

Key = streamingControlAllowed, Value = true

 

Step 3- Verify to parameter applied or not.

GET : https://192.168.1.130:8443/api/v1/callLegProfiles/19c4e3d3-f5d8-45e5-8b9b-1e85caf13f92

<?xml version=”1.0″?>

<callLegProfile id=”19c4e3d3-f5d8-45e5-8b9b-1e85caf13f92″>

<sipMediaEncryption>optional</sipMediaEncryption>

<telepresenceCallsAllowed>false</telepresenceCallsAllowed>

<sipPresentationChannelEnabled>true</sipPresentationChannelEnabled>

<bfcpMode>serverOnly</bfcpMode>

<recordingControlAllowed>true</recordingControlAllowed>

    <streamingControlAllowed>true</streamingControlAllowed>

</callLegProfile>

e.    Setting up Dtmf profile.

Step 1- To see existing dtmf profiles.

GET : https://192.168.1.130:8443/api/v1/dtmfprofiles

You will get that results;

<?xml version=”1.0″?>

<dtmfProfiles total=”1″>

    <dtmfProfile id=”c9fa5257-afe8-4879-9af5-1e117a1ef196″></dtmfProfile>

</dtmfProfiles>

Step 2- Apply dtmpf tone for start and stop streaming.

PUT : https://192.168.1.130:8443/api/v1/dtmfprofiles/c9fa5257-afe8-4879-9af5-1e117a1ef196

Key = startStreaming, Value = **5

Key = stopStreaming, Value = **6

Step 3- Verify to parameters are applied or not;

GET : https://192.168.1.130:8443/api/v1/dtmfprofiles/c9fa5257-afe8-4879-9af5-1e117a1ef196

And your will see ;

<?xml version=”1.0″?>

<dtmfProfile id=”c9fa5257-afe8-4879-9af5-1e117a1ef196″>

<muteSelfAudio></muteSelfAudio>

<unmuteSelfAudio></unmuteSelfAudio>

<toggleMuteSelfAudio></toggleMuteSelfAudio>

<lockCall>*7</lockCall>

<unlockCall>*8</unlockCall>

<muteAllExceptSelfAudio></muteAllExceptSelfAudio>

<unmuteAllExceptSelfAudio></unmuteAllExceptSelfAudio>

<endCall></endCall>

<nextLayout>*2</nextLayout>

<previousLayout>*3</previousLayout>

<startRecording>**7</startRecording>

<stopRecording>**8</stopRecording>

<startStreaming>**5</startStreaming>

    <stopStreaming>**6</stopStreaming>

<allowAllMuteSelf></allowAllMuteSelf>

<cancelAllowAllMuteSelf></cancelAllowAllMuteSelf>

<allowAllPresentationContribution></allowAllPresentationContribution>

<cancelAllowAllPresentationContribution></cancelAllowAllPresentationContribution>

<muteAllNewAudio></muteAllNewAudio>

<unmuteAllNewAudio></unmuteAllNewAudio>

<defaultMuteAllNewAudio></defaultMuteAllNewAudio>

<muteAllNewAndAllExceptSelfAudio></muteAllNewAndAllExceptSelfAudio>

<unmuteAllNewAndAllExceptSelfAudio></unmuteAllNewAndAllExceptSelfAudio>

</dtmfProfile>

f.    Connect Profiles

Step 1- We previously configured call profile, call leg profile and dtmf profile with those ids. To apply Callprofiles, CallLegProfile and DtmfProfile into system profiles;

PUT : https://192.168.1.130:8443/api/v1/system/profiles

Key = callLegProfile, Value = 19c4e3d3-f5d8-45e5-8b9b-1e85caf13f92

Key = callProfile, Value = f60e0cda-9d25-4522-bf9e-f1f5ebf9d14d

Key = dtmfProfile, Value = c9fa5257-afe8-4879-9af5-1e117a1ef196

 

Step 2- Verify profiles applied ;

GET : https://192.168.1.130:8443/api/v1/system/profiles

You will get that result;

<?xml version=”1.0″?>

<profiles>

<callLegProfile>19c4e3d3-f5d8-45e5-8b9b-1e85caf13f92</callLegProfile>

    <callProfile>f60e0cda-9d25-4522-bf9e-f1f5ebf9d14d</callProfile>

    <dtmfProfile>c9fa5257-afe8-4879-9af5-1e117a1ef196</dtmfProfile>

</profiles>

CMS and Streamer ready to go.

3-   Installing and Configuring WOWZA Streaming Engine

a.    Installing:

WOWZA is not free software. However they have trial period. So we can collect trial license from their website.

Go to https://www.wowza.com/pricing/trial  and click Free Trial form.

The you can download and install https://www.wowza.com/pricing/installer for Windows, Mac and Linux 64 bit version.

I installed into my Windows 10 PC. Key is entered during installation which obtained via email after filling trial form.

Additionally, during installation a username password determined for WOWZA management page.

Then l visited localhost:8088 a wizard is help to set up username and password for using source. This username and password is used in the CMS at “2-Configura Call Bridge Server  b.  Enable space for streaming  section: Step 2”

b.    Enabling Youtube account for Streaming.

Your account have to be enabled for streaming at youtube.

  • Go to youtube.com/my_live_events end enable your account for live events. It will take 24 hour to enabled if it is not enabled before.
  • After that. Revisit youtube.com/my_live_events and Click “Stream now” under LIVE STREAMING section.
  • Enter details for streaming under BASIC INFO section.

  • Under the ENCODER SETUP note your Server URL and Stream name/key by clicking to Reveal button.

c.    Adding a Stream Target for Youtube at WOWZA.

Explanation of stream targets : The Stream Targets feature in Wowza Streaming Engine™ live streaming software allows you to send live streams to widely distributed destinations. For example, you can send a live stream from a server running Wowza Streaming Engine software to YouTube Live. This allows you to engage the YouTube community and retain media for video-on-demand delivery when the broadcast concludes.

  • So go to Stream Targets and click to Add Stream Target and Select Youtube
  • Enter your Youtube information For instance;
    1. Source Stream Name = CMSSTREAM //local stream name
    2. Destination Application Name = live2 //it is from rtmp://a.rtmp.youtube.com/live2
    3. Destination Application Instance = CMSSTREAM
    4. Destination Host = a.rtmp.youtube.com
    5. Destination Port = 1935
    6. Destination Stream Name = It is your Youtube Stream name/key value, like “aaaa-bbbb-cccc-dddd is”
    7. User Name = Google username
    8. Password = Google password
    9. Click Save

 

  • Click to Enable Stream Targets. Then it will show Warning for enabling it. Just click Ok and continue.
  • Click Restart Now button at the top-right.

  • You will see Waiting at the Status column. It will wait stream to send Youtube.

4-   DEMO

Basically you can use any video supported endpoint to call streaming enabled space. So I called from my Jabber for Windows client to the space that we configured. Once I called to space I heared that  “This conference will be streamed” warning from CMS.

  • Additionally I was able to capture my stream via VLC like ;

Media > Open Network Stream > rtmp://192.168.1.50:1935/live/CMSSTREAM

 

  • You can observe incoming stream at WOWZA.

  • Finally if everything is fine you can be able to stream and watch your video at Youtube.

5-   Resources 

  • https://www.cisco.com/c/en/us/support/docs/conferencing/meeting-server/211261-Configure-and-Troubleshoot-CMS-live-stre.html
  • https://www.wowza.com/docs/how-to-stream-to-youtube
  • https://community.cisco.com/t5/telepresence-and-video/can-cms-cisco-meeting-server-streaming-by-themselves-without-3rd/td-p/3072764
  • https://community.cisco.com/t5/telepresence-and-video/can-cms-cisco-meeting-server-streaming-by-themselves-without-3rd/td-p/3072764
  • https://cmslab.ciscolive.com/pod1/API/api

Regards,

Baris.

 

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *