
Recherche avancée
Médias (91)
-
999,999
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
The Slip - Artworks
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Texte
-
Demon seed (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
The four of us are dying (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
Corona radiata (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
Lights in the sky (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
Autres articles (63)
-
Gestion des droits de création et d’édition des objets
8 février 2011, parPar défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;
-
Les tâches Cron régulières de la ferme
1er décembre 2010, parLa gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
Le super Cron (gestion_mutu_super_cron)
Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...) -
Supporting all media types
13 avril 2011, parUnlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)
Sur d’autres sites (10929)
-
ffmpeg encoded mp4 with faststart not playing in firefox [duplicate]
12 mars 2018, par adam smithThis question already has an answer here :
i am having problems getting mp4 files encoded by ffmpeg to play using firefox without it downloading the entire thing first ; while chrome plays immediately. I am using ffmpeg to encode the mp4 and applying ’-movflags faststart’ to make sure the moov atom is at the start, and i have used Atomic Parsely to check the output structure.
I have checked that the server is using byte range etc, all good and other files are working well.
I have compared the Atomic Parsely return from a file encoded using flipfactory that does playback in firefox immediately ; its moov atom contains a iod atom that is not present in the ffmpeg encoding.
example of ffmpeg command :
-i source_file_path -c:v libx264 -vf scale=1024 :-1 -preset veryfast -b:v 1000k -ac 2 -bsf:a aac_adtstoasc -b:a 128k -movflags faststart -f mp4 proxy_output_path
example of ffmpeg output :
Atom ftyp @ 0 of size : 32, ends @ 32
Atom moov @ 32 of size : 6879133, ends @ 6879165
Atom mvhd @ 40 of size : 108, ends @ 148
Atom trak @ 148 of size : 3567272, ends @ 3567420
Atom tkhd @ 156 of size : 92, ends @ 248
Atom edts @ 248 of size : 36, ends @ 284
Atom elst @ 256 of size : 28, ends @ 284
Atom tref @ 284 of size : 20, ends @ 304
Atom tmcd @ 292 of size : 12, ends @ 304
Atom mdia @ 304 of size : 3567116, ends @ 3567420
Atom mdhd @ 312 of size : 32, ends @ 344
Atom hdlr @ 344 of size : 45, ends @ 389
Atom minf @ 389 of size : 3567031, ends @ 3567420
Atom vmhd @ 397 of size : 20, ends @ 417
Atom dinf @ 417 of size : 36, ends @ 453
Atom dref @ 425 of size : 28, ends @ 453
Atom stbl @ 453 of size : 3566967, ends @ 3567420
Atom stsd @ 461 of size : 151, ends @ 612
Atom avc1 @ 477 of size : 135, ends @ 612
Atom avcC @ 563 of size : 49, ends @ 612
Atom stts @ 612 of size : 24, ends @ 636
Atom stss @ 636 of size : 5736, ends @ 6372
Atom ctts @ 6372 of size : 1734376, ends @ 1740748
Atom stsc @ 1740748 of size : 40, ends @ 1740788
Atom stsz @ 1740788 of size : 913320, ends @ 2654108
Atom stco @ 2654108 of size : 913312, ends @ 3567420example of flipfactory output :
Atom ftyp @ 0 of size : 24, ends @ 24
Atom moov @ 24 of size : 561374, ends @ 561398
Atom mvhd @ 32 of size : 108, ends @ 140
Atom iods @ 140 of size : 33, ends @ 173
Atom trak @ 173 of size : 268275, ends @ 268448
Atom tkhd @ 181 of size : 92, ends @ 273
Atom mdia @ 273 of size : 268175, ends @ 268448
Atom mdhd @ 281 of size : 32, ends @ 313
Atom hdlr @ 313 of size : 68, ends @ 381
Atom minf @ 381 of size : 268067, ends @ 268448
Atom smhd @ 389 of size : 16, ends @ 405
Atom dinf @ 405 of size : 36, ends @ 441
Atom dref @ 413 of size : 28, ends @ 441
Atom stbl @ 441 of size : 268007, ends @ 268448
Atom stsd @ 449 of size : 91, ends @ 540
Atom mp4a @ 465 of size : 75, ends @ 540
Atom esds @ 501 of size : 39, ends @ 540
Atom stts @ 540 of size : 24, ends @ 564
Atom stsc @ 564 of size : 22324, ends @ 22888
Atom stsz @ 22888 of size : 234212, ends @ 257100
Atom stco @ 257100 of size : 11348, ends @ 268448i am not sure that adding the iod atom will resolve the issue, but thats all i can see that is different. I cannot however find anything in the ffmpeg documentation that seems to help.
any recommendations for resolving using ffmpeg would be great.
-
Dash.js not playing mpd files made with ffmpeg
31 décembre 2022, par MacsterI'm using ffmpeg to create chunks and manifest of a webm file which I want to live stream with Dash.js. Unfortunately Dash.js won't play the mpd file, no matter which way I create the chunks and manifest. However, the sample mpd URL from Dash.js is working.


Commands


ffmpeg -re -r 25 -i Dash/strm.webm
-map 0:v:0
-pix_fmt yuv420p
-c:v libvpx
-s 640x480 -keyint_min 60 -g 60 -speed 6 -tile-columns 4 -frame-parallel 1 -threads 8 -static-thresh 0 -max-intra-rate 300 -deadline realtime -lag-in-frames 0 -error-resilient 1
-b:v 3000k
-f webm_chunk
-header "Dash/glass_360.hdr"
-chunk_start_index 1 Dash/glass_360_%d.chk
-map 0:a:0
-c:a libvorbis
-b:a 128k -ar 44100
-f webm_chunk
-audio_chunk_duration 2000
-header Dash/glass_171.hdr
-chunk_start_index 1 Dash/glass_171_%d.chk


//Manifest
ffmpeg
-f webm_dash_manifest -live 1
-i Dash/glass_360.hdr
-f webm_dash_manifest -live 1
-i Dash/glass_171.hdr
-c copy
-map 0 -map 1
-f webm_dash_manifest -live 1
-adaptation_sets "id=0,streams=0 id=1,streams=1"
-chunk_start_index 1
-chunk_duration_ms 2000
-time_shift_buffer_depth 7200
-minimum_update_period 7200 Dash/glass_video_manifest.mpd



Manifest output


ffmpeg version git-2020-05-27-8b5ffae Copyright (c) 2000-2020 the FFmpeg developers
 built with gcc 9.3.1 (GCC) 20200523
 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
 libavutil 56. 49.100 / 56. 49.100
 libavcodec 58. 87.101 / 58. 87.101
 libavformat 58. 43.100 / 58. 43.100
 libavdevice 58. 9.103 / 58. 9.103
 libavfilter 7. 83.100 / 7. 83.100
 libswscale 5. 6.101 / 5. 6.101
 libswresample 3. 6.100 / 3. 6.100
 libpostproc 55. 6.100 / 55. 6.100
Input #0, webm_dash_manifest, from 'Dash/glass_360.hdr':
 Metadata:
 ENCODER : Lavf58.43.100
 Duration: N/A, bitrate: N/A
 Stream #0:0(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 1k tbr, 1k tbn, 1k tbc (default)
 Metadata:
 ALPHA_MODE : 1
 ENCODER : Lavc58.87.101 libvpx
 webm_dash_manifest_file_name: glass_360.hdr
 webm_dash_manifest_track_number: 1
Input #1, webm_dash_manifest, from 'Dash/glass_171.hdr':
 Metadata:
 ENCODER : Lavf58.43.100
 Duration: N/A, bitrate: N/A
 Stream #1:0(eng): Audio: vorbis, 44100 Hz, mono, fltp (default)
 Metadata:
 ENCODER : Lavc58.87.101 libvorbis
 webm_dash_manifest_file_name: glass_171.hdr
 webm_dash_manifest_track_number: 1
Output #0, webm_dash_manifest, to 'Dash/glass_video_manifest.mpd':
 Metadata:
 encoder : Lavf58.43.100
 Stream #0:0(eng): Video: vp8, yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 1k tbr, 1k tbn, 1k tbc (default)
 Metadata:
 ALPHA_MODE : 1
 ENCODER : Lavc58.87.101 libvpx
 webm_dash_manifest_file_name: glass_360.hdr
 webm_dash_manifest_track_number: 1
 Stream #0:1(eng): Audio: vorbis, 44100 Hz, mono, fltp (default)
 Metadata:
 ENCODER : Lavc58.87.101 libvorbis
 webm_dash_manifest_file_name: glass_171.hdr
 webm_dash_manifest_track_number: 1
Stream mapping:
 Stream #0:0 -> #0:0 (copy)
 Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 0 fps=0.0 q=-1.0 Lsize= 1kB time=00:00:00.00 bitrate=N/A speed= 0x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:4kB muxing overhead: unknown



Manifest file
(glass_video_manifest.mpd)

I tried to delete theContetntComponent
like suggested in other questions, but it didn't work.

<?xml version="1.0" encoding="UTF-8"?>

<period start="PT0S">
<adaptationset mimetype="video/webm" codecs="vp8" lang="eng" bitstreamswitching="true" subsegmentalignment="true" subsegmentstartswithsap="1">
<contentcomponent type="video"></contentcomponent>
<segmenttemplate timescale="1000" duration="2000" media="glass_$RepresentationID$_$Number$.chk" startnumber="1" initialization="glass_$RepresentationID$.hdr"></segmenttemplate>
<representation bandwidth="1000000" width="640" height="480" codecs="vp8" mimetype="video/webm" startswithsap="1"></representation>
</adaptationset>
<adaptationset mimetype="audio/webm" codecs="vorbis" lang="eng" bitstreamswitching="true" subsegmentalignment="true" subsegmentstartswithsap="1">
<contentcomponent type="audio"></contentcomponent>
<segmenttemplate timescale="1000" duration="2000" media="glass_$RepresentationID$_$Number$.chk" startnumber="1" initialization="glass_$RepresentationID$.hdr"></segmenttemplate>
<representation bandwidth="128000" audiosamplingrate="44100" codecs="vorbis" mimetype="audio/webm" startswithsap="1"></representation>
</adaptationset>
</period>




Dash.js-Player


<code class="echappe-js"><script>&#xA;&#xA;(function(){&#xA; // var url = "https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd";&#xA; var url = "http://localhost:8081/videos/Dash/glass_live_manifest.mpd";&#xA; var player = dashjs.MediaPlayer().create();&#xA; &#xA; // config&#xA; targetLatency = 2.0; // Lowering this value will lower latency but may decrease the player&#x27;s ability to build a stable buffer.&#xA; minDrift = 0.05; // Minimum latency deviation allowed before activating catch-up mechanism.&#xA; catchupPlaybackRate = 0.5; // Maximum catch-up rate, as a percentage, for low latency live streams.&#xA; stableBuffer = 2; // The time that the internal buffer target will be set to post startup/seeks (NOT top quality).&#xA; bufferAtTopQuality = 2; // The time that the internal buffer target will be set to once playing the top quality.&#xA;&#xA; player.updateSettings({&#xA; &#x27;streaming&#x27;: {&#xA; &#x27;liveDelay&#x27;: 2,&#xA; &#x27;liveCatchUpMinDrift&#x27;: 0.05,&#xA; &#x27;liveCatchUpPlaybackRate&#x27;: 0.5,&#xA; &#x27;stableBufferTime&#x27;: 2,&#xA; &#x27;bufferTimeAtTopQuality&#x27;: 2,&#xA; &#x27;bufferTimeAtTopQualityLongForm&#x27;: 2,&#xA; &#x27;bufferToKeep&#x27;: 2,&#xA; &#x27;bufferAheadToKeep&#x27;: 2,&#xA; &#x27;lowLatencyEnabled&#x27;: true,&#xA; &#x27;fastSwitchEnabled&#x27;: true,&#xA; &#x27;abr&#x27;: {&#xA; &#x27;limitBitrateByPortal&#x27;: true&#xA; },&#xA; }&#xA; });&#xA;&#xA; console.log(player.getSettings());&#xA;&#xA; setInterval(() => {&#xA; console.log(&#x27;Live latency= &#x27;, player.getCurrentLiveLatency());&#xA; console.log(&#x27;Buffer length= &#x27;, player.getBufferLength(&#x27;video&#x27;));&#xA; }, 3000);&#xA;&#xA; player.initialize(document.querySelector("#videoPlayer"), url, true);&#xA;&#xA; })();&#xA;</script>



Chrome


{debug: {…}, streaming: {…}}
dash.all.min.js:2 XHR finished loading: GET "http://localhost:8081/videos/Dash/glass_live_manifest.mpd".
load @ dash.all.min.js:2
C @ dash.all.min.js:2
load @ dash.all.min.js:2
load @ dash.all.min.js:2
load @ dash.all.min.js:2
load @ dash.all.min.js:2
se @ dash.all.min.js:2
te @ dash.all.min.js:2
initialize @ dash.all.min.js:2
(anonymous) @ Dash:92
(anonymous) @ Dash:94
DevTools failed to load SourceMap: Could not parse content for http://localhost:8081/js/dash.all.min.js.map: Cannot read property 'length' of undefined
Dash:88 Live latency= NaN
Dash:89 Buffer length= NaN
Dash:88 Live latency= NaN
Dash:89 Buffer length= NaN
Dash:88 Live latency= NaN
Dash:89 Buffer length= NaN
Dash:88 Live latency= NaN
Dash:89 Buffer length= NaN
Dash:88 Live latency= NaN
Dash:89 Buffer length= NaN



UPDATE


Well, it seems like the problem in general was, that the mpd's wouldn't play from that /dash folder. So i took a look into the code and found a bad routing. Anyways, the mpd would't start with the given command I used, probably becasue it creates a
dynamic
manifest, like @Markus Schumann says. So I'm going with a new one which seems to be working for now, but not very well.

ffmpeg -y -re -i strm.webm 
-c:v libx264 -x264opts "keyint=24:min-keyint=24:no-scenecut" 
-r 24 -c:a aac -b:a 128k -bf 1 -b_strategy 0 -sc_threshold 0 -pix_fmt yuv420p 
-map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -b:v:0 250k 
-filter:v:0 "scale=-2:240" -profile:v:0 baseline -b:v:1 750k 
-filter:v:1 "scale=-2:480" -profile:v:1 main -b:v:2 1500k 
-filter:v:2 "scale=-2:720" -profile:v:2 high 
-use_timeline 1 -use_template 1 -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" 
-f dash glass_video_manifest.mpd



-
Playing Mp3 file using FFmpeg on Android
2 avril 2017, par satyresThis question has been asked a lot but no code has worked for me . i’ve been able to play a file decoded with ffmpeg on Android but it’s noisy and glitchy.
i’ve found code in book called "linux sound programming" using latest ffmpeg version to decode an mp3 file.
the code tries to decode an mp3 file to pcm and then put it in a file called output.
what i want to do is to get the byte decoded on the fly and send them to AudioTrack in Java.void JNICALL Java_com_example_home_hellondk_MainActivity_loadFile
(JNIEnv* env, jobject obj,jstring file,jbyteArray array)
{
jboolean isfilenameCopy;
const char * filename = (*env)->GetStringUTFChars(env, file,
&isfilenameCopy);
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID play = (*env)->GetMethodID(env, cls, "playSound", "([BI)V");
AVCodec *codec;
AVCodecContext *c= NULL;
int len;
FILE *f, *outfile;
uint8_t inbuf[AUDIO_INBUF_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];
AVPacket avpkt;
AVFrame *decoded_frame = NULL;
AVFormatContext* container=NULL;
av_init_packet(&avpkt);
int num_streams = 0;
int sample_size = 0;
printf("Decode audio file %s \n", filename);
LOGE("Decode audio file %s\n", filename);
/* find the MPEG audio decoder */
/* codec = avcodec_find_decoder(AV_CODEC_ID_MP3);
if (!codec) {
fprintf(stderr, "Codec not found\n");
LOGE("Codec not found\n");
exit(1);
}*/
int lError;
if ((lError = avformat_open_input(&container, filename, NULL, NULL))
!= 0) {
LOGE("Error open source file: %d", lError);
exit(1);
}
if ((lError = avformat_find_stream_info(container,NULL)) < 0) {
LOGE("Error find stream information: %d", lError);
exit(1);
}
LOGE("Stage 1.5");
LOGE("audio format: %s", container->iformat->name);
LOGE("audio bitrate: %llu", container->bit_rate);
int stream_id = -1;
// To find the first audio stream. This process may not be necessary
// if you can gurarantee that the container contains only the desired
// audio stream
LOGE("nb_streams: %d", container->nb_streams);
int i;
for (i = 0; i < container->nb_streams; i++) {
if (container->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
stream_id = i;
LOGE("stream_id: %d", stream_id);
break;
}
}
AVCodecContext* codec_context = container->streams[stream_id]->codec;
codec = avcodec_find_decoder(codec_context->codec_id);
LOGE("stream_id: %d", stream_id);
LOGE("codec %s", codec->name);
if (!codec) {
fprintf(stderr, "codec not found\n");
exit(1);
}
c = avcodec_alloc_context3(codec);
if (!c) {
fprintf(stderr, "Could not allocate audio codec context\n");
LOGE("Could not allocate audio codec context\n");
exit(1);
}
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
fprintf(stderr, "Could not open codec\n");
LOGE("Could not open codec\n");
exit(1);
}
f = fopen(filename, "rb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
LOGE("Could not open %s\n",filename);
exit(1);
}
const char *outfilename;
outfile = fopen(outfilename, "wb");
if (!outfile) {
av_free(c);
exit(1);
}
avpkt.data = inbuf;
avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, f);
LOGE("Stage 5");
/* decode until eof */
while (avpkt.size > 0) {
int got_frame = 0;
if (!decoded_frame) {
if (!(decoded_frame = av_frame_alloc())) {
fprintf(stderr, "out of memory\n");
exit(1);
}
} else {
av_frame_unref(decoded_frame);
}
printf("Stream idx %d\n", avpkt.stream_index);
len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
if (len < 0) {
fprintf(stderr, "Error while decoding\n");
exit(1);
}
if (got_frame) {
printf("Decoded frame nb_samples %d, format %d\n",
decoded_frame->nb_samples,
decoded_frame->format);
if (decoded_frame->data[1] != NULL)
printf("Data[1] not null\n");
else
printf("Data[1] is null\n");
/* if a frame has been decoded, output it */
int data_size = av_samples_get_buffer_size(NULL, c->channels,
decoded_frame->nb_samples,
c->sample_fmt, 1);
// first time: count the number of planar streams
if (num_streams == 0) {
while (num_streams < AV_NUM_DATA_POINTERS &&
decoded_frame->data[num_streams] != NULL)
num_streams++;
printf("Number of streams %d\n", num_streams);
}
// first time: set sample_size from 0 to e.g 2 for 16-bit data
if (sample_size == 0) {
sample_size =
data_size / (num_streams * decoded_frame->nb_samples);
}
int m, n;
for (n = 0; n < decoded_frame->nb_samples; n++) {
// interleave the samples from the planar streams
for (m = 0; m < num_streams; m++) {
fwrite(&decoded_frame->data[m][n*sample_size],
1, sample_size, outfile);
}
}
/* jbyte *bytes = (*env)->GetByteArrayElements(env, array, NULL);
memcpy(bytes, decoded_frame->data[1], data_size);
(*env)->ReleaseByteArrayElements(env, array, bytes, 0);
(*env)->CallVoidMethod(env, obj, play, array, data_size);
*/
}
avpkt.size -= len;
avpkt.data += len;
if (avpkt.size < AUDIO_REFILL_THRESH) {
/* Refill the input buffer, to avoid trying to decode
* incomplete frames. Instead of this, one could also use
* a parser, or use a proper container format through
* libavformat. */
memmove(inbuf, avpkt.data, avpkt.size);
avpkt.data = inbuf;
len = fread(avpkt.data + avpkt.size, 1,
AUDIO_INBUF_SIZE - avpkt.size, f);
if (len > 0)
avpkt.size += len;
}
}
fclose(f);
avcodec_free_context(&c);
av_frame_free(&decoded_frame);
}the decoded bytes are in this section
fwrite(&decoded_frame->data[m][n*sample_size], 1, sample_size, outfile);
the code that let you send bytes to java is this :
jbyte *bytes = (*env)->GetByteArrayElements(env, array, NULL);
memcpy(bytes, decoded_frame->data[0], data_size);
(*env)->ReleaseByteArrayElements(env, array, bytes, 0);
(*env)->CallVoidMethod(env, obj, play, array, data_size);i’ve been working on it now for more than a week and nothing worked for me.
Thank you in advance for your help