
Recherche avancée
Médias (17)
-
Matmos - Action at a Distance
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
DJ Dolores - Oslodum 2004 (includes (cc) sample of “Oslodum” by Gilberto Gil)
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Danger Mouse & Jemini - What U Sittin’ On ? (starring Cee Lo and Tha Alkaholiks)
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Cornelius - Wataridori 2
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
The Rapture - Sister Saviour (Blackstrobe Remix)
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Chuck D with Fine Arts Militia - No Meaning No
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
Autres articles (104)
-
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 (...) -
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 (...)
Sur d’autres sites (10132)
-
JNI crash when I split code in two functions
13 septembre 2013, par LescottI have a properly working native C function which I call from my java code. But when I split this code in two functions and sequentially call them both I got fatal error.
//global variables
AVFormatContext *pFormatCtx;
AVFrame *pFrame;
AVFrame *pFrameRGB;
AVCodecContext *pCodecCtx;
AVCodec *pCodec;
uint8_t *buffer;
int videoStream;
struct SwsContext *sws_ctx = NULL;
int outWidth, outHeight;Working unsplitted function
JNIEXPORT void JNICALL Java_foo(JNIEnv * env, jclass class) {
av_register_all();
const char* videoPath = "11.mp4";
int numBytes;
AVDictionary *optionsDict = NULL;
pFrame = NULL;
pFrameRGB = NULL;
buffer = NULL;
pCodec = NULL;
pFormatCtx = NULL;
// Open video file
if(avformat_open_input(&pFormatCtx, videoPath, NULL, NULL)!=0)
exit(1); // Couldn't open file
// Retrieve stream information
if(avformat_find_stream_info(pFormatCtx, NULL)<0)
exit(1); // Couldn't find stream information
av_dump_format(pFormatCtx, 0,videoPath, 0);
// Find the first video stream
videoStream=-1;
int i;
for(i=0; inb_streams; i++) {
if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
videoStream=i;
break;
}
}
if(videoStream==-1)
exit(1); // Didn't find a video stream
// Get a pointer to the codec context for the video stream
pCodecCtx=pFormatCtx->streams[videoStream]->codec;
// Find the decoder for the video stream
pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec==NULL) {
fprintf(stderr, "Unsupported codec!\n");
exit(1); // Codec not found
}
// Open codec
if(avcodec_open2(pCodecCtx, pCodec, &optionsDict)<0)
exit(1); // Could not open codec
// Allocate video frame
pFrame=avcodec_alloc_frame();
// Allocate an AVFrame structure
pFrameRGB=avcodec_alloc_frame();
if(pFrameRGB==NULL)
exit(1);
outWidth = 128;
outHeight = 128;
// Determine required buffer size and allocate buffer
numBytes=avpicture_get_size(PIX_FMT_RGB24, outWidth, outHeight);
buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
sws_ctx = sws_getContext(
pCodecCtx->width,
pCodecCtx->height,
pCodecCtx->pix_fmt,
outWidth,
outHeight,
PIX_FMT_RGB24,
SWS_BILINEAR,
NULL,
NULL,
NULL
);
// Assign appropriate parts of buffer to image planes in pFrameRGB
// Note that pFrameRGB is an AVFrame, but AVFrame is a superset
// of AVPicture
avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24, outWidth, outHeight);
}Failing splitted functions
JNIEXPORT void JNICALL Java_foo1(JNIEnv * env, jclass class) {
av_register_all();
}
JNIEXPORT void JNICALL Java_foo2(JNIEnv * env, jclass class) {
//all lines of code from Java_foo exept the first
}Java code
System.loadLibrary("mylib");
Mylib.foo1();
Mylib.foo2(); //fatal error
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007faab5012dc0, pid=15571, tid=140371352766208Any ideas ?
-
Exoplayer with FFmpeg module and filtering crash with aac and alac audio formats
25 juin 2020, par Aleksej OtjanHave a code to play audio with exoplayer and ffmpeg decoder. It works. Then I was needed to add equalizer functionality. I did it with ffmpeg avfilters. But now, it crash at some audio formats(if dont use avfilters it works with this formats).


Decode func :


int decodePacket(AVCodecContext *context, AVPacket *packet,
 uint8_t *outputBuffer, int outputSize) {
 int result = 0;
 // Queue input data.
 result = avcodec_send_packet(context, packet);
 if (result) {
 logError("avcodec_send_packet", result);
 return result == AVERROR_INVALIDDATA ? DECODER_ERROR_INVALID_DATA
 : DECODER_ERROR_OTHER;
 }

 // Dequeue output data until it runs out.
 int outSize = 0;
 if (EQUALIZER != nullptr) {
 LOGE("INIT FILTER GRAPH");
 init_filter_graph(context, EQUALIZER);
 }

 while (true) {
 AVFrame *frame = av_frame_alloc();
 if (!frame) {
 LOGE("Failed to allocate output frame.");
 return -1;
 }
 result = avcodec_receive_frame(context, frame);
 if (result) {
 av_frame_free(&frame);
 if (result == AVERROR(EAGAIN)) {
 break;
 }
 logError("avcodec_receive_frame", result);
 return result;
 }

 // Resample output.
 AVSampleFormat sampleFormat = context->sample_fmt;
 int channelCount = context->channels;
 int channelLayout = context->channel_layout;
 int sampleRate = context->sample_rate;
 int sampleCount = frame->nb_samples;
 int dataSize = av_samples_get_buffer_size(NULL, channelCount, sampleCount,
 sampleFormat, 1);
 SwrContext *resampleContext;
 if (context->opaque) {
 resampleContext = (SwrContext *) context->opaque;
 } else {
 resampleContext = swr_alloc();
 av_opt_set_int(resampleContext, "in_channel_layout", channelLayout, 0);
 av_opt_set_int(resampleContext, "out_channel_layout", channelLayout, 0);
 av_opt_set_int(resampleContext, "in_sample_rate", sampleRate, 0);
 av_opt_set_int(resampleContext, "out_sample_rate", sampleRate, 0);
 av_opt_set_int(resampleContext, "in_sample_fmt", sampleFormat, 0);
 // The output format is always the requested format.
 av_opt_set_int(resampleContext, "out_sample_fmt",
 context->request_sample_fmt, 0);
 result = swr_init(resampleContext);
 if (result < 0) {
 logError("swr_init", result);
 av_frame_free(&frame);
 return -1;
 }
 context->opaque = resampleContext;
 }
 int inSampleSize = av_get_bytes_per_sample(sampleFormat);
 int outSampleSize = av_get_bytes_per_sample(context->request_sample_fmt);
 int outSamples = swr_get_out_samples(resampleContext, sampleCount);
 int bufferOutSize = outSampleSize * channelCount * outSamples;
 if (outSize + bufferOutSize > outputSize) {
 LOGE("Output buffer size (%d) too small for output data (%d).",
 outputSize, outSize + bufferOutSize);
 av_frame_free(&frame);
 return -1;
 }
 if (EQUALIZER != nullptr && graph != nullptr) {
 result = av_buffersrc_add_frame_flags(src, frame,AV_BUFFERSRC_FLAG_KEEP_REF);
 if (result < 0) {
 av_frame_unref(frame);
 LOGE("Error submitting the frame to the filtergraph:");
 return -1;
 }
 // Get all the filtered output that is available.
 result = av_buffersink_get_frame(sink, frame);
 LOGE("ERROR SWR %s", av_err2str(result));
 if (result == AVERROR(EAGAIN) || result == AVERROR_EOF) {
 av_frame_unref(frame);
 break;
 }
 if (result < 0) {
 av_frame_unref(frame);
 return -1;
 }
 result = swr_convert(resampleContext, &outputBuffer, bufferOutSize,
 (const uint8_t **) frame->data, frame->nb_samples);
 }else{
 result = swr_convert(resampleContext, &outputBuffer, bufferOutSize,
 (const uint8_t **) frame->data, frame->nb_samples);
 }

 av_frame_free(&frame);
 if (result < 0) {
 logError("swr_convert", result);
 return result;
 }
 int available = swr_get_out_samples(resampleContext, 0);
 if (available != 0) {
 LOGE("Expected no samples remaining after resampling, but found %d.",
 available);
 return -1;
 }
 outputBuffer += bufferOutSize;
 outSize += bufferOutSize;
 }
 avfilter_graph_free(&graph);
 return outSize;
}



Init graph func :


int init_filter_graph(AVCodecContext *dec_ctx, const char *eq) {
 char args[512];
 int ret = 0;
 graph = avfilter_graph_alloc();
 const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
 const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
 AVFilterInOut *outputs = avfilter_inout_alloc();
 AVFilterInOut *inputs = avfilter_inout_alloc();
 static const enum AVSampleFormat out_sample_fmts[] = {dec_ctx->request_sample_fmt,
 static_cast<const avsampleformat="avsampleformat">(-1)};
 static const int64_t out_channel_layouts[] = {static_cast(dec_ctx->channel_layout),
 -1};
 static const int out_sample_rates[] = {dec_ctx->sample_rate, -1};
 const AVFilterLink *outlink;
 AVRational time_base = dec_ctx->time_base;

 if (!outputs || !inputs || !graph) {
 ret = AVERROR(ENOMEM);
 goto end;
 }

 /* buffer audio source: the decoded frames from the decoder will be inserted here. */
 if (!dec_ctx->channel_layout)
 dec_ctx->channel_layout = av_get_default_channel_layout(dec_ctx->channels);
 snprintf(args, sizeof(args),
 "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%" PRIx64,
 1, dec_ctx->sample_rate, dec_ctx->sample_rate,
 av_get_sample_fmt_name(dec_ctx->sample_fmt), dec_ctx->channel_layout);
 ret = avfilter_graph_create_filter(&src, abuffersrc, "in",
 args, NULL, graph);

 if (ret < 0) {
 LOGE("Cannot create audio buffer source\n");
 goto end;
 }

 /* buffer audio sink: to terminate the filter chain. */
 ret = avfilter_graph_create_filter(&sink, abuffersink, "out",
 NULL, NULL, graph);
 if (ret < 0) {
 LOGE("Cannot create audio buffer sink\n");
 goto end;
 }

 ret = av_opt_set_int_list(sink, "sample_fmts", out_sample_fmts, -1,
 AV_OPT_SEARCH_CHILDREN);
 if (ret < 0) {
 LOGE("Cannot set output sample format\n");
 goto end;
 }

 ret = av_opt_set_int_list(sink, "channel_layouts", out_channel_layouts, -1,
 AV_OPT_SEARCH_CHILDREN);
 if (ret < 0) {
 LOGE("Cannot set output channel layout\n");
 goto end;
 }

 ret = av_opt_set_int_list(sink, "sample_rates", out_sample_rates, -1,
 AV_OPT_SEARCH_CHILDREN);
 if (ret < 0) {
 LOGE("Cannot set output sample rate\n");
 goto end;
 }

 /*
 * Set the endpoints for the filter graph. The graph will
 * be linked to the graph described by filters_descr.
 */

 /*
 * The buffer source output must be connected to the input pad of
 * the first filter described by filters_descr; since the first
 * filter input label is not specified, it is set to "in" by
 * default.
 */
 outputs->name = av_strdup("in");
 outputs->filter_ctx = src;
 outputs->pad_idx = 0;
 outputs->next = NULL;

 /*
 * The buffer sink input must be connected to the output pad of
 * the last filter described by filters_descr; since the last
 * filter output label is not specified, it is set to "out" by
 * default.
 */
 inputs->name = av_strdup("out");
 inputs->filter_ctx = sink;
 inputs->pad_idx = 0;
 inputs->next = NULL;

 if ((ret = avfilter_graph_parse_ptr(graph, eq,
 &inputs, &outputs, NULL)) < 0) {
 goto end;
 }

 if ((ret = avfilter_graph_config(graph, NULL)) < 0)
 goto end;

 /* Print summary of the sink buffer
 * Note: args buffer is reused to store channel layout string */
 outlink = sink->inputs[0];
 av_get_channel_layout_string(args, sizeof(args), -1, outlink->channel_layout);
 LOGE("Output: srate:%dHz chlayout:%s\n",
 (int) outlink->sample_rate,
 args);
 end:
 avfilter_inout_free(&inputs);
 avfilter_inout_free(&outputs);
 return ret;
}
</const>


Crash when try to play aac, alac audio at this line :


result = swr_convert(resampleContext, &outputBuffer, bufferOutSize,(const uint8_t **) frame->data, frame->nb_samples);



with


Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 



but work fine when play mp3, flac. What is wrong ? Thx for help.


-
avfilter/x86/vf_interlace : avfilter/x86/vf_interlace : fix crash when using unaligne...
14 décembre 2017, par Martin Vignali