
Recherche avancée
Médias (91)
-
Corona Radiata
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Lights in the Sky
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Head Down
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Echoplex
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Discipline
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Letting You
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
Autres articles (60)
-
Les vidéos
21 avril 2011, parComme les documents de type "audio", Mediaspip affiche dans la mesure du possible les vidéos grâce à la balise html5 .
Un des inconvénients de cette balise est qu’elle n’est pas reconnue correctement par certains navigateurs (Internet Explorer pour ne pas le nommer) et que chaque navigateur ne gère en natif que certains formats de vidéos.
Son avantage principal quant à lui est de bénéficier de la prise en charge native de vidéos dans les navigateur et donc de se passer de l’utilisation de Flash et (...) -
Websites made with MediaSPIP
2 mai 2011, parThis page lists some websites based on MediaSPIP.
-
Possibilité de déploiement en ferme
12 avril 2011, parMediaSPIP peut être installé comme une ferme, avec un seul "noyau" hébergé sur un serveur dédié et utilisé par une multitude de sites différents.
Cela permet, par exemple : de pouvoir partager les frais de mise en œuvre entre plusieurs projets / individus ; de pouvoir déployer rapidement une multitude de sites uniques ; d’éviter d’avoir à mettre l’ensemble des créations dans un fourre-tout numérique comme c’est le cas pour les grandes plate-formes tout public disséminées sur le (...)
Sur d’autres sites (11701)
-
ffmpeg commands execution failed when run from Java. Executed successfully when the command is run in the terminal
28 septembre 2022, par Kaung Myat KhaingI'm working on a java project which works with audio file manipulation(I'm newbie to Java). I want to get the start and end time of silence in the audio with ffmpeg "silencedetect" audio filter and write the results to a text file.
I run the filter command within the following function, but it always result in failure(prints "Silence Detection failed"). Then, I tried running the command in the terminal and it was successful(prints "Silence Detection successful"). I don't know what's wrong with my java code. I have other functions which execute other ffmpeg commands with the same flow as provided, but they works fine.
Here's the function.


public static void getSilence(String filePath) throws InterruptedException, IOException {
 // detect silence
 System.out.println("Silence Detection cmd: ffmpeg -i " + filePath
 + " -af silencedetect=d=1:noise=-60dB -f null - |& awk '/silencedetect/ {print $4,$5}' > "
 + SOURCE_PATH + "/silence_detections/silenceInfo.txt");
 Process silenceDetect = Runtime.getRuntime().exec("ffmpeg -i " + filePath
 + " -af silencedetect=d=1:noise=-60dB -f null - |& awk '/silencedetect/ {print $4,$5}' > "
 + SOURCE_PATH + "/silence_detections/silenceInfo.txt");

 if (silenceDetect.waitFor() == 0) {
 System.out.println("Silence Detection successful");
 } else System.out.println("Silence Detection failed");
 }



-
avformat/bethsoftvid : print error in case the side date failed to be allocated
27 octobre 2014, par Michael Niedermayer -
Failed to play m3u8 stream continously with ffmpeg APIs
7 novembre 2024, par wangt13I am working on an embedded Linux system (5.10.24), where I want to play m3u8 audio stream with FFMPEG APIs.


Here is my code.


#include 
#include 
#include <alsa></alsa>asoundlib.h>

#include <libswresample></libswresample>swresample.h>
#include <libavcodec></libavcodec>avcodec.h>
#include <libavformat></libavformat>avformat.h>
#include <libswscale></libswscale>swscale.h>

int init_pcm_play(snd_pcm_t **playback_handle,snd_pcm_uframes_t chunk_size,unsigned int rate,int bits_per_sample,int channels)
{
 snd_pcm_hw_params_t *hw_params;
 snd_pcm_format_t format;

 //1. openPCM,
 if (0 > snd_pcm_open(playback_handle, "default", SND_PCM_STREAM_PLAYBACK, 0))
 {
 printf("snd_pcm_open err\n");
 return -1;
 }
 //2. snd_pcm_hw_params_t
 if(0 > snd_pcm_hw_params_malloc (&hw_params))
 {
 printf("snd_pcm_hw_params_malloc err\n");
 return -1;
 }
 //3. hw_params
 if(0 > snd_pcm_hw_params_any (*playback_handle, hw_params))
 {
 printf("snd_pcm_hw_params_any err\n");
 return -1;
 }
 //4.
 if (0 > snd_pcm_hw_params_set_access (*playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED))
 {
 printf("snd_pcm_hw_params_any err\n");
 return -1;
 }

 //5. SND_PCM_FORMAT_U8,8
 if(8 == bits_per_sample) {
 format = SND_PCM_FORMAT_U8;
 }
 if(16 == bits_per_sample) {
 format = SND_PCM_FORMAT_S16_LE;
 }
 if (0 > snd_pcm_hw_params_set_format (*playback_handle, hw_params, format))
 {
 printf("snd_pcm_hw_params_set_format err\n");
 return -1;
 }

 //6.
 if (0 > snd_pcm_hw_params_set_rate_near (*playback_handle, hw_params, &rate, 0))
 {
 printf("snd_pcm_hw_params_set_rate_near err\n");
 return -1;
 }
 //7.
 if (0 > snd_pcm_hw_params_set_channels(*playback_handle, hw_params, 2))
 {
 printf("snd_pcm_hw_params_set_channels err\n");
 return -1;
 }

 //8. set hw_params
 if (0 > snd_pcm_hw_params (*playback_handle, hw_params))
 {
 printf("snd_pcm_hw_params err\n");
 return -1;
 }

 snd_pcm_hw_params_get_period_size(hw_params, &chunk_size, 0);

 snd_pcm_hw_params_free (hw_params);

 return 0;
}

int main(int argc, char *argv[])
{
 AVFormatContext *pFormatCtx = NULL; //for opening multi-media file
 int audioStream = -1;
 AVCodecContext *pCodecCtx = NULL;
 AVCodec *pCodec = NULL; // the codecer
 AVFrame *pFrame = NULL;
 AVPacket *packet;
 uint8_t *out_buffer;
 struct SwrContext *au_convert_ctx;
 snd_pcm_t *playback_handle;
 int bits_per_sample = 0;

 if (avformat_open_input(&pFormatCtx, argv[1], NULL, NULL) != 0) {
 printf("Failed to open video file!");
 return -1; // Couldn't open file
 }

 if(avformat_find_stream_info(pFormatCtx,NULL)<0)
 {
 printf("Failed to find stream info.\n");
 return -1;
 }

 audioStream = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
 if (audioStream == -1) {
 printf("Din't find a video stream!");
 return -1;// Didn't find a video stream
 }

 av_dump_format(pFormatCtx, audioStream, NULL, false);

 // Find the decoder for the video stream
 pCodec = avcodec_find_decoder(pFormatCtx->streams[audioStream]->codecpar->codec_id);
 if (pCodec == NULL) {
 printf("Unsupported codec!\n");
 return -1; // Codec not found
 }

 // Copy context
 pCodecCtx = avcodec_alloc_context3(pCodec);
 AVCodecParameters *pCodecParam = pFormatCtx->streams[audioStream]->codecpar;

 if (avcodec_parameters_to_context(pCodecCtx, pCodecParam) < 0) {
 printf("Failed to set codec params\n");
 return -1;
 }
 // Open codec
 if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) {
 printf("Failed to open decoder!\n");
 return -1; // Could not open codec
 }
 packet = av_packet_alloc();
 pFrame = av_frame_alloc();

 uint64_t iInputLayout = av_get_default_channel_layout(pCodecCtx->channels);
 enum AVSampleFormat eInputSampleFormat = pCodecCtx->sample_fmt;
 int iInputSampleRate = pCodecCtx->sample_rate;


 uint64_t iOutputLayout = av_get_default_channel_layout(pCodecCtx->channels);
 int iOutputChans = pCodecCtx->channels;
 enum AVSampleFormat eOutputSampleFormat = AV_SAMPLE_FMT_S16;
 int iOutputSampleRate = pCodecCtx->sample_rate;

 au_convert_ctx = swr_alloc_set_opts(NULL,iOutputLayout, eOutputSampleFormat, iOutputSampleRate,
 iInputLayout,eInputSampleFormat, iInputSampleRate, 0, NULL);
 swr_init(au_convert_ctx);
 int iConvertLineSize = 0;
 int iConvertBuffSize = av_samples_get_buffer_size(&iConvertLineSize, iOutputChans, pCodecCtx->frame_size, eOutputSampleFormat, 0);
 printf("ochans: %d, ifrmsmp: %d, osfmt: %d, cbufsz: %d\n", iOutputChans, pCodecCtx->frame_size, eOutputSampleFormat, iConvertBuffSize);
 out_buffer = (uint8_t *) av_malloc(iConvertBuffSize);

 if(eOutputSampleFormat == AV_SAMPLE_FMT_S16 )
 {
 bits_per_sample = 16;
 }
 /*** alsa handle ***/
 init_pcm_play(&playback_handle,256, iOutputSampleRate,bits_per_sample,2);

 if (0 > snd_pcm_prepare (playback_handle))
 {
 printf("snd_pcm_prepare err\n");
 return -1;
 }

 while (av_read_frame(pFormatCtx, packet) >= 0) {
 if (packet->stream_index == audioStream) {
 avcodec_send_packet(pCodecCtx, packet);
 while (avcodec_receive_frame(pCodecCtx, pFrame) == 0) {
 int outframes = swr_convert(au_convert_ctx, &out_buffer, pCodecCtx->frame_size, (const uint8_t **) pFrame->data, pFrame->nb_samples); // 转换音频
 snd_pcm_writei(playback_handle, out_buffer, outframes);
 av_frame_unref(pFrame);
 }
 }
 av_packet_unref(packet);
 }
 swr_free(&au_convert_ctx);
 snd_pcm_close(playback_handle);
 av_freep(&out_buffer);

 return 0;
}



When I ran it, i got following output.


./ffmpeg_test http://live.ximalaya.com/radio-first-page-app/live/2730/64.m3
u8
[hls @ 0x21a8020] Skip ('#EXT-X-VERSION:3')
[hls @ 0x21a8020] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2186.aac' for reading
[hls @ 0x21a8020] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2187.aac' for reading
Input #0, hls, from '(null)':
 Duration: N/A, bitrate: N/A
 Program 0
 Metadata:
 variant_bitrate : 0
 Stream #0:0: Audio: aac (HE-AAC), 44100 Hz, stereo, fltp
 Metadata:
 variant_bitrate : 0
[http @ 0x21b7ba0] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2188.aac' for reading
[hls @ 0x21a8020] Skip ('#EXT-X-VERSION:3')
[http @ 0x21d4c20] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2189.aac' for reading



At the beginning, it can play the audio, until a second
Opening http://...
occurred.

How to make it work to play m3u8 audio stream continously ?