Recherche avancée

Médias (91)

Autres articles (111)

  • Script d’installation automatique de MediaSPIP

    25 avril 2011, par

    Afin de palier aux difficultés d’installation dues principalement aux dépendances logicielles coté serveur, un script d’installation "tout en un" en bash a été créé afin de faciliter cette étape sur un serveur doté d’une distribution Linux compatible.
    Vous devez bénéficier d’un accès SSH à votre serveur et d’un compte "root" afin de l’utiliser, ce qui permettra d’installer les dépendances. Contactez votre hébergeur si vous ne disposez pas de cela.
    La documentation de l’utilisation du script d’installation (...)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

  • Gestion générale des documents

    13 mai 2011, par

    MédiaSPIP ne modifie jamais le document original mis en ligne.
    Pour chaque document mis en ligne il effectue deux opérations successives : la création d’une version supplémentaire qui peut être facilement consultée en ligne tout en laissant l’original téléchargeable dans le cas où le document original ne peut être lu dans un navigateur Internet ; la récupération des métadonnées du document original pour illustrer textuellement le fichier ;
    Les tableaux ci-dessous expliquent ce que peut faire MédiaSPIP (...)

Sur d’autres sites (11141)

  • FFmpeg with Nvidia GPU - full HW transcode with 50i to 50p deinterlacing

    5 janvier 2018, par Jernej Stopinšek

    I’m trying to do a full hardware transcode of an udp stream to hls
    with 50i to 50p deinterlacing.

    I’m using ffmpeg and Nvidia GPU.

    Since HLS requires deinterlacing

    https://developer.apple.com/library/content/documentation/General/Reference/HLSAuthoringSpec/Requirements.html

    I would like to deinterlace an interlaced source stream and preserve
    as much smooth motion and picture quality as possible.

    My hardware, software and driver info :

    GPU : Tesla P100-PCIE-12GB
    Nvidia Driver Version : 387.26
    Cuda compilation tools, release 9.1, V9.1.85
    FFmpeg from git on 20171218

    ffmpeg version N-89520-g3f88744067 Copyright (c) 2000-2017 the FFmpeg
    developers built with gcc 6.3.0 (Debian 6.3.0-18) 20170516
    configuration : —enable-gpl
    —enable-cuda-sdk —enable-libx264 —enable-libx265 —enable-nonfree —enable-libnpp —enable-opengl —enable-opencl —enable-libfreetype —enable-openssl —enable-libzvbi —enable-libfontconfig —enable-libfreetype —enable-libfribidi —extra-cflags=-I/usr/local/cuda/include —extra-ldflags=-L/usr/local/cuda/lib64 —arch=x86_64

    libavutil 56. 6.100 / 56. 6.100
    libavcodec 58. 8.100 / 58.
    8.100
    libavformat 58. 3.100 / 58. 3.100
    libavdevice 58. 0.100 / 58. 0.100
    libavfilter 7. 7.100 / 7. 7.100
    libswscale 5.
    0.101 / 5. 0.101
    libswresample 3. 0.101 / 3. 0.101
    libpostproc 55. 0.100 / 55. 0.100

    Input stream info :

    ffmpeg -t 00:05:00 -i udp://xxx.xxx.xxx.xxx:xxxx -map 0:0 -vf idet -c rawvideo -y -f rawvideo /dev/null

    Input #0, mpegts, from ’udp ://xxx.xxx.xxx.xxx:xxxx’ :
    Duration :
    N/A, start : 49634.159411, bitrate : N/A
    Program xxxxx
    Metadata : service_name :
    service_provider : Stream
    #0:0[0x44d] : Video : h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k
    tbn, 50 tbc
    Stream #0:10x19de : Audio : mp2 ([3][0][0][0] /
    0x0003), 48000 Hz, stereo, s16p, 192 kb/s
    Stream
    #0:20x19e1 : Subtitle : dvb_subtitle ([6][0][0][0] / 0x0006)

    Output #0, rawvideo, to ’/dev/null’ :
    Metadata :
    encoder :
    Lavf58.3.100
    Stream #0:0 : Video : rawvideo (I420 / 0x30323449),
    yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 622080 kb/s, 25 fps, 25
    tbn, 25 tbc
    Metadata :
    encoder : Lavc58.8.100 rawvideo
    frame= 7538 fps= 25 q=-0.0 Lsize=22896675kB time=00:05:01.52
    bitrate=622080.0kbits/s dup=38 drop=0 speed=1.02x
    video:22896675kB audio:0kB subtitle:0kB other streams:0kB global
    headers:0kB muxing overhead : 0.000000%
    [Parsed_idet_0 @
    0x56370b3c5080] Repeated Fields : Neither : 7458 Top : 24 Bottom : 18
    [Parsed_idet_0 @ 0x56370b3c5080] Single frame detection : TFF : 281 BFF :
    13 Progressive : 5639 Undetermined : 1567
    [Parsed_idet_0 @
    0x56370b3c5080] Multi frame detection : TFF : 380 BFF : 0 Progressive :
    7120 Undetermined : 0


    This is my command for adaptive hardware deinterlacing. It gives great results with picture, but sound is out of sync.

    ffmpeg -y -err_detect ignore_err -loglevel debug -vsync -1 -hwaccel cuvid -hwaccel_device 1 -c:v h264_cuvid -deint adaptive -r:v 50 -gpu:v 1 -i "udp://xxx.xxx.xxx.xxx:xxxx=?overrun_nonfatal=1&fifo_size=84450&buffer_size=33554432" -map 0:0 -map 0:1 -c:a aac -b:a 196k -c:v h264_nvenc -flags -global_header+cgop -gpu:v 1 -g:v 50 -bf:v 4 -coder:v cabac -b_adapt:v false -b:v 5184000 -minrate:v 5184000 -maxrate:v 5184000 -bufsize:v 2488320 -rc:v cbr_hq -2pass:v true -rc-lookahead:v 25 -no-scenecut:v 1 -profile:v high -preset:v slow -color_range:v 1 -color_trc:v 1 -color_primaries:v 1 -colorspace:v 1 -f hls -hls_time 5 -hls_list_size 3 -start_number 0 -hls_flags delete_segments /srv/hls/program_01/1080p/index.m3u8

    If I add option "-drop_second_field 1" to h264_cuvid and remove -r:v 50 from input and put it to h264_nvenc - then transcoded stream has synced audio, but I think I’m losing quality due to drop_second_field option.

    ffmpeg -y -err_detect ignore_err -loglevel debug -vsync -1 -hwaccel cuvid -hwaccel_device 1 -c:v h264_cuvid -deint adaptive -drop_second_field 1 -gpu:v 1 -i "udp://xxx.xxx.xxx.xxx:xxxx=?overrun_nonfatal=1&fifo_size=84450&buffer_size=33554432" -map 0:0 -map 0:1 -c:a aac -b:a 196k -c:v h264_nvenc -flags -global_header+cgop -gpu:v 1 -g:v 50 -r:v 50 -bf:v 4 -coder:v cabac -b_adapt:v false -b:v 5184000 -minrate:v 5184000 -maxrate:v 5184000 -bufsize:v 2488320 -rc:v cbr_hq -2pass:v true -rc-lookahead:v 25 -no-scenecut:v 1 -profile:v high -preset:v slow -color_range:v 1 -color_trc:v 1 -color_primaries:v 1 -colorspace:v 1 -f hls -hls_time 5 -hls_list_size 3 -start_number 0 -hls_flags delete_segments /srv/hls/program_01/1080p/index.m3u8

    Could someone please point me in the right direction how to properly deinterlace with cuvid and minimal possible loss of quality ?

  • ffmpeg capture from ip camera video in h264 stream [closed]

    23 mars 2023, par Иванов Иван

    I can't read the frames from the camera and then write them to a video file (any). The fact is that I even get crooked frames, they seem to have violated the coordinates of the position of each point, the video is crooked, distorted

    


    c++ code.

    


    https://drive.google.com/file/d/1W2sZMR5D5pvVmnhiQyhiaQhC9frhdeII/view?usp=sharing

    


     #define INBUF_SIZE 4096&#xA;&#xA;&#xA;    //writing the minimal required header for a pgm file format&#xA;    //portable graymap format-> https://en.wikipedia.org/wiki/Netpbm_format#PGM_example&#xA;    fprintf (f, "P5\n%d %d\n%d\n", xsize, ysize, 255);&#xA;&#xA;    //writing line by line&#xA;    for (i = 0; i /contains data on a configuration of media content, such as bitrate, &#xA;        //frame rate, sampling frequency, channels, height and many other things.&#xA;        AVCodecContext * AVCodecContext_ = NULL;&#xA;        AVCodecParameters * AVCodecParametr_ = NULL;&#xA;        FILE * f;&#xA;        //This structure describes decoded (raw) audio- or video this.&#xA;        AVFrame * frame;&#xA;        uint8_t inbuf [INBUF_SIZE &#x2B; AV_INPUT_BUFFER_PADDING_SIZE];&#xA;        uint8_t * data;&#xA;        size_t data_size;&#xA;        int ret;&#xA;        int eof;&#xA;        AVFormatContext * AVfc = NULL;&#xA;        int ERRORS;&#xA;        //AVCodec * codec;&#xA;        char buf [1024];&#xA;        const char * FileName;&#xA;    &#xA;        //https://habr.com/ru/post/137793/&#xA;        //Stores the compressed one shot.&#xA;        AVPacket * pkt;&#xA;    &#xA;        //**********************************************************************&#xA;        //Beginning of reading video from the camera. &#xA;        //**********************************************************************&#xA;    &#xA;        avdevice_register_all ();&#xA;    &#xA;        filename = "rtsp://admin: 754HG@192.168.1.75:554/11";&#xA;        //filename = "c:\\1.avi";&#xA;        outfilename = "C:\\2.MP4";&#xA;    &#xA;        //We open a flow of video (it is the file or the camera). &#xA;        ERRORS = avformat_open_input (&amp; AVfc, filename, NULL, NULL);&#xA;        if (ERRORS &lt;0) {&#xA;            fprintf (stderr, "ffmpeg: could not open file \n");&#xA;            return-1;&#xA;        }&#xA;    &#xA;        //After opening, we can print out information on the video file (iformat = the name of a format; &#xA;        //duration = duration). But as I connected the camera to me wrote: Duration: N/A, &#xA;        //start: 0.000000, bitrate: N/A&#xA;        printf ("Format %s, duration %lld us", AVfc-> iformat-> long_name, AVfc-> duration);&#xA;    &#xA;    &#xA;        ERRORS = avformat_find_stream_info (AVfc, NULL);&#xA;        if (ERRORS &lt;0) {&#xA;            fprintf (stderr, "ffmpeg: Unable to find stream info\n");&#xA;            return-1;&#xA;        }&#xA;    &#xA;    &#xA;        int CountStream;&#xA;    &#xA;        //We learn quantity of streams. &#xA;        CountStream = AVfc-> nb_streams;&#xA;    &#xA;        //Let&#x27;s look for the codec. &#xA;        int video_stream;&#xA;        for (video_stream = 0; video_stream  nb_streams; &#x2B;&#x2B; video_stream) {&#xA;            if (AVfc-> streams[video_stream]-> codecpar-> codec_type == AVMEDIA_TYPE_VIDEO) {&#xA;                break;&#xA;            }&#xA;    &#xA;        }&#xA;    &#xA;        if (video_stream == AVfc-> nb_streams) {&#xA;            fprintf (stderr, "ffmpeg: Unable to find video stream\n");&#xA;            return-1;&#xA;        }&#xA;    &#xA;        //Here we define a type of the codec, for my camera it is equal as AV_CODEC_ID_HEVC (This that in what is broadcast by my camera)&#xA;        codec = avcodec_find_decoder(AVfc-> streams [video_stream]-> codecpar-> codec_id);&#xA;        //--------------------------------------------------------------------------------------&#xA;    &#xA;        //Functions for inquiry of opportunities of libavcodec,&#xA;        AVCodecContext_ = avcodec_alloc_context3(codec);&#xA;        if (! AVCodecContext _) {&#xA;            fprintf (stderr, "Was not succeeded to allocate a video codec context, since it not poddrerzhivayetsya\n");&#xA;            exit(1);&#xA;        }&#xA;    &#xA;        //This function is used for initialization &#xA;        //AVCodecContext of video and audio of the codec. The announcement of avcodec_open2 () is in libavcodecavcodec.h&#xA;        //We open the codec. &#xA;    &#xA;        ERRORS = avcodec_open2 (AVCodecContext _, codec, NULL);&#xA;        if (ERRORS &lt;0) {&#xA;            fprintf (stderr, "ffmpeg: It is not possible to open codec \n");&#xA;            return-1;&#xA;        }&#xA;    &#xA;        //It for processing of a sound - a reserve.&#xA;        //swr_alloc_set_opts ()&#xA;        //swr_init (); &#xA;    &#xA;        //To output all information on the video file. &#xA;        av_dump_format (AVfc, 0, argv[1], 0);&#xA;    &#xA;        //=========================================================================================&#xA;        //Further, we receive frames. before we only received all infomration about the entering video.&#xA;        //=========================================================================================&#xA;    &#xA;        //Now we are going to read packages from a stream and to decode them in shots, but at first &#xA;        //we need to mark out memory for both components (AVPacket and AVFrame).&#xA;        frame = av_frame_alloc ();&#xA;    &#xA;        if (! frame) {&#xA;            fprintf (stderr, "Is not possible to mark out memory for video footage \n");&#xA;            exit(1);&#xA;        }&#xA;        //We mark out memory for a package &#xA;        pkt = av_packet_alloc ();&#xA;        //We define a file name for saving the picture.&#xA;        const char * FileName1 = "C:\\Users\\Павел\\Desktop\\NyFile.PGM";&#xA;        //Data reading if they is. &#xA;        while (av_read_frame (AVfc, pkt)> = 0) {&#xA;            //It is a package from a video stream? Because there is still a soundtrack.&#xA;            if (pkt-> stream_index == video_stream) {&#xA;                int ret;&#xA;    &#xA;                //Transfer of the raw package data as input data in the decoder&#xA;                ret = avcodec_send_packet (AVCodecContext _, pkt);&#xA;                if (ret &lt;0 | | ret == AVERROR(EAGAIN) | | ret == AVERROR_EOF) {&#xA;                    std:: cout &lt;&lt;"avcodec_send_packet:" &lt;<ret while="while"> = 0) {&#xA;    &#xA;                    //Returns the decoded output data from the decoder or the encoder&#xA;                    ret = avcodec_receive_frame (AVCodecContext _, frame);&#xA;                    if (ret == AVERROR(EAGAIN) | | ret == AVERROR_EOF) {&#xA;                        //std:: cout &lt;&lt;"avcodec_receive_frame:" &lt;<ret cout="cout"> of frame_number &lt;/============================================================================================&#xA;    &#xA;                    //Experimentally - we will keep a shot in the picture. &#xA;    &#xA;                    save_gray_frame(frame-> data [0], frame-> linesize [0], frame-> width, frame-> height, (char *) FileName1);&#xA;                }&#xA;            }&#xA;        }&#xA;    &#xA;        //av_parser_close(parser);&#xA;        avcodec_free_context (&amp; AVCodecContext _);&#xA;        av_frame_free (&amp; frame);&#xA;        av_packet_free (&amp; pkt);&#xA;    &#xA;        return 0;&#xA;</ret></ret>

    &#xA;

  • VLC and ffplay not receiving video from RTMP stream on Nginx

    14 janvier, par Ekobadd

    I'm streaming via OBS 30.1.2 to an RTMP server on a digitalocean droplet. The server is running on nginx 1.26.0 using the RTMP plugin (libnginx-mod-rtmp in apt).

    &#xA;

    OBS is configured to output H.264-encoded, 1200kbps, 24fps, 1920x1080 video and aac-encoded, stereo, 44.1kHz, 160kbps audio.

    &#xA;

    Below is the minimal reproducible example. When I attempt to play the rtmp stream with ffplay or VLC, it's a random chance whether I get video or not. Audio is always fine. The output from ffplay or ffprobe (example below) occasionally does not show any video stream.

    &#xA;

    rtmp {&#xA;        server {&#xA;                listen 1935;&#xA;                chunk_size 4096;&#xA;&#xA;                application ingest {&#xA;                        live on;&#xA;                        record off;&#xA;&#xA;                        allow publish <my ip="ip" address="address">;&#xA;                        deny publish all;&#xA;&#xA;                        allow play all;&#xA;                }&#xA;        }&#xA;}&#xA;</my>

    &#xA;

    The server has two applications, "ingest" and "live", the former uses the following ffmpeg command to transcode the stream and create a corresponding stream on the latter application :

    &#xA;

    exec_push ffmpeg -i rtmp://localhost/ingest/$name -b:v 1200k -c:v libx264 -c:a aac -ar 44100 -ac 1 -f flv -preset veryfast -tune zerolatency rtmp://localhost/live/$name 2>>/tmp/rtmp-ingest-$name.log;&#xA;

    &#xA;

    As you can see, this produces a log which shows the following :

    &#xA;

    Output #0, flv, to &#x27;rtmp://localhost/live/ekobadd&#x27;:&#xA;  Metadata:&#xA;    |RtmpSampleAccess: true&#xA;    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)&#xA;    displayWidth    : 1920&#xA;    displayHeight   : 1080&#xA;    fps             : 23&#xA;    profile         :&#xA;    level           :&#xA;    encoder         : Lavf61.1.100&#xA;  Stream #0:0: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, mono, fltp, 69 kb/s&#xA;      Metadata:&#xA;        encoder         : Lavc61.3.100 aac&#xA;

    &#xA;

    The video is not present, though I can see on the digitalocean control panel that the server is pulling 1.2Mbps inbound, which is about the same as my OBS video bitrate. And, although the ffmpeg instance which is transcoding does not appear to see the video stream from the ingest application, ffprobe from my local machine does, sometimes :

    &#xA;

    > ffprobe rtmp://mydomain.com/ingest/ekobadd&#xA;...&#xA;Input #0, flv, from &#x27;rtmp://mydomain.com/ingest/ekobadd&#x27;:   0B f=0/0&#xA;  Metadata:&#xA;    |RtmpSampleAccess: true&#xA;    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)&#xA;    displayWidth    : 1920&#xA;    displayHeight   : 1080&#xA;    fps             : 23&#xA;    profile         :&#xA;    level           :&#xA;  Duration: 00:00:00.00, start: 122.045000, bitrate: N/A&#xA;  Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 163 kb/s&#xA;  Stream #0:1: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 1228 kb/s, 23 fps, 23.98 tbr, 1k tbn&#xA;     126.24 A-V: -1.071 fd=   0 aq=   54KB vq=  161KB sq=    0B f=0/0&#xA;

    &#xA;

    Sometimes, however, it doesn't see the stream at all :

    &#xA;

    [rtmp @ 0000022d87d0fe00] Server error: No such stream&#xA;rtmp://mydomain.com/ingest/ekobadd: Operation not permitted&#xA;

    &#xA;

    Testing the stream with VLC gives the same results.

    &#xA;

    Of course, the "live" application also doesn't have video. I have, however, streamed video from it before. I assume if I restart nginx enough, that the exec_push ffmpeg command will randomly see the video stream much like ffprobe does. I also have HLS and DASH configured, and they're both working perfect if you're a radio talk show host.

    &#xA;

    /etc/nginx/nginx.conf : (I'm quite sure I never touched anything in the HTTP section, but it's included just in case)

    &#xA;

    rtmp {&#xA;        server {&#xA;                listen 1935;&#xA;                chunk_size 8192;&#xA;&#xA;                idle_streams off;&#xA;&#xA;                application ingest {&#xA;                        live on;&#xA;                        record off;&#xA;&#xA;                        # Transcode to h264/aac via flv, 1.2Mbps 24fps 44.1kHz, single audio channel video (HLS Ready)&#xA;                        exec_push ffmpeg -i rtmp://localhost/ingest/$name -b:v 1200k -c:v libx264 -c:a aac -ar 44100 -ac 1 -f flv -preset veryfast -tune zerolatency rtmp://localhost/live/$name 2>>/tmp/rtmp-ingest-$name.log;&#xA;&#xA;                        allow publish <my ip="ip" address="address">;&#xA;                        deny publish all;&#xA;&#xA;                        allow play all; # This was added for debugging.&#xA;                }&#xA;&#xA;                application live {&#xA;                        live on;&#xA;                        record off;&#xA;&#xA;                        hls on;&#xA;                        hls_path /var/www/mydomain.com/html/live/hls;&#xA;                        hls_fragment 6s;&#xA;                        hls_playlist_length 60;&#xA;&#xA;                        dash on;&#xA;                        dash_path /var/www/mydomain.com/html/live/dash;&#xA;&#xA;                        allow publish 127.0.0.1;&#xA;                        deny publish all;&#xA;&#xA;                        allow play all;&#xA;                }&#xA;        }&#xA;}&#xA;&#xA;http {&#xA;&#xA;        ##&#xA;        # Basic Settings&#xA;        ##&#xA;&#xA;        sendfile on;&#xA;        tcp_nopush on;&#xA;        types_hash_max_size 2048;&#xA;        server_tokens build; # Recommended practice is to turn this off&#xA;&#xA;        server_names_hash_bucket_size 64;&#xA;        # server_name_in_redirect off;&#xA;&#xA;        include /etc/nginx/mime.types;&#xA;        default_type application/octet-stream;&#xA;&#xA;        ##&#xA;        # SSL Settings&#xA;        ##&#xA;&#xA;        ssl_protocols TLSv1.2 TLSv1.3; # Dropping SSLv3 (POODLE), TLS 1.0, 1.1&#xA;        ssl_prefer_server_ciphers off; # Don&#x27;t force server cipher order.&#xA;&#xA;        ##&#xA;        # Logging Settings&#xA;        ##&#xA;&#xA;        access_log /var/log/nginx/access.log;&#xA;&#xA;        ##&#xA;        # Gzip Settings&#xA;        ##&#xA;&#xA;        gzip on;&#xA;&#xA;        # gzip_vary on;&#xA;        # gzip_proxied any;&#xA;        # gzip_comp_level 6;&#xA;        # gzip_buffers 16 8k;&#xA;        # gzip_http_version 1.1;&#xA;        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml&#x2B;rss text/javascript;&#xA;&#xA;        ##&#xA;        # Virtual Host Configs&#xA;        ##&#xA;&#xA;        include /etc/nginx/conf.d/*.conf;&#xA;        include /etc/nginx/sites-enabled/*;&#xA;}&#xA;</my>

    &#xA;

    /etc/nginx/sites-available/mydomain.com :

    &#xA;

    server {&#xA;        listen 443 ssl;&#xA;&#xA;        ssl_certificate     /etc/letsencrypt/live/mydomain.com/fullchain.pem;&#xA;        ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;&#xA;        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;&#xA;        ssl_ciphers         HIGH:!aNULL:!MD5;&#xA;&#xA;        root /var/www/mydomain.com/html;&#xA;&#xA;        server_name mydomain.com www.mydomain.com;&#xA;&#xA;        location / {&#xA;                root /var/www/mydomain.com/html/live;&#xA;&#xA;#               add_header Cache-Control no-cache;&#xA;                add_header Access-Control-Allow-Origin *;&#xA;        }&#xA;}&#xA;&#xA;types {&#xA;#       application/vnd.apple.mpegurl m3u8;&#xA;        application/dash&#x2B;xml mpd;&#xA;}&#xA;

    &#xA;