
Recherche avancée
Médias (1)
-
The Great Big Beautiful Tomorrow
28 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Texte
Autres articles (40)
-
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...) -
De l’upload à la vidéo finale [version standalone]
31 janvier 2010, parLe chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
Upload et récupération d’informations de la vidéo source
Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...) -
Support audio et vidéo HTML5
10 avril 2011MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)
Sur d’autres sites (8528)
-
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> -
-
How do I get duration of an In Memory Video in Python / Django ?
19 juillet, par Lucas TononSo I was successfully using the following code to get the duration of a saved video in Django.



def get_video_length(file_path):
command = [
 'ffprobe',
 '-v',
 'error',
 '-show_entries',
 'format=duration',
 '-of',
 'default=noprint_wrappers=1:nokey=1',
 file_path
 ]

try:
 output = check_output( command, stderr=STDOUT ).decode()
except CalledProcessError as e:
 output = e.output.decode()

return output




But now I need to get the duration of an uploaded file before saving it.
I have a serializer with a FileField and on validate method I should check the video duration.
For instance :



class VideoSerializer(serializers.Serializer):
video = serializers.FileField(required=True, validators=[validate_media_extension, validate_video_duration])




Then on validate_video_duration I needed to call some method like get_video_length, but I need an alternative to get the duration from the video in memory. The object that I have is an instance of InMemoryUploadedFile (https://docs.djangoproject.com/en/2.2/_modules/django/core/files/uploadedfile/)


-
Vcpkg building FFmpeg with libxml2
15 décembre 2019, par SubestimaFirst off all im a newbie in this area so if im asking something really stupid or non sense im sorry in advance, so lets get right to the point... im trying to add features to the ffmpeg, and by what i know i have to modify CONTROL file and portfile.cmake but as it seems its not enough i dont understand the errors and i cant get more info about this in the internet so if you could give me some info how to do it properly it would allready mean a lot to me ! i will leave the portions of code and error file
**portfile.cmake:**
if("libxml2" IN_LIST FEATURES)
set(OPTIONS "${OPTIONS} --enable-libxml2")
endif()
**CONTROL:**
Feature: libxml2
Description: Libxml2 is the XML C parser and toolkit developed for the Gnome project (but usable outside of the Gnome platform)
Build-Depends: zlib, libiconv, liblzma
**Command Prompt after (vcpkg install ffmpeg[libxml2]:x64-windows)**
CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:72 (message):
Command failed: C:/vcpkg/downloads/tools/msys2/msys64/usr/bin/bash.exe --noprofile --norc C:/vcpkg/ports/ffmpeg\build.sh C:/vcpkg/buildtrees/ffmpeg/x64-windows-rel C:/vcpkg/buildtrees/ffmpeg/src/n4.2-02d8c63f80 C:/vcpkg/packages/ffmpeg_x64-windows "--enable-asm --enable-yasm --disable-doc --enable-debug --enable-runtime-cpudetect --enable-libxml2 --disable-openssl --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-libvpx --disable-libx264 --disable-opencl --disable-lzma --disable-bzlib --enable-avresample --disable-static --enable-shared --extra-cflags=-DHAVE_UNISTD_H=0 --extra-cflags=-MD --extra-cxxflags=-MD"
Working Directory: C:/vcpkg/buildtrees/ffmpeg/x64-windows-rel
Error code: 1
See logs for more information:
C:\vcpkg\buildtrees\ffmpeg\build-x64-windows-rel-out.log
Call Stack (most recent call first):
ports/ffmpeg/portfile.cmake:197 (vcpkg_execute_required_process)
scripts/ports.cmake:94 (include)
Error: Building package ffmpeg:x64-windows failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with `.\vcpkg update`, then
submit an issue at https://github.com/Microsoft/vcpkg/issues including:
Package: ffmpeg:x64-windows
Vcpkg version: 2019.09.12-nohash**strong text**
**Log Error file:**
=== CONFIGURING === ERROR: libxml-2.0 not found using pkg-config
If you think configure made a mistake, make sure you are using the latest version from Git. If the latest version fails, report the problem to the ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. Include the log file "ffbuild/config.log" produced by configure as this will help solve the problem.Thank you for your attention,
Regards Pedro Cunha !