
Recherche avancée
Médias (1)
-
Rennes Emotion Map 2010-11
19 octobre 2011, par
Mis à jour : Juillet 2013
Langue : français
Type : Texte
Autres articles (96)
-
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...) -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir
Sur d’autres sites (4996)
-
Date and segment comparison feature
31 octobre 2019, par Matomo Core Team — Analytics Tips, Development -
FFMPEG, Creating an MPEG-DASH stream with existing inputs
10 septembre 2019, par kitenseiI am trying to generating a
DASH .mpd
file from multiple inputs (2 videos, 1 audio) without any success..What I’d like to do it’s simple getting the streams and create an mpd file without any re encoding since I’ve already my sources ready.
The output seems to work in rxplayer, but I do get a lot of errors (see log below).
Here are my 3 sources (taken from http://dash-mse-test.appspot.com/media.html) :
➜ test-dash $ ffprobe -hide_banner ../test-sources/car/car-20120827-89.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../test-sources/car/car-20120827-89.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6avc1mp41
creation_time : 2012-08-24T03:04:15.000000Z
Duration: 00:03:01.39, start: 0.000000, bitrate: 4202 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080, 171 kb/s, 23.97 fps, 23.97 tbr, 90k tbn, 47.95 tbc (default)
Metadata:
creation_time : 2012-08-24T03:04:15.000000Z
handler_name : VideoHandler
➜ test-dash $ ffprobe -hide_banner ../test-sources/car/car-20120827-88.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../test-sources/car/car-20120827-88.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6avc1mp41
creation_time : 2012-08-27T01:01:28.000000Z
Duration: 00:03:01.43, start: 0.000000, bitrate: 2076 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720, 81 kb/s, 23.97 fps, 23.97 tbr, 90k tbn, 47.95 tbc (default)
Metadata:
creation_time : 2012-08-27T01:01:28.000000Z
handler_name : VideoHandler
➜ test-dash $ ffprobe -hide_banner ../test-sources/car/car-20120827-8b.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../test-sources/car/car-20120827-8b.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6mp41
creation_time : 2012-08-27T01:19:23.000000Z
Duration: 00:03:01.63, start: 0.000000, bitrate: 31 kb/s
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 1 kb/s (default)
Metadata:
creation_time : 2012-08-27T01:19:23.000000Z
handler_name : SoundHandlerAnd here how I am "muxing" them together with an .mpd manifest :
ffmpeg \
-re \
-i ../test-sources/car/car-20120827-88.mp4 \
-i ../test-sources/car/car-20120827-89.mp4 \
-i ../test-sources/car/car-20120827-8d.mp4 \
-map 0:0 \
-map 1:0 \
-map 2:0 \
-c copy \
-bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \
-b_strategy 0 -use_timeline 1 -use_template 1 \
-adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash out.mpdThe generated
mpd
file :<?xml version="1.0" encoding="utf-8"?>
<mpd xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediapresentationduration="PT3M1.3S" minbuffertime="PT10.0S">
<programinformation>
</programinformation>
<period start="PT0.0S">
<adaptationset contenttype="video" segmentalignment="true" bitstreamswitching="true" lang="und">
<representation mimetype="video/mp4" codecs="avc1.4d401f" bandwidth="81397" width="1280" height="720" framerate="45000/1877">
<segmenttemplate timescale="24000" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startnumber="1">
<segmenttimeline>
<s t="0" d="120128"></s>
<s d="120120" r="34"></s>
<s d="29023"></s>
</segmenttimeline>
</segmenttemplate>
</representation>
<representation mimetype="video/mp4" codecs="avc1.640028" bandwidth="171953" width="1920" height="1080" framerate="45000/1877">
<segmenttemplate timescale="24000" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startnumber="1">
<segmenttimeline>
<s t="0" d="121129"></s>
<s d="239239"></s>
<s d="120120" r="32"></s>
<s d="29023"></s>
</segmenttimeline>
</segmenttemplate>
</representation>
</adaptationset>
<adaptationset contenttype="audio" segmentalignment="true" bitstreamswitching="true" lang="und">
<representation mimetype="audio/mp4" codecs="mp4a.40.2" bandwidth="13976" audiosamplingrate="44100">
<audiochannelconfiguration schemeiduri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></audiochannelconfiguration>
<segmenttemplate timescale="44100" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startnumber="1">
<segmenttimeline>
<s t="0" d="219136"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184" r="1"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184" r="1"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184" r="1"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="221184"></s>
<s d="220160"></s>
<s d="63488"></s>
</segmenttimeline>
</segmenttemplate>
</representation>
</adaptationset>
</period>
</mpd>But I get a lot of errors :
➜ test-dash git:(0.1) ✗ ffmpeg \
-re \
-i ../test-sources/car/car-20120827-88.mp4 \
-i ../test-sources/car/car-20120827-89.mp4 \
-i ../test-sources/car/car-20120827-8d.mp4 \
-map 0:0 \
-map 1:0 \
-map 2:0 \
-c copy \
-bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \
-b_strategy 0 -use_timeline 1 -use_template 1 \
-adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash out.mpd
ffmpeg version n4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.0 (GCC)
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../test-sources/car/car-20120827-88.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6avc1mp41
creation_time : 2012-08-27T01:01:28.000000Z
Duration: 00:03:01.43, start: 0.000000, bitrate: 2076 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720, 81 kb/s, 23.97 fps, 23.97 tbr, 90k tbn, 47.95 tbc (default)
Metadata:
creation_time : 2012-08-27T01:01:28.000000Z
handler_name : VideoHandler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '../test-sources/car/car-20120827-89.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6avc1mp41
creation_time : 2012-08-24T03:04:15.000000Z
Duration: 00:03:01.39, start: 0.000000, bitrate: 4202 kb/s
Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080, 171 kb/s, 23.97 fps, 23.97 tbr, 90k tbn, 47.95 tbc (default)
Metadata:
creation_time : 2012-08-24T03:04:15.000000Z
handler_name : VideoHandler
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '../test-sources/car/car-20120827-8d.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6mp41
creation_time : 2012-08-27T00:59:44.000000Z
Duration: 00:03:01.58, start: 0.000000, bitrate: 255 kb/s
Stream #2:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 13 kb/s (default)
Metadata:
creation_time : 2012-08-27T00:59:44.000000Z
handler_name : SoundHandler
[dash @ 0x55b464bb1240] Opening 'init-stream0.m4s' for writing
[dash @ 0x55b464bb1240] Opening 'init-stream1.m4s' for writing
[dash @ 0x55b464bb1240] Opening 'init-stream2.m4s' for writing
Output #0, dash, to 'out.mpd':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6avc1mp41
encoder : Lavf58.29.100
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720, q=2-31, 81 kb/s, 23.97 fps, 23.97 tbr, 24k tbn, 23.98 tbc (default)
Metadata:
creation_time : 2012-08-27T01:01:28.000000Z
handler_name : VideoHandler
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080, q=2-31, 171 kb/s, 23.97 fps, 23.97 tbr, 24k tbn, 23.98 tbc (default)
Metadata:
creation_time : 2012-08-24T03:04:15.000000Z
handler_name : VideoHandler
Stream #0:2(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 13 kb/s (default)
Metadata:
creation_time : 2012-08-27T00:59:44.000000Z
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #1:0 -> #0:1 (copy)
Stream #2:0 -> #0:2 (copy)
Press [q] to stop, [?] for help
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00001.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00001.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00001.m4s.tmp' for writing
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 119119 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00002.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Non-monotonous DTS in output stream 0:1; previous: 119127, current: 119119; changing to 119128. This may result in incorrect timestamps in the output file.
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -1000 / timestamp: 119128 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00002.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00002.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 120120 is out of range for mov/mp4 format
[mp4 @ 0x55b464c425c0] pts has no value
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 239239 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00003.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00003.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing74 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 359359 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00004.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 359359 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00003.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00004.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing81 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 479479 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00005.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 479479 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00004.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00005.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing86 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 599599 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00006.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 599599 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00005.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00006.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing95 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 719719 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00007.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 719719 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00006.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00007.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing53 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 839839 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00008.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 839839 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00007.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00008.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing59 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 959959 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00009.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 959959 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00008.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00009.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing66 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 1080079 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00010.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 1080079 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00009.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00010.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing73 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 1200199 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00011.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 1200199 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00010.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00011.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing82 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 1320319 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00012.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 1320319 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00011.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00012.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing90 bitrate=N/A speed= 1x
...
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 3962959 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00033.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00034.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing06 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 4083079 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00035.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 4083079 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00034.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00035.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing10 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 4203199 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00036.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 4203199 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00035.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00036.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing67 bitrate=N/A speed= 1x
[mp4 @ 0x55b464c3d840] Application provided duration: -8 / timestamp: 4323319 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream0-00037.m4s.tmp' for writing
[mp4 @ 0x55b464c425c0] Application provided duration: -8 / timestamp: 4323319 is out of range for mov/mp4 format
[dash @ 0x55b464bb1240] Opening 'chunk-stream1-00036.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'chunk-stream2-00037.m4s.tmp' for writing
[dash @ 0x55b464bb1240] Opening 'out.mpd.tmp' for writing18 bitrate=N/A speed= 1x
frame= 4350 fps= 24 q=-1.0 Lq=-1.0 size=N/A time=00:03:01.55 bitrate=N/A speed= 1x
video:138926kB audio:5621kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown -
WebRTC books – a brief review
1er janvier 2014, par silviaI just finished reading Rob Manson’s awesome book “Getting Started with WebRTC” and I can highly recommend it for any Web developer who is interested in WebRTC.
Rob explains very clearly how to create your first video, audio or data peer-connection using WebRTC in current Google Chrome or Firefox (I think it also now applies to Opera, though that wasn’t the case when his book was published). He makes available example code, so you can replicate it in your own Web application easily, including the setup of a signalling server. He also points out that you need a ICE (STUN/TURN) server to punch through firewalls and gives recommendations for what software is available, but stops short of explaining how to set them up.
Rob’s focus is very much on the features required in a typical Web application :
- video calls
- audio calls
- text chats
- file sharing
In fact, he provides the most in-depth demo of how to set up a good file sharing interface I have come across.
Rob then also extends his introduction to WebRTC to two key application areas : education and team communication. His recommendations are spot on and required reading for anyone developing applications in these spaces.
—
Before Rob’s book, I have also read Alan Johnson and Dan Burnett’s “WebRTC” book on APIs and RTCWEB protocols of the HTML5 Real-Time Web.
Alan and Dan’s book was written more than a year ago and explains that state of standardisation at that time. It’s probably a little out-dated now, but it still gives you good foundations on why some decisions were made the way they are and what are contentious issues (some of which still remain). If you really want to understand what happens behind the scenes when you call certain functions in the WebRTC APIs of browsers, then this is for you.
Alan and Dan’s book explains in more details than Rob’s book how IP addresses of communication partners are found, how firewall holepunching works, how sessions get negotiated, and how the standards process works. It’s probably less useful to a Web developer who just wants to implement video call functionality into their Web application, though if something goes wrong you may find yourself digging into the details of SDP, SRTP, DTLS, and other cryptic abbreviations of protocols that all need to work together to get a WebRTC call working.
—
Overall, both books are worthwhile and cover different aspects of WebRTC that you will stumble across if you are directly dealing with WebRTC code.