| 1252 | |
| 1253 | [=#rtmp] |
| 1254 | == RTMP Streaming |
| 1255 | Real-Time Messaging Protocol (RTMP) is a protocol for streaming audio, video and data over the internet. It was originally developed by Macromedia and proprietary but has since been released for public use. It is a TCP-based protocol which maintains persistent connections. |
| 1256 | |
| 1257 | Using RTMP requires you have: |
| 1258 | * an RTMP server (ie Youtube or Nginx) |
| 1259 | * a stream transmitter (ie Gateworks board) |
| 1260 | * a stream receiver (ie Web browser or Gateworks board) |
| 1261 | |
| 1262 | [=#youtube] |
| 1263 | === !YouTube Live Streaming |
| 1264 | It is possible to stream video to !YouTube Live Streaming from the Gateworks board using GStreamer's rtmpsink element. |
| 1265 | |
| 1266 | To create a !YouTube live feed via RTMP: |
| 1267 | - goto !YouTube Live Control Room (https://www.youtube.com/livestreaming/) |
| 1268 | - goto http://youtube.com and login to your account |
| 1269 | - click the Camera icon on the top left to add a stream and select 'Go Live' |
| 1270 | - select Stream at the top |
| 1271 | - create a title and specify your !YouTube attributes (ie Public, etc etc) then hit 'Create Stream' |
| 1272 | - take note of your 'Stream key' needed for the encoder pipeline |
| 1273 | - start your gstreamer pipeline to capture/encode/stream via {{{rtpmsink}}} to the youtube 'Streamer URL' (see [#rtmpsink below]) |
| 1274 | - once YouTube says your stream is ready (indicating its receiving data) hit the 'GO LIVE' button at the top left |
| 1275 | - Now you can hit the 'Share' icon at the top left to get a URL to share to view the stream |
| 1276 | |
| 1277 | |
| 1278 | [=#rtmpsink] |
| 1279 | === GStreamer rtmpsink transmitter |
| 1280 | Once you have an RTMP server you can use GStreamer to stream live content to it with the {{{rtmpsink}}} element. |
| 1281 | |
| 1282 | Examples: |
| 1283 | * color-bar pattern from videotestsrc and audio from audiotestsrc |
| 1284 | {{{#!bash |
| 1285 | gst-launch-1.0 \ |
| 1286 | videotestsrc ! "video/x-raw,width=640,height=360,framerate=15/1" ! \ |
| 1287 | v4l2h264enc extra-controls="controls,h264_profile=4,video_bitrate=620000" ! \ |
| 1288 | h264parse ! \ |
| 1289 | mux. \ |
| 1290 | audiotestsrc is-live=true ! "audio/x-raw,format=S16LE,endianness=1234, signed=true,width=16,depth=16,rate=44100,channels=2" ! \ |
| 1291 | voaacenc bitrate=128000 ! \ |
| 1292 | aacparse ! "audio/mpeg,mpegversion=4,stream-format=raw" ! \ |
| 1293 | mux. \ |
| 1294 | flvmux streamable=true name=mux ! queue ! \ |
| 1295 | rtmpsink location="rtmp://a.rtmp.youtube.com/live2/ee12-bsgt-e22v-8qr1" |
| 1296 | }}} |
| 1297 | * captured video/audio: |
| 1298 | {{{#!bash |
| 1299 | gst-launch-1.0 \ |
| 1300 | v4l2src device=$DEVICE ! \ |
| 1301 | v4l2h264enc extra-controls="controls,h264_profile=4,video_bitrate=620000" ! \ |
| 1302 | h264parse ! \ |
| 1303 | mux. \ |
| 1304 | alsasrc device="sysdefault:CARD=sgtl5000audio" ! \ |
| 1305 | voaacenc bitrate=128000 ! \ |
| 1306 | aacparse ! "audio/mpeg,mpegversion=4,stream-format=raw" ! \ |
| 1307 | mux. \ |
| 1308 | flvmux streamable=true name=mux ! queue ! \ |
| 1309 | rtmpsink location="rtmp://a.rtmp.youtube.com/live2/ee12-bsgt-e22v-8qr1" |
| 1310 | }}} |
| 1311 | |
| 1312 | Note that the {{{location}}} property of the {{{rtmpsink}}} is configured on your server. For !YouTube for example they provide the URL and you need to append the 'Stream Key' to that path |
| 1313 | |
| 1314 | |