Recherche avancée

Médias (1)

Mot : - Tags -/ticket

Autres articles (51)

  • Contribute to a better visual interface

    13 avril 2011

    MediaSPIP is based on a system of themes and templates. Templates define the placement of information on the page, and can be adapted to a wide range of uses. Themes define the overall graphic appearance of the site.
    Anyone can submit a new graphic theme or template and make it available to the MediaSPIP community.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • Les notifications de la ferme

    1er décembre 2010, par

    Afin d’assurer une gestion correcte de la ferme, il est nécessaire de notifier plusieurs choses lors d’actions spécifiques à la fois à l’utilisateur mais également à l’ensemble des administrateurs de la ferme.
    Les notifications de changement de statut
    Lors d’un changement de statut d’une instance, l’ensemble des administrateurs de la ferme doivent être notifiés de cette modification ainsi que l’utilisateur administrateur de l’instance.
    À la demande d’un canal
    Passage au statut "publie"
    Passage au (...)

Sur d’autres sites (6311)

  • How to get rtp(javacv ffmpeg) stream from VLC as client

    15 avril 2015, par Sezertt

    I am trying to play rtp stream from vlc player which I created using javacv. Here is the code :

           FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("rtsp://10.6.0.147:554/ufirststream");
           frameGrabber.start();  // First I take another stream

           FFmpegFrameRecorder frameRecorder = new FFmpegFrameRecorder("rtp://239.31.31.69:4433", frameGrabber.getImageWidth(), frameGrabber.getImageHeight());

           frameRecorder.setFormat("rtp");
           frameRecorder.setPixelFormat(AV_PIX_FMT_YUV420P);
           frameRecorder.setVideoCodec(AV_CODEC_ID_MPEG2VIDEO); <-- AV_CODEC_ID_H264
           frameRecorder.setFrameRate(25);          
           frameRecorder.setVideoBitrate(1024); <--1024*1024*2            
           frameRecorder.start();
           while (true) {
               frameRecorder.record(frameGrabber.grab()); //grab from stream, stream with rtp
           }

    If I choose my codec as AV_CODEC_ID_MPEG2VIDEO I can play the stream from VLC using rtp ://239.31.31.69:4433 with open network.

    If I increase the quality using setVideoBitrate(1024*1024*2) the stream lags too much and if I decrease the quality is so bad.

    I want to use AV_CODEC_ID_H264 as my codec to fasten things with better quality but i can’t play the stream from VLC getting error :

    SDP required A description in SDP format is required to receive the RTP stream. Note that rtp :// URIs cannot work with dynamic RTP payload format (96).

    I tried to get sdp using wireshark and then I realized rtp stream doesn’t have sdp :) so I tried to create my own sdp like this

    c=IN IP4 239.31.31.69
    m=video 4433 RTP/AVP 96
    a=rtpmap:96 H264/90000

    and this

    v=0
    c=IN IP4 239.31.31.69
    a=recvonly
    t=0 0
    m=video 4433 RTP/AVP 99
    a=rtpmap:99 H264/90000
    a=fmtp:99 packetization-mode=1;profile-level-id=42c01e;sprop-parameter sets=Z0LAHukBQHsg,aM4G4g==;

    but both seems to fail similar to this

    > core debug: adding item `asf.sdp' ( file:///C:/Users/Sezer/Desktop/asf.sdp )
    core debug: processing request item: asf.sdp, node: null, skip: 0
    core debug: rebuilding array of current - root Playlist
    core debug: rebuild done - 7 items, index 6
    core debug: starting playback of the new playlist item
    core debug: resyncing on asf.sdp
    core debug: asf.sdp is at 6
    core debug: creating new input thread
    core debug: Creating an input for 'asf.sdp'
    core debug: Creating an input for 'asf.sdp'
    core debug: requesting art for asf.sdp
    core debug: using timeshift granularity of 50 MiB, in path 'C:\Users\Sezer\AppData\Local\Temp'
    core debug: `file:///C:/Users/Sezer/Desktop/asf.sdp' gives access `file' demux `' path `/C:/Users/Sezer/Desktop/asf.sdp'
    core debug: specified demux `any'
    core debug: creating demux: access='file' demux='any' location='/C:/Users/Sezer/Desktop/asf.sdp' file='C:\Users\Sezer\Desktop\asf.sdp'
    core debug: looking for access_demux module matching "file": 12 candidates
    core debug: looking for meta fetcher module matching "any": 1 candidates
    core debug: no access_demux modules matched
    core debug: creating access 'file' location='/C:/Users/Sezer/Desktop/asf.sdp', path='C:\Users\Sezer\Desktop\asf.sdp'
    core debug: looking for access module matching "file": 21 candidates
    filesystem debug: opening file `C:\Users\Sezer\Desktop\asf.sdp'
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\fetcher
    core debug: using access module "filesystem"
    core debug: Using stream method for AStream*
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher
    core debug: starting pre-buffering
    core debug: received first data after 0 ms
    core debug: pre-buffering done 193 bytes in 0s - 188476 KiB/s
    core debug: looking for stream_filter module matching "any": 6 candidates
    core debug: no stream_filter modules matched
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    core debug: looking for stream_filter module matching "record": 6 candidates
    core debug: using stream_filter module "record"
    core debug: creating demux: access='file' demux='any' location='/C:/Users/Sezer/Desktop/asf.sdp' file='C:\Users\Sezer\Desktop\asf.sdp'
    core debug: looking for demux module matching "any": 65 candidates
    live555 debug: version 2014.07.25
    live555 debug: RTP subsession 'video/H264'
    core debug: selecting program id=0
    core debug: adding item `file.sdp' ( file:///C:/Users/Sezer/Desktop/file.sdp )
    live555 debug: setup start: 0.000000 stop:0.000000
    live555 debug: play start: 0.000000 stop:0.000000
    core debug: using demux module "live555"
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    core debug: no meta fetcher modules matched
    core debug: looking for a subtitle file in C:\Users\Sezer\Desktop\
    core debug: searching art for asf.sdp
    core debug: looking for art finder module matching "any": 2 candidates
    core debug: looking for decoder module matching "any": 43 candidates
    avcodec debug: CPU flags: 0x010053db
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\art
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art
    avcodec debug: trying to use direct rendering
    avcodec debug: allowing 4 thread(s) for decoding
    avcodec warning: threaded frame decoding is not compatible with DXVA2, disabled
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    core debug: meta ok for (null), need to fetch art
    core debug: Creating an input for 'file.sdp'
    avcodec debug: avcodec codec (H264 - MPEG-4 AVC (part 10)) started
    avcodec debug: using slice thread mode with 4 threads
    core debug: using decoder module "avcodec"
    core debug: looking for meta fetcher module matching "any": 1 candidates
    core debug: looking for packetizer module matching "any": 23 candidates
    core debug: using packetizer module "packetizer_h264"
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\fetcher
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher
    core debug: looking for meta reader module matching "any": 2 candidates
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\reader
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\reader
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\reader\filename.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    core debug: no meta fetcher modules matched
    core debug: searching art for asf.sdp
    core debug: looking for art finder module matching "any": 2 candidates
    core debug: no meta reader modules matched
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    core debug: `file:///C:/Users/Sezer/Desktop/asf.sdp' successfully opened
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\art
    core debug: meta ok for (null), need to fetch art
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    core debug: no art finder modules matched
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    core debug: looking for meta fetcher module matching "any": 1 candidates
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\fetcher
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    core debug: using meta fetcher module "lua"
    core debug: removing module "lua"
    core debug: searching art for asf.sdp
    core debug: looking for art finder module matching "any": 2 candidates
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    qt4 debug: IM: Setting an input
    core debug: no art finder modules matched
    core debug: looking for meta fetcher module matching "any": 1 candidates
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\art
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\fetcher
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    core debug: no meta fetcher modules matched
    core debug: searching art for file.sdp
    core debug: looking for art finder module matching "any": 2 candidates
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\art
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    core debug: no art finder modules matched
    core debug: art not found for asf.sdp
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    lua debug: skipping script (unmatched scope) C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    core debug: no art finder modules matched
    core debug: looking for meta fetcher module matching "any": 1 candidates
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\fetcher
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    core debug: using meta fetcher module "lua"
    core debug: removing module "lua"
    core debug: searching art for asf.sdp
    core debug: looking for art finder module matching "any": 2 candidates
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\art
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    core debug: no art finder modules matched
    core debug: art not found for asf.sdp
    core debug: looking for meta fetcher module matching "any": 1 candidates
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\fetcher
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\fetcher\tvrage.luac
    core debug: using meta fetcher module "lua"
    core debug: removing module "lua"
    core debug: searching art for file.sdp
    core debug: looking for art finder module matching "any": 2 candidates
    lua debug: Trying Lua scripts in C:\Users\Sezer\AppData\Roaming\vlc\lua\meta\art
    lua debug: Trying Lua scripts in C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\00_musicbrainz.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\01_googleimage.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\02_frenchtv.luac
    lua debug: Trying Lua playlist script C:\Program Files (x86)\VideoLAN\VLC\lua\meta\art\03_lastfm.luac
    core debug: no art finder modules matched
    core debug: art not found for file.sdp

    Can you lead me to the right direction ? What should I do to get fair quality and no lag using rtp ?

  • FFMPEG concat demuxer - how to make file formats compatible ?

    10 avril 2015, par user206481

    I need to automate mp4 concatenation server-side and I’m using FFMPEG. I will get uploads of mp4 files and I want to attach a Title.mp4 and End.mp4 to each one. I am also overlaying a soundtrack (the input videos do not have sound) There is a potential high server load so I’d like to do it as efficiently as possible using ffmpeg’s concat demuxer to avoid re-encoding the video.

    After receiving samples of each file, I am not successful and I believe it is due to mismatched file formats. My result has good Title.mp4 and audio, then when the sample uploaded mp4 is supposed to play there is garbled green/pink/red pixels on the top half of the video, then the End.mp4 plays fine. Here is my ffmpeg command and output :

    $ ffmpeg -f concat -i <(printf "file '%s'\n" Title.mp4 Sample.mp4 End.mp4) -i SoundTrack.wav -c:v copy -strict -2 -y Out.mp4

    ffmpeg version 2.6.1 Copyright (c) 2000-2015 the FFmpeg developers
    built with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-55)
    configuration: --prefix=/home/dpmsmobi/ffmpeg_build --extra-cflags=-I/home/dpmsmobi/ffmpeg_build/include --extra-ldflags=-L/home/dpmsmobi/ffmpeg_build/lib --bindir=/home/dpmsmobi/bin --enable-gpl --enable-nonfree --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264
     libavutil      54. 20.100 / 54. 20.100
     libavcodec     56. 26.100 / 56. 26.100
     libavformat    56. 25.101 / 56. 25.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 11.102 /  5. 11.102
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  3.100 / 53.  3.100
    Input #0, concat, from '/dev/fd/63':
     Duration: N/A, start: 0.000000, bitrate: 1810 kb/s
       Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 768x512 [SAR 1:1 DAR 3:2], 1810 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc
    Guessed Channel Layout for  Input Stream #1.0 : stereo
    Input #1, wav, from 'SoundTrack.wav':
     Metadata:
       encoded_by      : Adobe Premiere Pro CC 2014 (Maci
       encoder         : Adobe Premiere Pro CC 2014 (Macintosh)
       date            : 2015-04-07
       creation_time   : 11:12:10
       time_reference  : 0
     Duration: 00:00:15.06, bitrate: 1551 kb/s
       Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2 channels, s16, 1536 kb/s
    Output #0, mp4, to 'Out.mp4':
     Metadata:
       encoder         : Lavf56.25.101
       Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 768x512 [SAR 1:1 DAR 3:2], q=2-31, 1810 kb/s, 30 fps, 30 tbr, 30k tbn, 30k tbc
       Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s
       Metadata:
         encoder         : Lavc56.26.100 aac
    Stream mapping:
     Stream #0:0 -> #0:0 (copy)
     Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
    Press [q] to stop, [?] for help
    [concat @ 0x1dedc20] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
    [concat @ 0x1dedc20] DTS 69750 < 91000 out of order
    [mp4 @ 0x1f75060] Non-monotonous DTS in output stream 0:0; previous: 91000, current: 69750; changing to 91001. This may result in incorrect timestamps in the output file.

    <----- many more Non-monotonous DTS messages omitted here ---->

    frame=  427 fps=0.0 q=-1.0 Lsize=    4123kB time=00:00:15.06 bitrate=2242.5kbits/s    
    video:3873kB audio:236kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.344173%

    I can successfully concatenate the Title.mp4 to the End.mp4, and I can successfully concatenate two Sample.mp4 files, so I know I’ve got the ffmpeg command right. I can also successfully concat the files using the following ffmpeg command with filter_complex instead of concat demuxer (this takes considerably longer due to re-encoding) :

    ffmpeg -i Title.mp4 -i Sample.mp4 -i End.mp4 -i SoundTrack.wav -filter_complex '[0:0] [1:0] [2:0] concat=n=3:v=1 [v]' -map '[v]' -map 3:0 -crf 20 -strict -2 -y Out2.mp4

    Here is the MediaInfo output for each type of mp4 file :

    $ mediainfo Title.mp4
    General
    Complete name                            : Title.mp4
    Format                                   : MPEG-4
    Format profile                           : Base Media / Version 2
    Codec ID                                 : mp42
    File size                                : 693 KiB
    Duration                                 : 3s 100ms
    Overall bit rate mode                    : Variable
    Overall bit rate                         : 1 831 Kbps
    Encoded date                             : UTC 2015-04-07 19:15:03
    Tagged date                              : UTC 2015-04-07 19:15:03
    ©TIM                                     : 00:00:00:00
    ©TSC                                     : 30
    ©TSZ                                     : 1

    Video
    ID                                       : 1
    Format                                   : AVC
    Format/Info                              : Advanced Video Codec
    Format profile                           : Main@L3.1
    Format settings, CABAC                   : Yes
    Format settings, ReFrames                : 3 frames
    Codec ID                                 : avc1
    Codec ID/Info                            : Advanced Video Coding
    Duration                                 : 3s 100ms
    Bit rate mode                            : Variable
    Bit rate                                 : 1 811 Kbps
    Maximum bit rate                         : 3 000 Kbps
    Width                                    : 768 pixels
    Height                                   : 512 pixels
    Display aspect ratio                     : 3:2
    Frame rate mode                          : Constant
    Frame rate                               : 30.000 fps
    Standard                                 : NTSC
    Color space                              : YUV
    Chroma subsampling                       : 4:2:0
    Bit depth                                : 8 bits
    Scan type                                : Progressive
    Bits/(Pixel*Frame)                       : 0.154
    Stream size                              : 685 KiB (99%)
    Language                                 : English
    Encoded date                             : UTC 2015-04-07 19:15:03
    Tagged date                              : UTC 2015-04-07 19:15:03
    Color range                              : Limited

    $ mediainfo Sample.mp4
    General
    Complete name                            : Sample.mp4
    Format                                   : MPEG-4
    Format profile                           : Base Media
    Codec ID                                 : isom
    File size                                : 2.93 MiB
    Duration                                 : 7s 9ms
    Overall bit rate                         : 3 505 Kbps
    Encoded date                             : UTC 1970-01-01 00:00:00
    Tagged date                              : UTC 1970-01-01 00:00:00
    Writing application                      : Lavf52.64.2

    Video
    ID                                       : 1
    Format                                   : AVC
    Format/Info                              : Advanced Video Codec
    Format profile                           : Baseline@L3.1
    Format settings, CABAC                   : No
    Format settings, ReFrames                : 1 frame
    Format settings, GOP                     : M=1, N=30
    Codec ID                                 : avc1
    Codec ID/Info                            : Advanced Video Coding
    Duration                                 : 7s 9ms
    Bit rate                                 : 3 500 Kbps
    Width                                    : 768 pixels
    Height                                   : 512 pixels
    Display aspect ratio                     : 3:2
    Frame rate mode                          : Variable
    Frame rate                               : 30.250 fps
    Minimum frame rate                       : 23.462 fps
    Maximum frame rate                       : 296.053 fps
    Color space                              : YUV
    Chroma subsampling                       : 4:2:0
    Bit depth                                : 8 bits
    Scan type                                : Progressive
    Bits/(Pixel*Frame)                       : 0.294
    Stream size                              : 2.92 MiB (100%)
    Language                                 : English
    Encoded date                             : UTC 1970-01-01 00:00:00
    Tagged date                              : UTC 1970-01-01 00:00:00

    I’m pretty sure it’s the mp42 vs isom Codec ID’s, and potentially the constant vs variable frame rates. I can’t change the input mp4’s but I know their format will stay the same. How can I reformat the Title and End mp4’s to match the input mp4 files so I can use ffmpeg concat demux ?

  • encode h264 video using ffmpeg library memory issues

    31 mars 2015, par Zeppa

    I’m trying to do screen capture on OS X using ffmpeg’s avfoundation library. I capture frames from the screen and encode it using H264 into an flv container.

    Here’s the command line output of the program :

    Input #0, avfoundation, from 'Capture screen 0':
     Duration: N/A, start: 9.253649, bitrate: N/A
       Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 1440x900, 14.58 tbr, 1000k tbn, 1000k tbc
    raw video is inCodec
    FLV (Flash Video)http://localhost:8090/test.flv
    [libx264 @ 0x102038e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
    [libx264 @ 0x102038e00] profile High, level 4.0
    [libx264 @ 0x102038e00] 264 - core 142 r2495 6a301b6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - 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=6 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=1 weightp=2 keyint=50 keyint_min=5 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=400 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    [tcp @ 0x101a5fe70] Connection to tcp://localhost:8090 failed (Connection refused), trying next address
    [tcp @ 0x101a5fe70] Connection to tcp://localhost:8090 failed: Connection refused
    url_fopen failed: Operation now in progress
    [flv @ 0x102038800] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
    encoded frame #0
    encoded frame #1
    ......
    encoded frame #49
    encoded frame #50
    testmee(8404,0x7fff7e05c300) malloc: *** error for object 0x102053e08: incorrect checksum for freed object - object was probably modified after being freed.
    *** set a breakpoint in malloc_error_break to debug
    (lldb) bt
    * thread #10: tid = 0x43873, 0x00007fff95639286 libsystem_kernel.dylib`__pthread_kill + 10, stop reason = signal SIGABRT
     * frame #0: 0x00007fff95639286 libsystem_kernel.dylib`__pthread_kill + 10
       frame #1: 0x00007fff9623742f libsystem_pthread.dylib`pthread_kill + 90
       frame #2: 0x00007fff977ceb53 libsystem_c.dylib`abort + 129
       frame #3: 0x00007fff9ab59e06 libsystem_malloc.dylib`szone_error + 625
       frame #4: 0x00007fff9ab4f799 libsystem_malloc.dylib`small_malloc_from_free_list + 1105
       frame #5: 0x00007fff9ab4d3bc libsystem_malloc.dylib`szone_malloc_should_clear + 1449
       frame #6: 0x00007fff9ab4c877 libsystem_malloc.dylib`malloc_zone_malloc + 71
       frame #7: 0x00007fff9ab4b395 libsystem_malloc.dylib`malloc + 42
       frame #8: 0x00007fff94aa63d2 IOSurface`IOSurfaceClientLookupFromMachPort + 40
       frame #9: 0x00007fff94aa6b38 IOSurface`IOSurfaceLookupFromMachPort + 12
       frame #10: 0x00007fff92bfa6b2 CoreGraphics`_CGYDisplayStreamFrameAvailable + 342
       frame #11: 0x00007fff92f6759c CoreGraphics`CGYDisplayStreamNotification_server + 336
       frame #12: 0x00007fff92bfada6 CoreGraphics`display_stream_runloop_callout + 46
       frame #13: 0x00007fff956eba07 CoreFoundation`__CFMachPortPerform + 247
       frame #14: 0x00007fff956eb8f9 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
       frame #15: 0x00007fff956eb86b CoreFoundation`__CFRunLoopDoSource1 + 475
       frame #16: 0x00007fff956dd3e7 CoreFoundation`__CFRunLoopRun + 2375
       frame #17: 0x00007fff956dc858 CoreFoundation`CFRunLoopRunSpecific + 296
       frame #18: 0x00007fff95792ef1 CoreFoundation`CFRunLoopRun + 97
       frame #19: 0x0000000105f79ff1 CMIOUnits`___lldb_unnamed_function2148$$CMIOUnits + 875
       frame #20: 0x0000000105f6f2c2 CMIOUnits`___lldb_unnamed_function2127$$CMIOUnits + 14
       frame #21: 0x00007fff97051765 CoreMedia`figThreadMain + 417
       frame #22: 0x00007fff96235268 libsystem_pthread.dylib`_pthread_body + 131
       frame #23: 0x00007fff962351e5 libsystem_pthread.dylib`_pthread_start + 176
       frame #24: 0x00007fff9623341d libsystem_pthread.dylib`thread_start + 13

    I’ve attached the code I used below.

    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavformat></libavformat>avformat.h>
    #include <libswscale></libswscale>swscale.h>
    #include <libavdevice></libavdevice>avdevice.h>
    #include <libavutil></libavutil>opt.h>
    #include
    #include
    #include
    /* compile using
    gcc -g -o stream test.c -lavformat -lavutil -lavcodec -lavdevice -lswscale
    */

    // void show_av_device() {

    //    inFmt->get_device_list(inFmtCtx, device_list);
    //    printf("Device Info=============\n");
    //    //avformat_open_input(&amp;inFmtCtx,"video=Capture screen 0",inFmt,&amp;inOptions);
    //    printf("===============================\n");
    // }

    void AVFAIL (int code, const char *what) {
       char msg[500];
       av_strerror(code, msg, sizeof(msg));
       fprintf(stderr, "failed: %s\nerror: %s\n", what, msg);
       exit(2);
    }

    #define AVCHECK(f) do { int e = (f); if (e &lt; 0) AVFAIL(e, #f); } while (0)
    #define AVCHECKPTR(p,f) do { p = (f); if (!p) AVFAIL(AVERROR_UNKNOWN, #f); } while (0)

    void registerLibs() {
       av_register_all();
       avdevice_register_all();
       avformat_network_init();
       avcodec_register_all();
    }

    int main(int argc, char *argv[]) {

       //conversion variables
       struct SwsContext *swsCtx = NULL;
       //input stream variables
       AVFormatContext   *inFmtCtx = NULL;
       AVCodecContext    *inCodecCtx = NULL;
       AVCodec           *inCodec = NULL;
       AVInputFormat     *inFmt = NULL;
       AVFrame           *inFrame = NULL;
       AVDictionary      *inOptions = NULL;
       const char *streamURL = "http://localhost:8090/test.flv";
       const char *name = "avfoundation";

    //    AVFrame           *inFrameYUV = NULL;
       AVPacket          inPacket;


       //output stream variables
       AVCodecContext    *outCodecCtx = NULL;
       AVCodec           *outCodec;
       AVFormatContext   *outFmtCtx = NULL;
       AVOutputFormat    *outFmt = NULL;
       AVFrame           *outFrameYUV = NULL;
       AVStream          *stream = NULL;

       int               i, videostream, ret;
       int               numBytes, frameFinished;

       registerLibs();
       inFmtCtx = avformat_alloc_context(); //alloc input context
       av_dict_set(&amp;inOptions, "pixel_format", "uyvy422", 0);
       av_dict_set(&amp;inOptions, "probesize", "7000000", 0);

       inFmt = av_find_input_format(name);
       ret = avformat_open_input(&amp;inFmtCtx, "Capture screen 0:", inFmt, &amp;inOptions);
       if (ret &lt; 0) {
           printf("Could not load the context for the input device\n");
           return -1;
       }
       if (avformat_find_stream_info(inFmtCtx, NULL) &lt; 0) {
           printf("Could not find stream info for screen\n");
           return -1;
       }
       av_dump_format(inFmtCtx, 0, "Capture screen 0", 0);
       // inFmtCtx->streams is an array of pointers of size inFmtCtx->nb_stream

       videostream = av_find_best_stream(inFmtCtx, AVMEDIA_TYPE_VIDEO, -1, -1, &amp;inCodec, 0);
       if (videostream == -1) {
           printf("no video stream found\n");
           return -1;
       } else {
           printf("%s is inCodec\n", inCodec->long_name);
       }
       inCodecCtx = inFmtCtx->streams[videostream]->codec;
       // open codec
       if (avcodec_open2(inCodecCtx, inCodec, NULL) > 0) {
           printf("Couldn't open codec");
           return -1;  // couldn't open codec
       }


           //setup output params
       outFmt = av_guess_format(NULL, streamURL, NULL);
       if(outFmt == NULL) {
           printf("output format was not guessed properly");
           return -1;
       }

       if((outFmtCtx = avformat_alloc_context()) &lt; 0) {
           printf("output context not allocated. ERROR");
           return -1;
       }

       printf("%s", outFmt->long_name);

       outFmtCtx->oformat = outFmt;

       snprintf(outFmtCtx->filename, sizeof(outFmtCtx->filename), streamURL);
       printf("%s\n", outFmtCtx->filename);

       outCodec = avcodec_find_encoder(AV_CODEC_ID_H264);
       if(!outCodec) {
           printf("could not find encoder for H264 \n" );
           return -1;
       }

       stream = avformat_new_stream(outFmtCtx, outCodec);
       outCodecCtx = stream->codec;
       avcodec_get_context_defaults3(outCodecCtx, outCodec);

       outCodecCtx->codec_id = AV_CODEC_ID_H264;
       outCodecCtx->codec_type = AVMEDIA_TYPE_VIDEO;
       outCodecCtx->flags = CODEC_FLAG_GLOBAL_HEADER;
       outCodecCtx->width = inCodecCtx->width;
       outCodecCtx->height = inCodecCtx->height;
       outCodecCtx->time_base.den = 25;
       outCodecCtx->time_base.num = 1;
       outCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;
       outCodecCtx->gop_size = 50;
       outCodecCtx->bit_rate = 400000;

       //setup output encoders etc
       if(stream) {
           ret = avcodec_open2(outCodecCtx, outCodec, NULL);
           if (ret &lt; 0) {
               printf("Could not open output encoder");
               return -1;
           }
       }

       if (avio_open(&amp;outFmtCtx->pb, outFmtCtx->filename, AVIO_FLAG_WRITE ) &lt; 0) {
           perror("url_fopen failed");
       }

       avio_open_dyn_buf(&amp;outFmtCtx->pb);
       ret = avformat_write_header(outFmtCtx, NULL);
       if (ret != 0) {
           printf("was not able to write header to output format");
           return -1;
       }
       unsigned char *pb_buffer;
       int len = avio_close_dyn_buf(outFmtCtx->pb, (unsigned char **)(&amp;pb_buffer));
       avio_write(outFmtCtx->pb, (unsigned char *)pb_buffer, len);


       numBytes = avpicture_get_size(PIX_FMT_UYVY422, inCodecCtx->width, inCodecCtx->height);
       // Allocate video frame
       inFrame = av_frame_alloc();

       swsCtx = sws_getContext(inCodecCtx->width, inCodecCtx->height, inCodecCtx->pix_fmt, inCodecCtx->width,
                               inCodecCtx->height, PIX_FMT_YUV420P, SWS_BILINEAR, NULL, NULL, NULL);
       int frame_count = 0;
       while(av_read_frame(inFmtCtx, &amp;inPacket) >= 0) {
           if(inPacket.stream_index == videostream) {
               avcodec_decode_video2(inCodecCtx, inFrame, &amp;frameFinished, &amp;inPacket);
               // 1 Frame might need more than 1 packet to be filled
               if(frameFinished) {
                   outFrameYUV = av_frame_alloc();

                   uint8_t *buffer = (uint8_t *)av_malloc(numBytes);

                   int ret = avpicture_fill((AVPicture *)outFrameYUV, buffer, PIX_FMT_YUV420P,
                                            inCodecCtx->width, inCodecCtx->height);
                   if(ret &lt; 0){
                       printf("%d is return val for fill\n", ret);
                       return -1;
                   }
                   //convert image to YUV
                   sws_scale(swsCtx, (uint8_t const * const* )inFrame->data,
                             inFrame->linesize, 0, inCodecCtx->height,
                             outFrameYUV->data, outFrameYUV->linesize);
                   //outFrameYUV now holds the YUV scaled frame/picture
                   outFrameYUV->format = outCodecCtx->pix_fmt;
                   outFrameYUV->width = outCodecCtx->width;
                   outFrameYUV->height = outCodecCtx->height;


                   AVPacket pkt;
                   int got_output;
                   av_init_packet(&amp;pkt);
                   pkt.data = NULL;
                   pkt.size = 0;

                   outFrameYUV->pts = frame_count;

                   ret = avcodec_encode_video2(outCodecCtx, &amp;pkt, outFrameYUV, &amp;got_output);
                   if (ret &lt; 0) {
                       fprintf(stderr, "Error encoding video frame: %s\n", av_err2str(ret));
                       return -1;
                   }

                   if(got_output) {
                       if(stream->codec->coded_frame->key_frame) {
                           pkt.flags |= AV_PKT_FLAG_KEY;
                       }
                       pkt.stream_index = stream->index;
                       if(pkt.pts != AV_NOPTS_VALUE)
                           pkt.pts = av_rescale_q(pkt.pts, stream->codec->time_base, stream->time_base);
                       if(pkt.dts != AV_NOPTS_VALUE)
                           pkt.dts = av_rescale_q(pkt.dts, stream->codec->time_base, stream->time_base);
                       if(avio_open_dyn_buf(&amp;outFmtCtx->pb)!= 0) {
                           printf("ERROR: Unable to open dynamic buffer\n");
                       }
                       ret = av_interleaved_write_frame(outFmtCtx, &amp;pkt);
                       unsigned char *pb_buffer;
                       int len = avio_close_dyn_buf(outFmtCtx->pb, (unsigned char **)&amp;pb_buffer);
                       avio_write(outFmtCtx->pb, (unsigned char *)pb_buffer, len);

                   } else {
                       ret = 0;
                   }
                   if(ret != 0) {
                       fprintf(stderr, "Error while writing video frame: %s\n", av_err2str(ret));
                       exit(1);
                   }

                   fprintf(stderr, "encoded frame #%d\n", frame_count);
                   frame_count++;

                   av_free_packet(&amp;pkt);
                   av_frame_free(&amp;outFrameYUV);
                   av_free(buffer);

               }
           }
           av_free_packet(&amp;inPacket);
       }
       av_write_trailer(outFmtCtx);

       //close video stream
       if(stream) {
           avcodec_close(outCodecCtx);
       }
       for (i = 0; i &lt; outFmtCtx->nb_streams; i++) {
           av_freep(&amp;outFmtCtx->streams[i]->codec);
           av_freep(&amp;outFmtCtx->streams[i]);
       }
       if (!(outFmt->flags &amp; AVFMT_NOFILE))
       /* Close the output file. */
           avio_close(outFmtCtx->pb);
       /* free the output format context */
       avformat_free_context(outFmtCtx);

       // Free the YUV frame populated by the decoder
       av_free(inFrame);

       // Close the video codec (decoder)
       avcodec_close(inCodecCtx);

       // Close the input video file
       avformat_close_input(&amp;inFmtCtx);

       return 1;

    }

    I’m not sure what I’ve done wrong here. But, what I’ve observed is that for each frame thats been encoded, my memory usage goes up by about 6MB. Backtracking afterward usually leads one of the following two culprits :

    1. avf_read_frame function in avfoundation.m
    2. av_dup_packet function in avpacket.h

    Can I also get advice on the way I’m using avio_open_dyn_buff function to be able to stream over http? I’ve also attached my ffmpeg library versions below :

       ffmpeg version N-70876-g294bb6c Copyright (c) 2000-2015 the FFmpeg developers
     built with Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
     configuration: --prefix=/usr/local --enable-gpl --enable-postproc --enable-pthreads --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libvorbis --disable-mmx --disable-ssse3 --disable-armv5te --disable-armv6 --disable-neon --enable-shared --disable-static --disable-stripping
     libavutil      54. 20.100 / 54. 20.100
     libavcodec     56. 29.100 / 56. 29.100
     libavformat    56. 26.101 / 56. 26.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 13.101 /  5. 13.101
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  3.100 / 53.  3.100
    Hyper fast Audio and Video encoder

    Valgrind analysis attached here because I exceeded stack overflow’s character limit. http://pastebin.com/MPeRhjhN