
Recherche avancée
Médias (1)
-
Bug de détection d’ogg
22 mars 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Video
Autres articles (57)
-
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
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 -
Support audio et vidéo HTML5
10 avril 2011MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)
Sur d’autres sites (8461)
-
Merge commit ’b34c6cd57a2e8aad5f773aea933f77883de320ec’
3 avril 2017, par Clément Bœsch -
Streaming RTP packets using SDP to ffmpeg
4 avril 2017, par Johnathan KanarekI have RTP packets in node.js server and I want to forward them to ffmpeg.
I generate SDP files in the node.js server side and execute ffmpeg with the SDP as input.SDP :
v=0
o=mediasoup 21881725401d4e8d56cbd79694c7e2b6e6cacb4a 0 IN IP4 192.168.193.182
s=21881725401d4e8d56cbd79694c7e2b6e6cacb4a
c=IN IP4 192.168.193.182
t=0 0
a=group:LS video audio
m=video 33404 RTP/SAVPF 107
a=rtpmap:107 H264/90000
a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=control:track0
a=rtcp-fb:107 ccm fir
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=rtcp-fb:107 transport-cc
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=mid:video
a=sendrecv
m=audio 33402 RTP/SAVPF 111
a=rtpmap:111 opus/48000
a=fmtp:111 minptime=10;useinbandfec=1
a=control:track1
a=rtcp-fb:111 transport-cc
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=mid:audio
a=sendrecvCommand :
ffmpeg -max_delay 5000 -reorder_queue_size 16384 -protocol_whitelist file,crypto,udp,rtp -re -i input.sdp -vcodec copy -acodec aac -y output.mp4
Same with RTMP
ffmpeg -max_delay 5000 -reorder_queue_size 16384 -protocol_whitelist file,crypto,udp,rtp -re -i input.sdp -vcodec copy -acodec aac -f flv rtmp://127.0.0.1:1935/live/myStream
I get weird video that plays some vidoe, then get stuck, then plays some audio, back to video and so on, it never plays both video and audio together.
BTW, when I created separate SDP files for the video and the audio and stream them as two inputs into the same output, I get valid stream but the audio is not in sync (about a second offset).
ffmpeg -max_delay 5000 -reorder_queue_size 16384 -protocol_whitelist file,crypto,udp,rtp -re -i video.0.sdp -max_delay 5000 -reorder_queue_size 16384 -protocol_whitelist file,crypto,udp,rtp -re -i audio.1.sdp -vcodec copy -acodec aac -shortest -y output.mp4
What is wrong with my SDP ?
I tried changing analyzeduration, probesize, rtbufsize, vsync, framerate,
I even tried to remap the streams using -map 0:v -map 0:a,
nothing helpedI also tried to use RTSP server, see log :
ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-11)
configuration: --prefix=/opt/kaltura/ffmpeg-3.2 --libdir=/opt/kaltura/ffmpeg-3.2/lib --shlibdir=/opt/kaltura/ffmpeg-3.2/lib --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC -I/opt/kaltura/include' --extra-ldflags=-L/opt/kaltura/lib --disable-devices --enable-bzlib --enable-libgsm --enable-libmp3lame --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libx265 --enable-avisynth --enable-libxvid --enable-filter=movie --enable-avfilter --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libvpx --enable-libspeex --enable-libass --enable-postproc --enable-pthreads --enable-static --enable-shared --enable-gpl --disable-debug --disable-optimizations --enable-gpl --enable-pthreads --enable-swscale --enable-vdpau --enable-bzlib --disable-devices --enable-filter=movie --enable-version3 --enable-indev=lavfi --enable-x11grab
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.100 / 57. 64.100
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Splitting the commandline.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-max_delay' ... matched as AVOption 'max_delay' with argument '500000'.
Reading option '-reorder_queue_size' ... matched as AVOption 'reorder_queue_size' with argument '16384'.
Reading option '-analyzeduration' ... matched as AVOption 'analyzeduration' with argument '2147483647'.
Reading option '-probesize' ... matched as AVOption 'probesize' with argument '2147483647'.
Reading option '-protocol_whitelist' ... matched as AVOption 'protocol_whitelist' with argument 'file,crypto,tcp,udp,rtp'.
Reading option '-re' ... matched as option 're' (read input at native frame rate) with argument '1'.
Reading option '-i' ... matched as input file with argument 'rtsp://192.168.193.182:5000/IcL8tHJdU9oWEK3rAAAA.sdp'.
Reading option '-vcodec' ... matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'h264'.
Reading option '-acodec' ... matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'aac'.
Reading option '-max_interleave_delta' ... matched as AVOption 'max_interleave_delta' with argument '30000000'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '/opt/mediasoup_sample/recordings/IcL8tHJdU9oWEK3rAAAA.mp4' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file rtsp://192.168.193.182:5000/IcL8tHJdU9oWEK3rAAAA.sdp.
Applying option re (read input at native frame rate) with argument 1.
Successfully parsed a group of options.
Opening an input file: rtsp://192.168.193.182:5000/IcL8tHJdU9oWEK3rAAAA.sdp.
[rtsp @ 0x19b4fa0] SDP:
v=0
o=mediasoup IcL8tHJdU9oWEK3rAAAA 0 IN IP4 192.168.193.182
s=IcL8tHJdU9oWEK3rAAAA
c=IN IP4 192.168.193.182
t=0 0
a=group:LS audio video
m=audio 0 RTP/SAVPF 111
a=rtpmap:111 opus/48000
a=fmtp:111 minptime=10;useinbandfec=1
a=control:streamid=0
a=rtcp-fb:111 transport-cc
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=mid:audio
a=sendrecv
a=rtcp-mux
m=video 0 RTP/SAVPF 107
a=rtpmap:107 H264/90000
a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=control:streamid=1
a=rtcp-fb:107 ccm fir
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=rtcp-fb:107 transport-cc
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=mid:video
a=sendrecv
a=rtcp-mux
[rtsp @ 0x19b4fa0] audio codec set to: opus
[rtsp @ 0x19b4fa0] audio samplerate set to: 48000
[rtsp @ 0x19b4fa0] audio channels set to: 1
[rtsp @ 0x19b4fa0] video codec set to: h264
[rtsp @ 0x19b4fa0] RTP Packetization Mode: 1
[rtsp @ 0x19b4fa0] RTP Profile IDC: 42 Profile IOP: e0 Level: 1f
[udp @ 0x19b5d60] end receive buffer size reported is 131072
[udp @ 0x19ba020] end receive buffer size reported is 131072
[rtsp @ 0x19b4fa0] setting jitter buffer size to 16384
[udp @ 0x19b7a00] end receive buffer size reported is 131072
[udp @ 0x19daca0] end receive buffer size reported is 131072
[rtsp @ 0x19b4fa0] setting jitter buffer size to 16384
[rtsp @ 0x19b4fa0] hello state=0
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] nal_unit_type: 5, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] no frame!
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] no frame!
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
... a lot of the same ...
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] non-existing PPS 0 referenced
[h264 @ 0x19b9ac0] decode_slice_header error
[h264 @ 0x19b9ac0] no frame!
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 7, nal_ref_idc: 3
[h264 @ 0x19b9ac0] nal_unit_type: 8, nal_ref_idc: 3
[h264 @ 0x19b9ac0] nal_unit_type: 5, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] Reinit context to 640x480, pix_fmt: yuv420p
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x19b9ac0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x19b9ac0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[rtsp @ 0x19b4fa0] All info found
Input #0, rtsp, from 'rtsp://192.168.193.182:5000/IcL8tHJdU9oWEK3rAAAA.sdp':
Metadata:
title : IcL8tHJdU9oWEK3rAAAA
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0, 146, 1/48000: Audio: opus, 48000 Hz, mono, fltp
Stream #0:1, 88, 1/90000: Video: h264 (Constrained Baseline), 1 reference frame, yuv420p(progressive, left), 640x480, 0/1, 30 fps, 30 tbr, 90k tbn, 60 tbc
Successfully opened the file.
Parsing a group of options: output file /opt/mediasoup_sample/recordings/IcL8tHJdU9oWEK3rAAAA.mp4.
Applying option vcodec (force video codec ('copy' to copy stream)) with argument h264.
Applying option acodec (force audio codec ('copy' to copy stream)) with argument aac.
Successfully parsed a group of options.
Opening an output file: /opt/mediasoup_sample/recordings/IcL8tHJdU9oWEK3rAAAA.mp4.
Matched encoder 'libx264' for codec 'h264'.
[file @ 0x1b7bb80] Setting default whitelist 'file,crypto'
Successfully opened the file.
detected 1 logical cores
[graph 0 input from stream 0:1 @ 0x1b788c0] Setting 'video_size' to value '640x480'
[graph 0 input from stream 0:1 @ 0x1b788c0] Setting 'pix_fmt' to value '0'
[graph 0 input from stream 0:1 @ 0x1b788c0] Setting 'time_base' to value '1/90000'
[graph 0 input from stream 0:1 @ 0x1b788c0] Setting 'pixel_aspect' to value '0/1'
[graph 0 input from stream 0:1 @ 0x1b788c0] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:1 @ 0x1b788c0] Setting 'frame_rate' to value '30/1'
[graph 0 input from stream 0:1 @ 0x1b788c0] w:640 h:480 pixfmt:yuv420p tb:1/90000 fr:30/1 sar:0/1 sws_param:flags=2
[format @ 0x1a78e00] compat: called with args=[yuv420p|yuvj420p|yuv422p|yuvj422p|yuv444p|yuvj444p|nv12|nv16]
[format @ 0x1a78e00] Setting 'pix_fmts' to value 'yuv420p|yuvj420p|yuv422p|yuvj422p|yuv444p|yuvj444p|nv12|nv16'
[AVFilterGraph @ 0x19ba180] query_formats: 4 queried, 3 merged, 0 already done, 0 delayed
[graph 1 input from stream 0:0 @ 0x1b89ae0] Setting 'time_base' to value '1/48000'
[graph 1 input from stream 0:0 @ 0x1b89ae0] Setting 'sample_rate' to value '48000'
[graph 1 input from stream 0:0 @ 0x1b89ae0] Setting 'sample_fmt' to value 'fltp'
[graph 1 input from stream 0:0 @ 0x1b89ae0] Setting 'channel_layout' to value '0x4'
[graph 1 input from stream 0:0 @ 0x1b89ae0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x4
[audio format for output stream 0:1 @ 0x1a7aa00] Setting 'sample_fmts' to value 'fltp'
[audio format for output stream 0:1 @ 0x1a7aa00] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000|7350'
[AVFilterGraph @ 0x1a7a6e0] query_formats: 4 queried, 9 merged, 0 already done, 0 delayed
[h264 @ 0x1b779a0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x1b779a0] nal_unit_type: 7, nal_ref_idc: 3
[h264 @ 0x1b779a0] nal_unit_type: 8, nal_ref_idc: 3
[h264 @ 0x1b779a0] Ignoring NAL type 9 in extradata
[libx264 @ 0x1a6b5e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x1a6b5e0] profile High, level 3.0
[libx264 @ 0x1a6b5e0] 264 - core 140 - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/opt/mediasoup_sample/recordings/IcL8tHJdU9oWEK3rAAAA.mp4':
Metadata:
title : IcL8tHJdU9oWEK3rAAAA
encoder : Lavf57.56.100
Stream #0:0, 0, 1/15360: Video: h264 (libx264), 1 reference frame ([33][0][0][0] / 0x0021), yuv420p(left), 640x480, 0/1, q=-1--1, 30 fps, 15360 tbn, 30 tbc
Metadata:
encoder : Lavc57.64.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream #0:1, 0, 1/48000: Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, mono, fltp, delay 1024, 69 kb/s
Metadata:
encoder : Lavc57.64.100 aac
Stream mapping:
Stream #0:1 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:0 -> #0:1 (opus (native) -> aac (native))
Press [q] to stop, [?] for help
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
Last message repeated 1 times
[SWR @ 0x1af80a0] Using fltp internally between filters
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
Last message repeated 48 times
[h264 @ 0x1b779a0] nal_unit_type: 5, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x1b779a0] Reinit context to 640x480, pix_fmt: yuv420p
*** 67 dup!
[libx264 @ 0x1a6b5e0] frame= 0 QP=16.76 NAL=3 Slice:I Poc:0 I:1200 P:0 SKIP:0 size=29147 bytes
[libx264 @ 0x1a6b5e0] frame= 1 QP=15.49 NAL=2 Slice:P Poc:8 I:1 P:198 SKIP:1001 size=588 bytes
... a lot of the same ...
[libx264 @ 0x1a6b5e0] frame= 25 QP=16.64 NAL=2 Slice:P Poc:56 I:0 P:15 SKIP:1185 size=72 bytes
[libx264 @ 0x1a6b5e0] frame= 26 QP=27.00 NAL=2 Slice:B Poc:52 I:0 P:18 SKIP:1182 size=44 bytes
frame= 68 fps= 38 q=29.0 size= 32kB time=00:00:00.80 bitrate= 332.6kbits/s dup=67 drop=0 speed=0.453x
[h264 @ 0x1b779a0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x1b779a0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
[h264 @ 0x1b779a0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x1b779a0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
... a lot of the same ...
*** dropping frame 68 from stream 0 at ts 64
[h264 @ 0x1b779a0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x1b779a0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
*** dropping frame 68 from stream 0 at ts 65
[libx264 @ 0x1a6b5e0] frame= 27 QP=29.00 NAL=0 Slice:B Poc:50 I:0 P:1 SKIP:1199 size=19 bytes
[h264 @ 0x1b779a0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x1b779a0] nal_unit_type: 1, nal_ref_idc: 3
Last message repeated 3 times
... a lot of the same ...
[libx264 @ 0x1a6b5e0] frame= 362 QP=24.00 NAL=2 Slice:B Poc:208 I:0 P:6 SKIP:1194 size=30 bytes
[libx264 @ 0x1a6b5e0] frame= 363 QP=26.00 NAL=0 Slice:B Poc:206 I:0 P:0 SKIP:1200 size=19 bytes
[h264 @ 0x1b779a0] nal_unit_type: 1, nal_ref_idc: 3
[h264 @ 0x1b779a0] concealing 880 DC, 880 AC, 880 MV errors in P frame
*** 1 dup!
[libx264 @ 0x1a6b5e0] frame= 364 QP=26.00 NAL=0 Slice:B Poc:210 I:0 P:0 SKIP:1200 size=19 bytes
[libx264 @ 0x1a6b5e0] frame= 365 QP=16.71 NAL=2 Slice:P Poc:220 I:0 P:8 SKIP:1192 size=51 bytes
frame= 407 fps= 16 q=29.0 size= 306kB time=00:00:17.48 bitrate= 143.2kbits/s dup=329 drop=65 speed=0.675x
[rtsp @ 0x19b4fa0] max delay reached. need to consume packet
[rtsp @ 0x19b4fa0] RTP: missed 2 packets
[h264 @ 0x1b779a0] nal_unit_type: 9, nal_ref_idc: 0
[h264 @ 0x1b779a0] nal_unit_type: 1, nal_ref_idc: 3
[h264 @ 0x1b779a0] concealing 920 DC, 920 AC, 920 MV errors in P frame
*** 1 dup!
... a lot of the same ...
[libx264 @ 0x1a6b5e0] frame= 420 QP=25.50 NAL=0 Slice:B Poc:322 I:0 P:280 SKIP:920 size=282 bytes
[libx264 @ 0x1a6b5e0] frame= 421 QP=24.51 NAL=2 Slice:P Poc:326 I:0 P:43 SKIP:1157 size=112 bytes
[aac @ 0x1a79de0] Trying to remove 320 more samples than there are in the queue
frame= 422 fps=8.7 q=29.0 Lsize= 379kB time=00:00:17.54 bitrate= 176.7kbits/s dup=338 drop=65 speed=0.36x
video:240kB audio:123kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.257356%
Input file #0 (rtsp://192.168.193.182:5000/IcL8tHJdU9oWEK3rAAAA.sdp):
Input stream #0:0 (audio): 725 packets read (54182 bytes); 725 frames decoded (696000 samples);
Input stream #0:1 (video): 150 packets read (203332 bytes); 150 frames decoded;
Total: 875 packets (257514 bytes) demuxed
Output file #0 (/opt/mediasoup_sample/recordings/IcL8tHJdU9oWEK3rAAAA.mp4):
Output stream #0:0 (video): 422 frames encoded; 422 packets muxed (245681 bytes);
Output stream #0:1 (audio): 680 frames encoded (696000 samples); 681 packets muxed (126146 bytes);
Total: 1103 packets (371827 bytes) muxed
875 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x1a6c4e0] Statistics: 60 seeks, 1148 writeouts
[libx264 @ 0x1a6b5e0] frame I:3 Avg QP:17.89 size: 17026
[libx264 @ 0x1a6b5e0] frame P:120 Avg QP:18.27 size: 1244
[libx264 @ 0x1a6b5e0] frame B:299 Avg QP:24.50 size: 149
[libx264 @ 0x1a6b5e0] consecutive B-frames: 4.7% 1.9% 1.4% 91.9%
[libx264 @ 0x1a6b5e0] mb I I16..4: 19.9% 48.9% 31.1%
[libx264 @ 0x1a6b5e0] mb P I16..4: 2.1% 5.2% 0.8% P16..4: 10.3% 1.2% 0.6% 0.0% 0.0% skip:79.7%
[libx264 @ 0x1a6b5e0] mb B I16..4: 0.1% 0.1% 0.0% B16..8: 5.4% 0.2% 0.0% direct: 0.8% skip:93.5% L0:56.3% L1:43.1% BI: 0.5%
[libx264 @ 0x1a6b5e0] 8x8 transform intra:60.5% inter:62.3%
[libx264 @ 0x1a6b5e0] coded y,uvDC,uvAC intra: 40.2% 49.9% 19.0% inter: 0.7% 3.2% 0.1%
[libx264 @ 0x1a6b5e0] i16 v,h,dc,p: 26% 30% 9% 36%
[libx264 @ 0x1a6b5e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 27% 13% 3% 2% 2% 3% 3% 3%
[libx264 @ 0x1a6b5e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 38% 28% 11% 3% 5% 4% 5% 4% 3%
[libx264 @ 0x1a6b5e0] i8c dc,h,v,p: 38% 28% 23% 12%
[libx264 @ 0x1a6b5e0] Weighted P-Frames: Y:2.5% UV:2.5%
[libx264 @ 0x1a6b5e0] ref P L0: 82.7% 3.3% 10.6% 3.3% 0.0%
[libx264 @ 0x1a6b5e0] ref B L0: 86.6% 12.6% 0.7%
[libx264 @ 0x1a6b5e0] ref B L1: 96.5% 3.5%
[libx264 @ 0x1a6b5e0] kb/s:139.34
[aac @ 0x1a79de0] Qavg: 212.691Thanks,
Johnathan Kanarek -
How to write unit tests for your plugin – Introducing the Piwik Platform
17 novembre 2014, par Thomas Steur — DevelopmentThis is the next post of our blog series where we introduce the capabilities of the Piwik platform (our previous post was How to verify user permissions). This time you’ll learn how to write unit tests in Piwik. For this tutorial you will need to have basic knowledge of PHP, PHPUnit and the Piwik platform.
When is a test a unit test ?
There are many different opinions on this and it can be sometimes hard to decide. At Piwik we consider a test as a unit test if only a single method or class is being tested and if a test does not have a dependency to the filesystem, web, config, database or to any other plugin.
If a test is slow it can be an indicator that it is not a unit test. “Slow” is of course a bit vague. We will cover how to write other type of tests, such as integration tests, in one of our next blog posts.
Getting started
In this post, we assume that you have already installed Piwik 2.9.0 or later via git, set up your development environment and created a plugin. If not, visit the Piwik Developer Zone where you’ll find the tutorial Setting up Piwik and other Guides that help you to develop a plugin.
Let’s create a unit test
We start by using the Piwik Console to create a new unit test :
./console generate:test --testtype unit
The command will ask you to enter the name of the plugin the created test should belong to. I will use the plugin name “Insights”. Next it will ask you for the name of the test. Here you usually enter the name of the class you want to test. I will use “Widgets” in this example. There should now be a file
plugins/Insights/tests/Unit/WidgetsTest.php
which contains already an example to get you started easily :- /**
- * @group Insights
- * @group WidgetsTest
- * @group Plugins
- */
- class WidgetsTest extends \PHPUnit_Framework_TestCase
- {
- public function testSimpleAddition()
- {
- $this->assertEquals(2, 1+1);
- }
- }
We don’t want to cover how you should write your unit test. This is totally up to you. If you have no experience in writing unit tests yet, we recommend to read articles on the topic, or a book, or to watch videos or anything else that will help you learn best.
Running a test
To run a test we will use the command
tests:run
which allows you to execute a test suite, a specific file or a group of tests.To verify whether the created test works we will run it as follows :
./console tests:run WidgetsTest
This will run all tests having the group
WidgetsTest
. As other tests can use the same group you might want to pass the path to your test file instead :./console tests:run plugins/Insights/tests/Unit/Widgets.php
If you want to run all tests within your plugin pass the name of your plugin as an argument :
./console tests:run insights
Of course you can also define multiple arguments :
./console tests:run insights WidgetsTest
This will execute all tests within the insights plugin having the group WidgetsTest. If you only want to run unit tests within your plugin you can do the following :
./console tests:run insights unit
Advanced features
Isn’t it easy to create a unit test ? We never even created a file ! You can accomplish even more if you want : You can generate other type of tests, you can run tests on Amazon’s AWS and more. Unfortunately, not everything is documented yet so we recommend to discover more features by executing the commands
./console list tests
and./console help tests:run
.If you have any feedback regarding our APIs or our guides in the Developer Zone feel free to send it to us.