Page tree
Skip to end of metadata
Go to start of metadata


Overview

Streaming offers the means of delivering live content, like Vibe meetings, to a very broad audience with minimal additional cost. Examples of services include YouTube, U-Stream, TwitchTV and others. There are also local network devices such as WOWSA that provide premise based Streaming from your Datacenter. Using this technology results in people being able to watch your content simply by clicking a Web Link that you provide for access.

The protocol used for delivering content for Streaming is Real Time Streaming Protocol ( RTSP ).  Vibe supports this via connections to the RNODE (Vibe software server) associated with your account or service. Any given meeting can be associated with the Streaming service of your choice where you have an account.

This feature is not extended to any client applications at this time and is considered experimental / alpha.

Requirements

In order to connect your meeting to the service the following information must be provided:

  • Streaming service that supports RTSP (YouTube, etc.)

  • Vibe Meeting ID number

  • The Account information for the Streaming service or device you intend to use.

  • The Destination Link (FQDN) for the Streaming service

  • Primary and Backup Server URLs (Backup server is optional, but desirable)

An engineer from eZuce will work with you to configure the connections and test/validate that the service is working. At the time that you Start the meeting and the streaming service a transcoded image of the Video Streams will be sent for your audience to see. (In future there will be a configuration interface allowing you to create these settings directly.)

YouTube

Description for YouTube

Set up your live stream in YouTube. Select Type Custom on Basic info page. This gives you options to configure your own encoder. Press Create event when done.

On the Camera page setting select the max. resolution you want to stream and as encoder select Other encoders. It will show you recommended settings for the output stream when you hover over question mark.

Note the Stream name, Primary server URL and Backup server URL somewhere. This info is necessary to know where the stream should be sent. The destination address will have this form: Primary server URL/Stream name or Backup server URL/Stream name for backup server. If YouTube loses primary stream, it will switch to backup stream. Backup server is optional.

Start the meeting in Vibe and check in YouTube the stream from Vibe is OK in preview window.

Press Start streaming button when the stream is OK and you want to go public.


This document holds recommended settings for individual supported services in webcast service.


YouTube


Profile

1080p

720p

480p

360p

240p

Resolution

1920x1080

1280x720

854x480

640x360

426x240

Bitrate (kbps)

3000-6000

1500-4000

500-2000

400-1000

300-700



Encoder settings:

Protocol: RTMP Flash Streaming

Video codec: H.264, Level 4.1

Frame rate: up to 30 fps

Keyframe: recommended 2 seconds, do not exceed 4 seconds

Audio codec: AAC or MP3

Bitrate encoding: CBR

Recommended advanced settings:

Pixel aspect ratio: Square

Frame types: Progressive Scan, 2B-frames, 1 reference frame

Entropy coding: CABAC

Audio sample rate: 44.1 kHz

Audio Bitrate: 128 kbps stereo

Example of JSON object for webcast API:

{

"meetingID":"1111111111",

"meetingPwd":"",

"seevoghCaster":"evo08.hep.caltech.edu:9092",

"duration":60,

"action":"ADDW",

"width":854,

"height":480,

"framerate":30,

"layout":11,

"audioOnly":false,

"showNames":true,

"nameSize":100,

"inputParameters":"-protocol_whitelist file,udp,rtp,crypto",

"outputs":[{"audioCodec":"aac",

"audioBitrate":"128k",

"videoCodec":"libx264",

"videoBitrate":"1500k",

"format":"flv",

"additionalParameters":"-ar 44100 -ac 2 -g 60 -vprofile main -vlevel 41 -strict -2",

"destinationServer":"rtmp://a.rtmp.youtube.com/live2/abcd-efgh-ijkl-mnop"}]

}

From a user perspective, we need the Server URL and  Stream name/key  that is showed in Encoder setup paragraph on Live Streaming page in YouTube (Fig. 1). All other settings should be set by selecting a profile. Other optional settings independent of profile are for showing user names in video (showNames), size of the names (nameSize), layout of the transcoded video (layout), option to stream audio only (audioOnly) and options related to watermark.

Fig. 1: YouTube settings


YouTube Additional Information

You can find Live streaming guide by YouTube at the following link:

https://support.google.com/youtube/answer/2474026


Ustream

Recommended settings:


Quality

Resolution

Video bitrate (kbps)

Audio bitrate (kbps)

Frame

rate

Video codec

Codec profile

Key frame interval

Audio codec

Audio channels

Low

480x270

400

64

15/30

H264

Baseline

2 sec

AAC

Mono

Med

640x360

800-1200

96

30

H264

Main

2 sec

AAC

Mono / Stereo

High

960x540

800-1500

96

30

H264

Main

2 sec

AAC

Mono / Stereo

HD720

1280x720

1200-4000

128

30

H264

Main

2 sec

AAC

Mono / Stereo

HD1080

1920x1080

4000-8000

192

30

H264

Main or High

2 sec

AAC

Stereo



Example of JSON object for webcast API:

{

"meetingID":"1111111111",

"meetingPwd":"",

"seevoghCaster":"evo08.hep.caltech.edu:9092",

"duration":60,

"action":"ADDW",

"width":640,

"height":360,

"framerate":30,

"layout":11,

"audioOnly":false,

"showNames":true,

"nameSize":100,

"inputParameters":"-protocol_whitelist file,udp,rtp,crypto",

"outputs":[{"audioCodec":"aac",

"audioBitrate":"96k",

"videoCodec":"libx264",

"videoBitrate":"1100k",

"format":"flv",

"additionalParameters":"-g 60 -vprofile main -vlevel 41 -strict -2",

"destinationServer":"rtmp://1.14258.fme.ustream.tv/ustreamVideo/14258/fBanUv4MdqexgdJPr"}]

}


From a user perspective, we need RTMP URL and  Stream key  that is showed in Broadcast settings on the UStream page (Fig. 2). All other settings should be set by selecting a profile. Other optional settings independent of profile are for showing user names in video (showNames), size of the names (nameSize), layout of the transcoded video (layout), option to stream audio only (audioOnly) and options related to watermark.

Fig. 2: UStream settings


Mongoose webcast API

Add new webcast job:
http://mongoose:4010/module=webcast&json={settings}, where
{settings}={
"meetingID":"365",
"meetingPwd":"1111",
"seevoghCaster":"158.197.28.34:9092",
"duration":60,
"action":"ADD",
"width":640,
"height":360,
"framerate":25,
"layout":11,
"audioOnly":false,
"showNames":true,
"nameSize":100,
"inputParameters":"-protocol_whitelist file,udp,rtp,crypto",
"outputs":[{"audioCodec":"aac",
"audioBitrate":"32k",
"videoCodec":"libx264",
"videoBitrate":"800k",
"format":"flv",
"additionalParameters":"-g 60 -vprofile main -strict -2",
"destinationServer":"rtmp://someserver.com/stream/"}],

"watermarkFileType":"png",
"watermarkPlacement":102,
"watermark":"Base64 encoded watermark image data"}
action: ADD – add job and start it immediately
ADDW – just add job. It must be started manualy later

layout: transcoder layout
watermarkFileType: png images are recommended
watermarkPlacement: 100 – top left corner

101 – top right corner
102 – bottom right corner

103 – bottom left corner
watermark: Base64 encoded watermark image data
All watermark related items can be ommited if no watermark should be used.
Also meetingPwd, duration, layout, audioOnly, showNames, nameSize items are optional.
Anyway, job can be added only for valid (existing) meetings.
Response:
{"status":"OK", "webcastID":webcast_job_id, "msg":"New job started"} or
{"status":"OK", "webcastID":webcast_job_id, "msg":"New job added"}
Start job:
http://mongoose:4010/module=webcast&action=start&webcastID=11111
Response:
{"status":"OK", "webcastID":11111, "msg":"Job started"}
Stop job:

http://mongoose:4010/module=webcast&action=stop&webcastID=11111
Response:
{"status":"OK", "webcastID":11111, "msg":"Job stopped"}
Cancel job:
http://mongoose:4010/module=webcast&action=cancel&webcastID=11111
Canceled jobs can not be started again.
Response:
{"status":"OK", "webcastID":11111, "msg":"Job canceled"}
Restart job:
http://mongoose:4010/module=webcast&action=restart&webcastID=11111
Response:
{"status":"OK", "webcastID":11111, "msg":"Job restarted"}
Extend job:
http://mongoose:4010/module=webcast&action=extend&webcastID=11111&amount=60
amount can be negative
Response:
{"status":"OK", "webcastID":11111, "msg":"Job extended by 60 minutes"}
Modify webcast job:
http://mongoose:4010/module=webcast&json={settings}, where
{settings}={
"jobID":11111,
"action":"MODIFY",
"width":640,
"height":360,
"framerate":25,
"layout":11,
"audioOnly":false,
"showNames":true,
"nameSize":100,
"outputs":[{"audioCodec":"aac",
"audioBitrate":"32k",
"videoCodec":"libx264",
"videoBitrate":"800k",
"format":"flv",
"additionalParameters":"-g 60 -vprofile main -strict -2",
"destinationServer":"rtmp://someserver.com/stream/"}],

"watermarkFileType":"png",
"watermarkPlacement":102,
"watermark":"Base64 encoded watermark"}
Only jobID and action fields are required. Options that should not change should be ommited. If some field from
outputs should be changed, all outputs subfields has to be specified. Job will be automatically restarted to apply new
settings.
Response:
{"status":"OK", "webcastID":11111, "msg":"Job modified"}

Get status for single job:
http://mongoose:4010/module=webcast&action=status&webcastID=11111
Response:
{"status":"OK", "webcastID":11111, "msg":"Running"}
Possible statuses are: Error, Waiting, Running, Stopped, Canceled, Canceled on error,
Canceled on mixer error, Canceled on ffmpeg error, Canceled on transcoder error. Job
statuses and their codes can be found in Appendix A.
Get status for all jobs:
http://mongoose:4010/module=webcast&action=status&webcastID=-1
Response:
{"status":"OK",
"error":[1111],
"waiting":[22222,333333],
"running":[44444],
"stopped":[5555],
"canceled":[]}
Get status for all jobs in webcast list of Mongoose (just for internal use) :
http://mongoose:4010/module=webcast&action=status&webcastID=-2
Response:
{"status":"OK",
"error":[1111],
"waiting":[22222,333333],
"running":[44444],
"stopped":[5555],
"canceled":[]}
Get jobs details:
http://mongoose:4010/module=webcast&action=details&webcastID=11111
Response:
{"jobID":11111,
"meetingID":"911",
"meetingPwd":"1234",
"meetingTitle":"Meeting title",
"seevoghCaster":"seevocaster:9092",
"pandaIP":"10.0.0.4",
"audioPort":9020,
"videoPort":9022,
"start":1426606488601,
"duration":60,
"jobStatus":1, // job status constants in Appendix A
"action":"UNDEFINED", // last action (UNDEFINED, ADD, ADDW, MODIFY)
"width":640,
"height":360,
"framerate":25,
"layout":11,
"audioOnly":false,
"showNames":true,
"nameSize":100,
"inputParameters":"-protocol_whitelist file,udp,rtp,crypto",
"outputs":[{"audioCodec":"aac",
"audioBitrate":"64k",

"videoCodec":"libx264",
"videoBitrate":"800k",
"format":"flv",
"additionalParameters":"-g 60 -vprofile main -strict -2",
"destinationServer":"rtmp://someserver.com/stream/"}],

"watermarkFileType":"png",
"watermarkPlacement":102, // watermark placement constants in Appendix B
"watermark":"Base64 encoded watermark data", // only if watermark is
present
"errorCode":0} // table of error codes in Appendix C
There may be some fields that shouldn't be presented to end users (like PandaIP and maybe some other). To check.
Get list of all jobs id's:
http://mongoose:4010/module=webcast&action=jobs
Response:
{"status":"OK",
"webcastIDs":[111,222,333,444],
"msg":"Listing all jobs ID's"}
Get list of all SeevoCasters:
http://mongoose:4010/module=webcast&action=seevocasters
Response:
{"status":"OK",
"seevocasters":"[\"seevocaster1::10.0.0.4::true\",
\"seevocaster2::10.0.0.8::false\"]"}

Items are in form: alias::ip_address::is_connected
Get list of all jobs started on certain SeevoCaster:
http://mongoose:4010/module=webcast&action=seevocaster_jobs&seevocaster=10.0.0.4
Response:
{"status":"OK",
"seevocaster":"10.0.0.4",
"webcastIDs":[1111,22222,33333]}
Note: SeevoCaster can be specified through alias, IP address or FQDN.
Get binary stats:
http://mongoose:4010/module=webcast&action=binary_stats&webcastID=11111
Response:
{"status":"OK",
"webcastID":11111,
"FFmpegRestarts":3,
"FFmpegLastRestart":"Tue Mar 17 19:04:35 CET 2015",
"FFmpegLastRestartTS":"1426615475816",
"MixerRestarts":0,
"MixerLastRestart":"n/a",
"MixerLastRestartTS":"n/a",
"TranscoderRestarts":0,
"TranscoderLastRestart":"n/a",
"TranscoderLastRestartTS":"n/a"}
It doesn't count restarts when job is restarted by user.

Connect SeevoCaster:
http://mongoose:4010/module=webcast&action=connect&seevocaster=10.0.0.4&alias=scaster
Response:
{"status":"OK",
"seevocaster":"10.0.0.4",
"msg":"SeevoCaster connected"}
Note1: SeevoCaster can be specified through alias (only for existent items), IP address or FQDN.
Note2: If SeevoCaster is not in list, it will be created. However it should be added to managers.properties file manually,
otherwise it will be lost on restart.
Note3: alias is optional and used only with nonexistent item. Alias will be equal to seevocaster value when not specified.
Disconnect SeevoCaster:
http://mongoose:4010/module=webcast&action=disconnect&seevocaster=10.0.0.4
Response:
{"status":"OK",
"seevocaster":"10.0.0.4",
"msg":"SeevoCaster disconnected"}
Note1: SeevoCaster can be specified through alias, IP address or FQDN.
Note2: All running jobs on SeevoCaster will be stopped.
Get Mongoose version:
http://mongoose:4010/module=webcast&action=version
Response:
{"status":"OK",
"msg":"Build 2015-03-18 16:34:05 +0100 amigo / Started: Wed Mar 18 16:37:57 CET 2015"}

Error messages
Standard form of error message is:
{"webcastID":11111,
"err":-1,
"msg":"Error message"}
webcastID can be ommited in case the error is not related to any webcast job. Error codes and their messages can be found
in Appendix C. General error code -1 may have different messages.

Appendix A: Job status constants
Error = 0
Waiting = 1
Running = 2
Stopped = 4
Canceled = 5
Canceled on error = 6
Canceled on mixer error = 7
Canceled on ffmpeg error = 8
Canceled on transcoder error = 9

Appendix B: Watermark placement constants
TOP_LEFT = 100
TOP_RIGHT = 101
BOTTOM_RIGHT = 102
BOTTOM_LEFT = 103

Appendix C: Error and other codes constants
0 OK
1 Job is valid
2 Job is invalid
-1 Error
100 Job not found
101 Job's duration is too short
102 SeevoCaster not found
103 SeevoCaster not started
104 Invalid meeting
105 Panda not found
106 SeevoCaster connection problem
107 Canceled job can not be started again
108 Invalid webcastID
109 Invalid amount value
110 Invalid settings
111 SeevoCaster not connected
112 Invalid action
113 Starting job too early after stop. Have to wait at least 1 minute to
start the job again
114 Only running job can be restarted
115 Only running job can be stopped


  • No labels