Recherche avancée

Médias (91)

Autres articles (16)

  • Les formats acceptés

    28 janvier 2010, par

    Les commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
    ffmpeg -codecs ffmpeg -formats
    Les format videos acceptés en entrée
    Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
    Les formats vidéos de sortie possibles
    Dans un premier temps on (...)

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • La sauvegarde automatique de canaux SPIP

    1er avril 2010, par

    Dans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
    Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...)

Sur d’autres sites (3389)

  • Stream RTP packets to FFMPEG [duplicate]

    21 mars 2017, par Johnathan Kanarek

    This question already has an answer here :

    I get RTP stream from WebRTC server (I used mediasoup) using node.js and I get the decrypted RTP packets raw data from the stream. I want to forward this RTP data to ffmpeg. I create SDP file that describes both the audio and video streams and send the packets through UDP.
    The SDP :

    v=0
    o=mediasoup 7199daf55e496b370e36cd1d25b1ef5b9dff6858 0 IN IP4 192.168.193.182
    s=7199daf55e496b370e36cd1d25b1ef5b9dff6858
    c=IN IP4 192.168.193.182
    t=0 0
    m=audio 33400 RTP/AVP 111
    a=rtpmap:111 /opus/48000
    a=fmtp:111 minptime=10;useinbandfec=1
    a=rtcp-fb:111 transport-cc
    a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
    a=mid:audio
    a=recvonly
    m=video 33402 RTP/AVP 100
    a=rtpmap:100 /VP8/90000
    a=rtcp-fb:100 ccm fir
    a=rtcp-fb:100 nack
    a=rtcp-fb:100 nack pli
    a=rtcp-fb:100 goog-remb
    a=rtcp-fb:100 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=recvonly
    a=rtcp-mux

    The command :
    ffmpeg -loglevel debug -analyzeduration 2147483647 -probesize 2147483647 -protocol_whitelist file,crypto,udp,rtp -re -vcodec vp8 -acodec opus -i test.sdp -vcodec h264 -acodec aac -y output.mp4

    The 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 '-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,udp,rtp'.

    Reading option '-re' ...
    matched as option 're' (read input at native frame rate) with argument '1'.

    Reading option '-vcodec' ...
    matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'vp8'.

    Reading option '-acodec' ...
    matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'opus'.
    Reading option '-i' ... matched as input file with argument 'test.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 '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
    Reading option 'output.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 test.sdp.
    Applying option re (read input at native frame rate) with argument 1.
    Applying option vcodec (force video codec ('copy' to copy stream)) with argument vp8.
    Applying option acodec (force audio codec ('copy' to copy stream)) with argument opus.
    Successfully parsed a group of options.
    Opening an input file: test.sdp.
    [sdp @ 0xb1ef00] Format sdp probed with size=2048 and score=50
    [sdp @ 0xb1ef00] audio codec set to: (null)
    [sdp @ 0xb1ef00] audio samplerate set to: 44100
    [sdp @ 0xb1ef00] audio channels set to: 1
    [sdp @ 0xb1ef00] video codec set to: (null)
    [udp @ 0xb21940] end receive buffer size reported is 131072
    [udp @ 0xb21660] end receive buffer size reported is 131072
    [sdp @ 0xb1ef00] setting jitter buffer size to 500
    [udp @ 0xb21da0] end receive buffer size reported is 131072
    [udp @ 0xb22060] end receive buffer size reported is 131072
    [sdp @ 0xb1ef00] setting jitter buffer size to 500

    [sdp @ 0xb1ef00] Before avformat_find_stream_info() pos: 889 bytes read:889 seeks:0 nb_streams:2

    [vp8 @ 0xb27600] Header size larger than data provided

       Last message repeated 2 times
    [sdp @ 0xb1ef00] Non-increasing DTS in stream 1: packet 2 with DTS 0, packet 3 with DTS 0
    [vp8 @ 0xb27600] Header size larger than data provided

    ... repeats many times until I kill the socket ...

       Last message repeated 1 times
    [sdp @ 0xb1ef00] Non-increasing DTS in stream 1: packet 273 with DTS 553050, packet 274 with DTS 553050
    [vp8 @ 0xb27600] Header size larger than data provided

    received id=7199daf55e496b370e36cd1d25b1ef5b9dff6858 type=bye
    PeerConnection close. id=7199daf55e496b370e36cd1d25b1ef5b9dff6858
    -- PeerConnection.closed,  err: undefined
    -- peers in the room = 0
    [sdp @ 0xb1ef00] decoding for stream 1 failed
    [sdp @ 0xb1ef00] Could not find codec parameters for stream 1 (Video: vp8, 1 reference frame, yuv420p): unspecified size
    Consider increasing the value for the 'analyzeduration' and 'probesize' options
    [sdp @ 0xb1ef00] After avformat_find_stream_info() pos: 889 bytes read:889 seeks:0 frames:584
    Input #0, sdp, from 'test.sdp':
     Metadata:
       title           : 7199daf55e496b370e36cd1d25b1ef5b9dff6858
     Duration: N/A, start: 0.000000, bitrate: N/A
       Stream #0:0, 309, 1/90000: Audio: opus, 48000 Hz, mono, fltp
       Stream #0:1, 275, 1/90000: Video: vp8, 1 reference frame, yuv420p, 90k tbr, 90k tbn, 90k tbc
    Successfully opened the file.
    Parsing a group of options: output file output.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: output.mp4.
    Matched encoder 'libx264' for codec 'h264'.

    [file @ 0xbc56e0]
    Setting default whitelist 'file,crypto'

    Successfully opened the file.

    detected 1 logical cores

    [graph 0 input from stream 0:1 @ 0xb1eca0]
    Setting 'video_size' to value '0x0'

    [buffer @ 0xbc54e0]
    Unable to parse option value "0x0" as image size

    [graph 0 input from stream 0:1 @ 0xb1eca0]
    Setting 'pix_fmt' to value '0'

    [graph 0 input from stream 0:1 @ 0xb1eca0]
    Setting 'time_base' to value '1/90000'

    [graph 0 input from stream 0:1 @ 0xb1eca0] Setting 'pixel_aspect' to value '0/1'
    [graph 0 input from stream 0:1 @ 0xb1eca0] Setting 'sws_param' to value 'flags=2'
    [graph 0 input from stream 0:1 @ 0xb1eca0] Setting 'frame_rate' to value '90000/1'
    [buffer @ 0xbc54e0] Unable to parse option value "0x0" as image size
    [buffer @ 0xbc54e0] Error setting option video_size to value 0x0.
    [graph 0 input from stream 0:1 @ 0xb1eca0] Error applying options to the filter.
    Error opening filters!
    [AVIOContext @ 0xbc57c0] Statistics: 0 seeks, 0 writeouts

    [AVIOContext @ 0xb1f8c0]
    Statistics: 889 bytes read, 0 seeks

    As you can see, at the beginning of the log the SDP parsed without recognizing the codecs :

    Opening an input file: test.sdp.
    [sdp @ 0xb1ef00] Format sdp probed with size=2048 and score=50
    [sdp @ 0xb1ef00] audio codec set to: (null)
    [sdp @ 0xb1ef00] audio samplerate set to: 44100
    [sdp @ 0xb1ef00] audio channels set to: 1
    [sdp @ 0xb1ef00] video codec set to: (null)

    Then it’s trying to read the packets from the sockets.
    Only when I close the socket, ffmpeg continues to parse the SDP, this time finding the correct codec :

    Opening an input file: test.sdp.
    [sdp @ 0xb1ef00] Format sdp probed with size=2048 and score=50
    [sdp @ 0xb1ef00] audio codec set to: (null)
    [sdp @ 0xb1ef00] audio samplerate set to: 44100
    [sdp @ 0xb1ef00] audio channels set to: 1
    [sdp @ 0xb1ef00] video codec set to: (null)

    I suspect that the "Non-increasing DTS" and "Header size larger than data provided" errors are caused by wrong parsing of the packets due to usage with the wrong codec.

    I checked the SDP order and it seems the same as in other examples I have.

    Can someone suggest an explanation ?

    BTW, audio only works fine, but I guess it’s because of the simplicity of OPUS.

    Thanks.

  • Streaming RTP packets using SDP to ffmpeg

    4 avril 2017, par Johnathan Kanarek

    I 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=sendrecv

    Command :

    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 helped

    I 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.691

    Thanks,
    Johnathan Kanarek

  • How to verify user permissions – Introducing the Piwik Platform

    9 novembre 2014, par Thomas Steur — Development

    This is the next post of our blog series where we introduce the capabilities of the Piwik platform (our previous post was How to make your plugin multilingual). This time you’ll learn how to verify user permissions. For this tutorial you will need to have basic knowledge of PHP and the Piwik platform.

    When should a plugin verify permissions ?

    Usually you want to do this before executing any action – such as deleting or fetching data – and before rendering any sensitive information that should not be accessible by everyone. For instance in an API method or Controller action. You sometimes also need to verify permissions before registering menu items or widgets.

    How does Piwik’s user management work ?

    It is quite simple as it only differentiates between a few roles : View permission, Admin permission and Super User permission. If you manage multiple websites with Piwik a user can be assigned to different roles as a user might have no permission for some websites but view or admin permission for another set of websites.

    Worth mentioning is that roles inherit from each other. This means the role admin automatically includes the role view and a super user automatically covers the view and admin role.

    Getting started

    In this post, we assume that you have already 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.

    Verifying user permissions

    To protect your data the platform offers many convenient methods in the \Piwik\Piwik class. There you will find methods that either start with check, is or has. While methods that start with check throw an exception in case a condition is not met, the other methods return a boolean true or false.

    Use methods that throw an exception if you want to stop any further execution in case a user does not have an appropriate role. The platform will catch the exception and display an error message or ask the user to log in.

    1. public function deleteAllMessages()
    2. {
    3.     // delete messages only if user has super user access, otherwise show an error message
    4.     Piwik::checkUserSuperUserAccess();
    5.  
    6.     $this->getModel()->deleteAllMessages();
    7. }

    Télécharger

    Use methods that return a boolean for instance when registering menu items or widgets.

    1. public function configureAdminMenu(MenuAdmin $menu)
    2. {
    3.     if (Piwik::hasUserSuperUserAccess()) {
    4.         $menu->addPlatformItem('Plugins', $this->urlForDefaultAction());
    5.     }
    6. }

    Télécharger

    It is important to be aware that just because the menu item won’t be displayed in the UI a user can still open the registered URL manually. Therefore you have to check for permissions in the actual controller action as well.

    View permission

    A user having a view permission should be only able to view reports but not make any changes apart from his personal settings. The methods that end with UserHasSomeViewAccess make sure a user has at least view permission for one website whereas the methods *UserHasViewAccess($idSites = array(1,2,3)) check whether a user has view access for all of the given websites.

    1. Piwik::checkUserHasSomeViewAccess();
    2.  
    3. Piwik::checkUserHasViewAccess($idSites = array(1,2,3));

    Télécharger

    As a plugin developer you would usually use the latter example to verify the permissions for specific websites. Use the first example in case you develop something like an “All Websites Dashboard” where you only want to make sure the user has a view permission for at least one website.

    Admin permission

    A user having an admin permission cannot only view reports but also change website related settings. The methods to check for this role are similar to the ones before, just swap the term View with Admin.

    1. Piwik::checkUserHasSomeAdminAccess();
    2.  
    3. Piwik::checkUserHasAdminAccess($idSites = array(1,2,3));

    Télécharger

    Super user permission

    A user having the super user permission is allowed to access all of the data stored in Piwik and change any settings. To check if a user has this role use one of the methods that end with UserSuperUserAccess.

    Piwik::checkUserHasSuperUserAccess();

    As a plugin developer you would check for this permission for instance in places where your plugin shows an activity log over all users or where it offers the possibility to change any system wide settings.

    Getting information about the currently logged in user

    Sometimes you might want to know which user is currently logged in. This can be useful if you want to persist user related information in the database or if you want to send an email to the currently logged in user. You can easily get this information by calling the following methods :

    1. $login = Piwik::getCurrentUserLogin()
    2. $email = Piwik::getCurrentUserEmail()

    Télécharger

    Advanced features

    Of course there is more that you can do. For instance you can verify whether a user is an anonymous user or whether a user has a specific role. You can also perform any operation in the context of a super user even if the current user does not have this role. Would you like to know more about those features ? Check out the Piwik class reference, the Security guide and the Manage Users user guide.

    If you have any feedback regarding our APIs or our guides in the Developer Zone feel free to send it to us.