
Recherche avancée
Médias (3)
-
MediaSPIP Simple : futur thème graphique par défaut ?
26 septembre 2013, par
Mis à jour : Octobre 2013
Langue : français
Type : Video
-
GetID3 - Bloc informations de fichiers
9 avril 2013, par
Mis à jour : Mai 2013
Langue : français
Type : Image
-
GetID3 - Boutons supplémentaires
9 avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
Autres articles (98)
-
Submit bugs and patches
13 avril 2011Unfortunately a software is never perfect.
If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
You may also (...) -
Librairies et logiciels spécifiques aux médias
10 décembre 2010, parPour un fonctionnement correct et optimal, plusieurs choses sont à prendre en considération.
Il est important, après avoir installé apache2, mysql et php5, d’installer d’autres logiciels nécessaires dont les installations sont décrites dans les liens afférants. Un ensemble de librairies multimedias (x264, libtheora, libvpx) utilisées pour l’encodage et le décodage des vidéos et sons afin de supporter le plus grand nombre de fichiers possibles. Cf. : ce tutoriel ; FFMpeg avec le maximum de décodeurs et (...) -
Keeping control of your media in your hands
13 avril 2011, parThe vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)
Sur d’autres sites (10540)
-
avutil/mips : refactor msa SLDI_Bn_0 and SLDI_Bn macros.
6 août 2019, par gxwavutil/mips : refactor msa SLDI_Bn_0 and SLDI_Bn macros.
Changing details as following :
1. The previous order of parameters are irregular and difficult to
understand. Adjust the order of the parameters according to the
rule : (RTYPE, input registers, input mask/input index/..., output registers).
Most of the existing msa macros follow the rule.
2. Remove the redundant macro SLDI_Bn_0 and use SLDI_Bn instead.Reviewed-by : Shiyou Yin <yinshiyou-hf@loongson.cn>
Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>- [DH] libavcodec/mips/h264dsp_msa.c
- [DH] libavcodec/mips/h264qpel_msa.c
- [DH] libavcodec/mips/hevc_lpf_sao_msa.c
- [DH] libavcodec/mips/hevcpred_msa.c
- [DH] libavcodec/mips/hpeldsp_msa.c
- [DH] libavcodec/mips/me_cmp_msa.c
- [DH] libavcodec/mips/qpeldsp_msa.c
- [DH] libavcodec/mips/vp8_mc_msa.c
- [DH] libavcodec/mips/vp9_idct_msa.c
- [DH] libavcodec/mips/vp9_lpf_msa.c
- [DH] libavcodec/mips/vp9_mc_msa.c
- [DH] libavutil/mips/generic_macros_msa.h
-
FFmpeg playable MP4 segmented video from RTSP
5 février 2021, par Michael NovotnýI have problem with creating playable uncomplete MP4 file created from FFMPEG. In my case I have some infinite RTSP stream (h.264) from IP camera.
My target is record this stream to MP4 files for playback. If i use FFMPEG mp4 muxer, work correctly.


/usr/bin/ffmpeg -progress pipe:5 -use_wallclock_as_timestamps 1 -analyzeduration 10000000 -probesize 10000000 -fflags +igndts -rtsp_transport tcp -hwaccel auto -loglevel warning -i rtsp://****:****@*******:****/ -y -an -vcodec copy -strict experimental -movflags frag_keyframe+empty_moov -f segment -segment_format mp4 -segment_format_options movflags=+faststart -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 -segment_time 15 /Shinobi/videos/bWkwjTWdRt/Rm67cYyq50/test-%S.mp4



FFMPEG will create one MP4 file which still increasing its size. If I try copy or simply open this (uncomplete, still increased ... of course :) ) file, it's correcly play. But it's still only one file ... still bigger and bigger. For long-term recording cam (few weeks) it's not good.
I want segment this stream to multiple smaller MP4 files (as you knows from another typical NVR systems). For example : segment for 30minutes.
I used "segment" muxer.


/usr/bin/ffmpeg -progress pipe:5 -use_wallclock_as_timestamps 1 -analyzeduration 10000000 -probesize 10000000 -fflags +igndts -rtsp_transport tcp -hwaccel auto -loglevel warning -i rtsp://*****:****@*********:****/ -y -an -vcodec copy -strict -2 -movflags frag_keyframe+empty_moov -f mp4 -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 -segment_list pipe:8 -segment_time 15 /Shinobi/videos/bWkwjTWdRt/Rm67cYyq50/test-%S.mp4



It looks like work correctly. New file with defined mask is created every 30 minutes. If I try copy or simply open(and play) anyone "completed 30min segment file" it"s works correctly. Problem is with last file (more precisely : newest, still uncompleted last segment file) - it's not playable (moov atom not found).


I Googled my problem many time with another keywords. I was try many my wonders. I readed FFMPEG documentation maybe 5times.


Problem is with second passthroug which "segment muxer" do (which do -movflags +faststart .. for example). It's logicaly, second passthroug not be did in last(newest) file yet.


Is there way to make it work ? If I want see time for 2-3 mins ago it's no possible wait up to 30minutes for "complete segment" ... and at the same time it is not possible to have a billion files with 2-3sec segments.
How did other NVR systems solve this ? Synology, Hikvision and more has in their file system recorded MP4 soubory which one of them is still uncompleted, still growing, but normaly PLAYABLE.


A few last days I tried this with no success. I'am absolutely angry and sad. I hope that my text is understandable


Thank you


This options has no effect in my case (tried) :


-movflags frag_keyframe+empty_moov


-movflags faststart


-movflags separate_moof


-fragsize *** / -fragtime ***


-strict -2 / -strict experimental


-
Prevent FFmpeg from closing when a named pipe has been read completely
21 octobre 2019, par Werther BerselliI’m doing a C++ application for a university project that takes a video file (e.g. matroska) and using FFmpeg (embedding commands inside
std::system()
instructions) apply these steps :-
Extract chunks of frames (e.g. 10 seconds per chunk) and chunks of .aac audio
-
Apply some filters to frames
-
Encode video chunk and audio chunk with x264 and send it to a listening client using RTSP. This step is achieved using two named pipes, one for video and one for audio.
-
Receive the stream into another process and play it using ffplay (on localhost or lan).
I need to divide my stream in chunks because I need eventually to satisfy real-time constraints, so I can’t apply filters before to my entire input video file and only then start streaming to client.
My primary problem here is that once FFmpeg has emptied the two pipes, it close ; but other chunks of video and audio have still to be piped and streamed. I need FFmpeg to listen to the pipes waiting for new data.In bash I achieved this with the following commands.
Start to listen in a prompt for a RTSP stream :
ffplay -rtsp_flags listen rtsp://127.0.0.1@127.0.0.1:8090
Create a video named pipe and an audio named pipe :
mkfifo video_pipe
mkfifo audio_pipeUse this command to prevent FFmpeg to close when video pipe is emptied :
exec 7<>video_pipe
(it is sufficient to apply it to the pipe video and neither will the audio pipe give problems)
Activate FFmpeg command
ffmpeg -probesize 2147483647 -re -s 1280x720 -pix_fmt rgb24 -i pipe:0 -vsync 0 -i audio_pipe -r 25 -vcodec libx264 -crf 23 -preset ultrafast -f rtsp -rtsp_transport tcp rtsp://127.0.0.1@127.0.0.1:8090 < video_pipe
And then feed the pipes in another prompt :
cat audiochunk.aac > audio_pipe & cat frame*.bmp > video_pipe
These commands work well using 3 prompts, then I tried them in C++ embedding commands in
std::system()
instructions (using different threads) ; everything works, but once ffmpeg command empty the video pipe (finishing first chunk), it closes.
exec
command seems to be uneffective here.
How could I prevent FFmpeg from closing ?Two days struggling on that problem, viewing all possible internet solution. I hope I was clear despite a great headache, thanks for your suggestions in advance.
UPDATE :
My C++ code is something like this ; I putted it in a single function on a single thread, but it doesn’t change it’s behaviour.
I’m on Ubuntu 18.04.2void CameraThread::ffmpegJob()
{
std::string strvideo_length, command, timing;
long video_length, begin_chunk, end_chunk;
int begin_h, begin_m, begin_s, end_h, end_m, end_s;
command = "ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 " + Configurations::file_name;
strvideo_length = execCmd(command.c_str());
strvideo_length.pop_back(); // remove \n character
video_length = strToPositiveDigit(strvideo_length);
if(video_length == -1)
{
std::cout << "Invalid input file";
return;
}
std::system("bash -c \"rm mst-temp/mst_video_pipe\"");
std::system("bash -c \"rm mst-temp/mst_audio_pipe\"");
std::system("bash -c \"mkfifo mst-temp/mst_video_pipe\"");
std::system("bash -c \"mkfifo mst-temp/mst_audio_pipe\"");
// Keep video pipe opened
std::system("bash -c \"exec 7<>mst-temp/mst_video_pipe\"");
std::string rtsp_url = "rtsp://" + Configurations::my_own_used_ip + "@" + Configurations::client_ip +
":" + std::to_string(Configurations::port + 1);
command = "ffmpeg -probesize 2147483647 -re -s 1280x720 -pix_fmt rgb24 -i pipe:0 "
"-i mst-temp/mst_audio_pipe -r 25 -vcodec libx264 -crf 23 -preset ultrafast -f rtsp "
"-rtsp_transport tcp " + rtsp_url + " < mst-temp/mst_video_pipe &"; // Using & to continue without block on command
std::system(command.c_str());
begin_chunk = -1 * VIDEO_CHUNK;
end_chunk = 0;
// Extract the complete audio track
command = "bash -c \"ffmpeg -i " + Configurations::file_name + " -vn mst-temp/audio/complete.aac -y\"";
std::system(command.c_str());
while(true)
{
// Define the actual video chunk (in seconds) to use, if EOF is reached, exit
begin_chunk += (end_chunk - begin_chunk);
if(begin_chunk == video_length)
break;
if(end_chunk + VIDEO_CHUNK <= video_length)
end_chunk += VIDEO_CHUNK;
else
end_chunk += (video_length - end_chunk);
// Set begin and end H, M, S variables
begin_h = static_cast<int>(begin_chunk / 3600);
begin_chunk -= (begin_h * 3600);
begin_m = static_cast<int>(begin_chunk / 60);
begin_chunk -= (begin_m * 60);
begin_s = static_cast<int>(begin_chunk);
end_h = static_cast<int>(end_chunk / 3600);
end_chunk -= (end_h * 3600);
end_m = static_cast<int>(end_chunk / 60);
end_chunk -= (end_m * 60);
end_s = static_cast<int>(end_chunk);
// Extract bmp frames and audio from video chunk
// Extract frames
timing = " -ss " + std::to_string(begin_h) + ":" + std::to_string(begin_m) +
":" + std::to_string(begin_s) + " -to " + std::to_string(end_h) +
":" + std::to_string(end_m) + ":" + std::to_string(end_s);
command = "bash -c \"ffmpeg -i " + Configurations::file_name + timing +
" -compression_algo raw -pix_fmt rgb24 mst-temp/frames/output%03d.bmp\"";
std::system(command.c_str());
// Extract audio
command = "bash -c \"ffmpeg -i mst-temp/audio/complete.aac" + timing +
" -vn mst-temp/audio/audiochunk.aac -y\"";
std::system(command.c_str());
// Apply elaborations on audio and frames.........................
// Write modified audio and frames to streaming pipes
command = "bash -c \"cat mst-temp/audio/audiochunk.aac > mst-temp/mst_audio_pipe & "
"cat mst-temp/frames/output*.bmp > mst-temp/mst_video_pipe\"";
std::system(command.c_str());
}
}
</int></int></int></int></int></int> -