Recherche avancée

Médias (2)

Mot : - Tags -/doc2img

Autres articles (48)

  • Qu’est ce qu’un éditorial

    21 juin 2013, par

    Ecrivez votre de point de vue dans un article. Celui-ci sera rangé dans une rubrique prévue à cet effet.
    Un éditorial est un article de type texte uniquement. Il a pour objectif de ranger les points de vue dans une rubrique dédiée. Un seul éditorial est placé à la une en page d’accueil. Pour consulter les précédents, consultez la rubrique dédiée.
    Vous pouvez personnaliser le formulaire de création d’un éditorial.
    Formulaire de création d’un éditorial Dans le cas d’un document de type éditorial, les (...)

  • List of compatible distributions

    26 avril 2011, par

    The table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
    If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...)

  • Les images

    15 mai 2013

Sur d’autres sites (5628)

  • How to record frames with ffmpeg and finish the recording

    20 février 2024, par Jorge Augusto Wilchen

    In the following code, i trying to create a class to record frames from an IP camera (RTSP), save frames on a .avi file and finish the record, but, when i kill the operation, the video file may be corrupted. Have any other more safely way to stop the ffmpeg recording ?

    


    .cpp file :

    


    #include "videorecorder.h"


VideoRecorder::VideoRecorder(const std::string& rtspUrl) :
    url(rtspUrl),
    recording(false)
{

}

VideoRecorder::~VideoRecorder()
{
    end_record();
}

bool VideoRecorder::start_record(const std::string &fileName)
{
    if (recording) {
        std::cerr << "Already recording." << std::endl;
        return false;
    }

    std::string command = "ffmpeg -rtsp_transport udp -i " + url
                          + " -c:v mjpeg -preset fast -qp 0 " + fileName;

    videoWriter = popen(command.c_str(), "w");
    if (!videoWriter) {
        std::cerr << "Error opening ffmpeg process." << std::endl;
        return false;
    }

    recording = true;
    ffmpegProcessId = getpid();
    std::cout << "Recording started." << std::endl;
    return true;
}

bool VideoRecorder::end_record()
{
    if (recording) {
        if (videoWriter) {
            pid_t ffmpegPID = fileno(videoWriter);

            if (kill(ffmpegPID, SIGTERM) == 0) {
                std::cout << "Recording terminated successfully." << std::endl;
            } else {
                std::cerr << "Error terminating recording." << std::endl;
                return false;
            }

            int status = pclose(videoWriter);

            if (status == 0) {
                std::cout << "Recording ended successfully." << std::endl;
            } else {
                std::cerr << "Error ending recording. pclose status: " << status << std::endl;
                return false;
            }
        } else {
            std::cerr << "Error ending recording. videoWriter is nullptr." << std::endl;
            return false;
        }

        recording = false;
        return true;
    }

    return false;
}


    


    .h file :

    


    #ifndef VIDEORECORDER_H&#xA;#define VIDEORECORDER_H&#xA;&#xA;#include <string>&#xA;#include <iostream>&#xA;#include <fstream>&#xA;#include <cstdlib>&#xA;#include <csignal>&#xA;#include <sys></sys>wait.h>&#xA;&#xA;extern "C" {&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavutil></libavutil>avutil.h>&#xA;#include <libavutil></libavutil>opt.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;#include &#xA;}&#xA;&#xA;#include <linux></linux>videodev2.h>&#xA;&#xA;#include <opencv2></opencv2>opencv.hpp>&#xA;#include <opencv2></opencv2>videoio.hpp>&#xA;#include <opencv2></opencv2>highgui/highgui.hpp>&#xA;&#xA;&#xA;class VideoRecorder&#xA;{&#xA;public:&#xA;    VideoRecorder(const std::string&amp; rtspUrl);&#xA;    ~VideoRecorder();&#xA;    bool start_record(const std::string&amp; fileName);&#xA;    bool end_record();&#xA;&#xA;private:&#xA;    std::string url;&#xA;    AVFormatContext *formatContext;&#xA;    AVStream *videoStream;&#xA;    AVCodecContext *codecContext;&#xA;    AVCodec *codec;&#xA;    SwsContext *swsContext;&#xA;    AVFrame *frame;&#xA;    AVPacket packet;&#xA;    bool recording;&#xA;    pid_t ffmpegProcessId;&#xA;    FILE* videoWriter;&#xA;};&#xA;&#xA;#endif // VIDEORECORDER_H&#xA;</csignal></cstdlib></fstream></iostream></string>

    &#xA;

    I'm using the ffmpeg lib becouse i need max speed on frames recording, and OpenCV and AV Lib is much slowness than ffmpeg.

    &#xA;

    This my terminal output after recording during 10 seconds (generated a file with 23 seconds duration) :

    &#xA;

    Recording started.&#xA;ffmpeg version 4.3.6-0&#x2B;deb11u1&#x2B;rpt5 Copyright (c) 2000-2023 the FFmpeg developers&#xA;  built with gcc 10 (Debian 10.2.1-6)&#xA;  configuration: --prefix=/usr --extra-version=0&#x2B;deb11u1&#x2B;rpt5 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-mmal --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --enable-sand --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared&#xA;  libavutil      56. 51.100 / 56. 51.100&#xA;  libavcodec     58. 91.100 / 58. 91.100&#xA;  libavformat    58. 45.100 / 58. 45.100&#xA;  libavdevice    58. 10.100 / 58. 10.100&#xA;  libavfilter     7. 85.100 /  7. 85.100&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  7.100 /  5.  7.100&#xA;  libswresample   3.  7.100 /  3.  7.100&#xA;  libpostproc    55.  7.100 / 55.  7.100&#xA;Input #0, rtsp, from &#x27;rtsp://admin:[password]@[ip]:[port]/live/0/MAIN&#x27;:&#xA;  Metadata:&#xA;    title           : RTSP Server&#xA;  Duration: N/A, start: 0.280000, bitrate: N/A&#xA;    Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080, 25 fps, 25 tbr, 90k tbn, 50 tbc&#xA;Codec AVOption preset (Configuration preset) specified for output file #0 (/home/guardian-tech/Pictures/output_frame.avi) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.&#xA;Codec AVOption qp (Constant quantization parameter rate control method) specified for output file #0 (/home/guardian-tech/Pictures/output_frame.avi) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))&#xA;Press [q] to stop, [?] for help&#xA;Output #0, avi, to &#x27;/home/guardian-tech/Pictures/output_frame.avi&#x27;:&#xA;  Metadata:&#xA;    INAM            : RTSP Server&#xA;    ISFT            : Lavf58.45.100&#xA;    Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj420p(pc), 1920x1080, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc&#xA;    Metadata:&#xA;      encoder         : Lavc58.91.100 mjpeg&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A&#xA;[rtsp @ 0x5592e7bb00] max delay reached. need to consume packet&#xA;[rtsp @ 0x5592e7bb00] RTP: missed 212 packets&#xA;[h264 @ 0x5592ebb790] concealing 2192 DC, 2192 AC, 2192 MV errors in I frame&#xA;rtsp://admin:[password]@[ip]:[port]/live/0/MAIN: corrupt decoded frame in stream 0&#xA;[rtsp @ 0x5592e7bb00] max delay reached. need to consume packet&#xA;[rtsp @ 0x5592e7bb00] RTP: missed 6 packets&#xA;[rtsp @ 0x5592e7bb00] max delay reached. need to consume packet&#xA;[rtsp @ 0x5592e7bb00] RTP: missed 14 packets&#xA;[h264 @ 0x5592f1bd30] cabac decode of qscale diff failed at 42 29&#xA;[h264 @ 0x5592f1bd30] error while decoding MB 42 29, bytestream 0&#xA;[h264 @ 0x5592f1bd30] concealing 4687 DC, 4687 AC, 4687 MV errors in I frame&#xA;rtsp://admin:[password]@[ip]:[port]/live/0/MAIN: corrupt decoded frame in stream 0&#xA;Error terminating recording.&#xA;

    &#xA;

  • How to record live streamed video from rtsp url in android

    22 mars 2017, par Astro

    I am doing an android application. In my application I need to record live streamed video.And here I am using rtsp protocol and ffmpeg library to stream and record video.Live streaming is working properly, but video recording is not working. I think it’s a problem of URL Connection I am used here to record video.But I don’t know what is the correct connection method.I search lot about this, but can’t find anything. If anybody know this please help me.

    This is my startRecording() method

    private void startRecording() {

       try {

           URL url = new URL(path);
           URLConnection urlConnection1 = url.openConnection();
           in1 = new BufferedInputStream(urlConnection1.getInputStream());

       } catch (IOException e) {
           e.printStackTrace();
       }

       try {

           mIn = new MjpegInputStream(in1,MIN_ARRAY_LENGTH);
           mIn.resetFrameCount();
         //  return new MjpegInputStream(in, MIN_ARRAY_LENGTH);
           recorder.start();
           calltimer();

           audioStatus = Micstatus.equals("1");
           startTime = 0;
           completedFrames = 0;
           audioCompleted = 0;

           isRecording = true;
           if (isJelliBean) {
               resetTextureLayout();
           }
           trial.setCanZoom(isRecording);
           setMenuEnabled();

           threadVideo = new VideoRecording();
           threadVideo.start();

           if (audioStatus) {
               threadAudio = new AudioRecordRunnables();
               threadAudio.start();
           }


       } catch (Exception e) {
           try {

               isRecording = false;
               trial.setCanZoom(isRecording);
               setMenuEnabled();

               Toast.makeText(getApplicationContext(), "Try again1", Toast.LENGTH_SHORT).show();
           } catch (Exception e1) {
           }
       }

    }

    This is my ViedoRecording class

    private class VideoRecording extends Thread implements Runnable {

       public void run() {
           try {


               int i = -1;
               int cc = 0;
               int completed = 0;

               FileOutputStream out;
               RecordingHelper recordingHelper;
               try {
                   Thread.sleep(VIDEO_FRAME_RATE &lt; 6 ? 2000 : 300);
               } catch (Exception e) {

               }
               String file = getCacheDir() + "/temp.jpg";
               opencv_core.IplImage iplImage;
               runOnUiThread(videoTimeRunnable);

               while (isRecording || completed &lt; mIn.totalFrames || true)             {
                   try {
                       if (cc &lt; 10) {
                           cc++;
                       }

                       if (i > (MIN_ARRAY_LENGTH - 2)) {
                           i = -1;
                       }
                       recordingHelper = mIn.datas[i + 1];


                       if (recordingHelper != null &amp;&amp; recordingHelper.length > 1) {
                           i++;
                           completed++;
                           if (startTime == 0) {
                               startTime = System.currentTimeMillis();
                           }

                           completedFrames++;


                           out = new FileOutputStream(file);
                           out.write(recordingHelper.data);
                           out.flush();

                           out.close();

                           Log.e("recording", "=" + recordingHelper.rotaion);
                           iplImage = cvLoadImage(file, 1);

                           OpenCVFrameConverter.ToIplImage grabberConverter = new OpenCVFrameConverter.ToIplImage();
                           Frame frame = grabberConverter.convert(iplImage);
                           recorder.record(frame);
                           opencv_core.cvReleaseImage(iplImage);
                           mIn.datas[i] = null;
                           totalFramesRecordedByActivity++;
                           runOnUiThread(videoTimeRunnable);

                       } else if (!isRecording &amp;&amp; startTime > 0) {
                           break;
                       } else if (cc > 5 &amp;&amp; mIn.totalFrames &lt; 1) {
                           break;
                       }

                   } catch (Exception e) {

                   }

               }

               new File(file).delete();
               endTime = System.currentTimeMillis();
               videoThreadFinished = true;

               finalizeRecording();


           } catch (Throwable t) {
               finishThis();

           }

       }
    }
  • gstreamer Buffer has no PTS when trying to record video from rtsp stream which is patchy [closed]

    7 novembre 2023, par cat_19_nab

    Getting the following error when trying to record using gst-launch

    &#xA;

    gst-launch-1.0  rtspsrc location="rtsp://live/video0" ! rtph265depay ! h265parse !  queue ! filesink sync=0 ! splitmuxsink location=video.mp4&#xA;

    &#xA;

    &#xA;

    ERROR : from element /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstMP4Mux:muxer : Could not multiplex stream.&#xA;Additional debug info :&#xA;../gst/isomp4/gstqtmux.c(5402) : gst_qt_mux_add_buffer () : /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstMP4Mux:muxer :&#xA;Buffer has no PTS.

    &#xA;

    &#xA;