
Recherche avancée
Médias (1)
-
Rennes Emotion Map 2010-11
19 octobre 2011, par
Mis à jour : Juillet 2013
Langue : français
Type : Texte
Autres articles (43)
-
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 (...) -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Librairies et binaires spécifiques au traitement vidéo et sonore
31 janvier 2010, parLes logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
Binaires complémentaires et facultatifs flvtool2 : (...)
Sur d’autres sites (8976)
-
Treating a video stream as playback with pausing
21 janvier 2020, par kealistI am working on an application that streams multiple h264 video streams to a video wall. I am using libav/ffmpeg libs to stream multiple video files at once from inside the application. The application will control playback speed, seeking, pausing, resuming, stopping, and the video wall will only be receiving udp streams.
I want to implement streaming such that if the videos are paused, the same frame is sent continually so that it looks as if it is a video window in a paused state.
How can i insert copies of the same h264 frame into the stream so that it does not mess up sending of later frames ?
My code is almost an exact port of
transcoding.c
from ffmpeg.exe. Planning on retaining a copy of the last frame/packet, and when paused to send this. Is this likely to function properly, or should I approach this a different way.while (true)
{
if (paused) {
// USE LAST PACKET
}
else
{
if ((ret = ffmpeg.av_read_frame(ifmt_ctx, &packet)) < 0)
break;
}
stream_index = packet.stream_index;
type = ifmt_ctx->streams[packet.stream_index]->codec->codec_type;
Console.WriteLine("Demuxer gave frame of stream_index " + stream_index);
if (filter_ctx[stream_index].filter_graph != null)
{
Console.WriteLine("Going to reencode&filter the frame\n");
frame = ffmpeg.av_frame_alloc();
if (frame == null)
{
ret = ffmpeg.AVERROR(ffmpeg.ENOMEM);
break;
}
packet.dts = ffmpeg.av_rescale_q_rnd(packet.dts,
ifmt_ctx->streams[stream_index]->time_base,
ifmt_ctx->streams[stream_index]->codec->time_base,
AVRounding.AV_ROUND_NEAR_INF | AVRounding.AV_ROUND_PASS_MINMAX);
packet.pts = ffmpeg.av_rescale_q_rnd(packet.pts,
ifmt_ctx->streams[stream_index]->time_base,
ifmt_ctx->streams[stream_index]->codec->time_base,
AVRounding.AV_ROUND_NEAR_INF | AVRounding.AV_ROUND_PASS_MINMAX);
if (type == AVMediaType.AVMEDIA_TYPE_VIDEO)
{
ret = ffmpeg.avcodec_decode_video2(stream_ctx[packet.stream_index].dec_ctx, frame,
&got_frame, &packet);
}
else
{
ret = ffmpeg.avcodec_decode_audio4(stream_ctx[packet.stream_index].dec_ctx, frame,
&got_frame, &packet);
}
if (ret < 0)
{
ffmpeg.av_frame_free(&frame);
Console.WriteLine("Decoding failed\n");
break;
}
if (got_frame != 0)
{
frame->pts = ffmpeg.av_frame_get_best_effort_timestamp(frame);
ret = filter_encode_write_frame(frame, (uint)stream_index);
// SAVE LAST FRAME/PACKET HERE
ffmpeg.av_frame_free(&frame);
if (ret < 0)
goto end;
}
else
{
ffmpeg.av_frame_free(&frame);
}
}
else
{
/* remux this frame without reencoding */
packet.dts = ffmpeg.av_rescale_q_rnd(packet.dts,
ifmt_ctx->streams[stream_index]->time_base,
ofmt_ctx->streams[stream_index]->time_base,
AVRounding.AV_ROUND_NEAR_INF | AVRounding.AV_ROUND_PASS_MINMAX);
packet.pts = ffmpeg.av_rescale_q_rnd(packet.pts,
ifmt_ctx->streams[stream_index]->time_base,
ofmt_ctx->streams[stream_index]->time_base,
AVRounding.AV_ROUND_NEAR_INF | AVRounding.AV_ROUND_PASS_MINMAX);
ret = ffmpeg.av_interleaved_write_frame(ofmt_ctx, &packet);
if (ret < 0)
goto end;
}
ffmpeg.av_free_packet(&packet);
} -
Decoder return of av_find_best_stream vs. avcodec_find_decoder
7 octobre 2016, par Jason CThe docs for libav’s
av_find_best_stream
function (libav 11.7, Windows, i686, GPL) specify a parameter that can be used to receive a pointer to an appropriateAVCodec
:decoder_ret - if non-NULL, returns the decoder for the selected stream
There is also the
avcodec_find_decoder
function which can find anAVCodec
given an ID.However, the official demuxing + decoding example uses
av_find_best_stream
to find a stream, but chooses to useavcodec_find_decoder
to find the codec in lieu ofav_find_best_stream
’s codec return parameter :ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0);
...
stream_index = ret;
st = fmt_ctx->streams[stream_index];
...
/* find decoder for the stream */
dec = avcodec_find_decoder(st->codecpar->codec_id);As opposed to something like :
ret = av_find_best_stream(fmt_ctx, type, -1, -1, &dec, 0);
My question is pretty straightforward : Is there a difference between using
av_find_best_stream
’s return parameter vs. usingavcodec_find_decoder
to find theAVCodec
?The reason I ask is because the example chose to use
avcodec_find_decoder
rather than the seemingly more convenient return parameter, and I can’t tell if the example did that for a specific reason or not. The documentation itself is a little spotty and disjoint, so it’s hard to tell if things like this are done for a specific important reason or not. I can’t tell if the example is implying that it "should" be done that way, or if the example author did it for some more arbitrary personal reason. -
Révision 22576 : Suppression d’un code mort, mort depuis longtemps.
23 novembre 2015, par marcimat@rezo.netDéjà signalé par rénato en 2006 (http://spip-dev.rezo.narkive.com/mHG6Qlt6/small-bug-in-phraser-champs),
ce if () vaut toujours true. On l’enlève du coup.Précisément, cela vient tout à l’origine d’une erreur lors d’un passage de ereg à strpos en r3964, strpos ne comprennant
pas l’expression [0-9]. Redmine n’affichant plus les révisions / diff avant la révision 9600, je mais des liens git :
https://git.spip.net/rCSPIP57683758d1ebe3a6ffa5095035e88768b14d86f2 ou https://github.com/spip/SPIP/commit/57683758d1ebe3a6ffa5095035e88768b14d86f2C’était à une époque ou la constante NOM_DE_CHAMP coupait les balises nommées en héxadécimal en 2 : `#FF3300` par exemple avait `#FF` en balise, et
le reste était dans la suite, et il fallait potentiellement recorriger ce problème.
Cette constante a été améliorée ensuite, pas longtemps après en r4407, pour attraper tout le contenu de ces balises :
https://github.com/spip/SPIP/commit/fef3ff59fad8896d1c8946346eac1b47befc588fDonc, en théorie, depuis cette date, le test if() n’a plus lieu d’être.