
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 (65)
-
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 (6554)
-
Decoding an MKA audio file into raw data (MKA Audio to raw audio data)
9 octobre 2020, par bbddMy task is to open an existing audio file with the
mka
extension (Matroska container) and extract the raw audio data. This example shows only an example of extracting raw data from anmp2
file. I do not know how to do this with themka
container. I would like to have something like this :

UPD


I found an option to save audio data in the format in which it was recorded in the audio file. An example is shown below.


PS. This is only a test version and most likely there are memory leaks and other problems.



#include <qfile>
#include <qdebug>
#include "audiodecoder.h"

int main(int argc, char* argv[])
{
 AudioDecoder decoder("/home/test/test.mka");
 bool started = decoder.start();
 if (!started) {
 return EXIT_FAILURE;
 }

 QFile file("/home/test/rawData.bin");
 file.open(QIODevice::WriteOnly);

 while (true) {
 auto data = decoder.getData(255);
 if (data.isEmpty()) {
 break;
 }
 file.write(data.data(), data.size());
 }
 file.close();
 return EXIT_SUCCESS;
}

</qdebug></qfile>


audiodecoder.h


class AudioDecoder {
public:
 AudioDecoder(const QString& fileName);
 AudioDecoder& operator=(const AudioDecoder& rhs) = delete;
 AudioDecoder& operator=(AudioDecoder&& rhs) = delete;
 AudioDecoder(const AudioDecoder& rhs) = delete;
 AudioDecoder(AudioDecoder&& rhs) = delete;
 virtual ~AudioDecoder(void);

 virtual bool start(void) noexcept;
 virtual QByteArray getData(const quint16& size) noexcept;
 virtual bool stop(void) noexcept;

protected:
 bool m_initialized;
 QString m_fileName;

 AVFrame* p_frame = nullptr;
 AVPacket* p_packet = nullptr;
 AVCodecContext* p_cdcCtx = nullptr;
 AVFormatContext* p_frmCtx = nullptr;
};



audiodecoder.cpp



static void logging(const char* message)
{
 qDebug() << message;
}

AudioDecoder::AudioDecoder(const QString& fileName)
 : m_initialized(false)
 , m_fileName(fileName)
 , p_cdcCtx(nullptr)
 , p_frmCtx(nullptr)
{
 av_register_all();
}

QByteArray AudioDecoder::getData(const quint16& dataSize) noexcept
{
 QByteArray data;
 qint32 response = 0;
 if (av_read_frame(p_frmCtx, p_packet) >= 0) {
 //logging(QString("AVPacket->pts %1").arg(p_packet->pts).toStdString().c_str());
 //response = decode_packet(p_packet, p_cdcCtx, p_frame);
 response = avcodec_send_packet(p_cdcCtx, p_packet);
 if (response < 0) {
 logging("Error while sending a packet to the decoder");
 return {};
 }
 while (response >= 0) {
 response = avcodec_receive_frame(p_cdcCtx, p_frame);
 if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {
 break;
 }
 else if (response < 0) {
 logging("Error while receiving a frame from the decoder");
 return {};
 }
 if (response >= 0) {
 logging(QString("Frame %1 (type=%2, size=%3 bytes) pts %4 key_frame %5 [DTS %6], duration[%7]")
 .arg(p_cdcCtx->frame_number)
 .arg(av_get_picture_type_char(p_frame->pict_type))
 .arg(p_frame->pkt_size)
 .arg(p_frame->pts)
 .arg(p_frame->key_frame)
 .arg(p_frame->coded_picture_number)
 .arg(p_frame->pkt_duration)
 .toStdString()
 .c_str());

 for (int i = 0; i < p_frame->linesize[0]; ++i) {
 data.push_back(p_frame->data[0][i]);
 }
 }
 }
 av_packet_unref(p_packet);
 return data;
 }
 return {};
}

bool AudioDecoder::start(void) noexcept
{
 if (m_initialized) {
 return true;
 }

 int error;
 // Open the input file to read from it.
 if ((error = avformat_open_input(&p_frmCtx,
 m_fileName.toStdString().c_str(), nullptr, nullptr))
 < 0) {
 qDebug() << "Could not open input file: " << m_fileName;
 p_frmCtx = nullptr;
 return false;
 }
 // Get information on the input file (number of streams etc.).
 if ((error = avformat_find_stream_info(p_frmCtx, nullptr)) < 0) {
 avformat_close_input(&p_frmCtx);
 qDebug() << __LINE__;
 return false;
 }
 // Make sure that there is only one stream in the input file.
 if ((p_frmCtx)->nb_streams != 1) {
 avformat_close_input(&p_frmCtx);
 qDebug() << __LINE__;
 return false;
 }

 if (p_frmCtx->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) {
 avformat_close_input(&p_frmCtx);
 qDebug() << __LINE__;
 return false;
 }

 // Find a decoder for the audio stream.
 AVCodec* input_codec = nullptr;
 if (!(input_codec = avcodec_find_decoder((p_frmCtx)->streams[0]->codecpar->codec_id))) {
 avformat_close_input(&p_frmCtx);
 qDebug() << __LINE__;
 return false;
 }
 // Allocate a new decoding context.
 AVCodecContext* avctx = avcodec_alloc_context3(input_codec);
 if (!avctx) {
 avformat_close_input(&p_frmCtx);
 qDebug() << __LINE__;
 return false;
 }
 // Initialize the stream parameters with demuxer information.
 error = avcodec_parameters_to_context(avctx, (p_frmCtx)->streams[0]->codecpar);
 if (error < 0) {
 avformat_close_input(&p_frmCtx);
 avcodec_free_context(&avctx);
 qDebug() << __LINE__;
 return false;
 }
 /* Open the decoder for the audio stream to use it later. */
 if ((error = avcodec_open2(avctx, input_codec, NULL)) < 0) {
 avcodec_free_context(&avctx);
 avformat_close_input(&p_frmCtx);
 qDebug() << __LINE__;
 return false;
 }
 /* Save the decoder context for easier access later. */
 p_cdcCtx = avctx;
 av_dump_format(p_frmCtx, 0, m_fileName.toStdString().c_str(), 0);

 p_frame = av_frame_alloc();
 if (!p_frame) {
 logging("failed to allocated memory for AVFrame");
 return false;
 }
 p_packet = av_packet_alloc();
 if (!p_packet) {
 logging("failed to allocated memory for AVPacket");
 return false;
 }
 return m_initialized = true;
}

bool AudioDecoder::stop(void) noexcept
{
 if (p_cdcCtx != nullptr) {
 avcodec_free_context(&p_cdcCtx);
 }
 if (p_frmCtx != nullptr) {
 avformat_close_input(&p_frmCtx);
 }
 return true;
}

AudioDecoder::~AudioDecoder(void)
{
 stop();
}



But the problem in this example is that I didn't implement the ability to get exactly the requested size of audio data. In my case, it's just ignored.


-
Audio format not supported in Flash Media Live Encoder from Directshow Audio Filter
1er novembre 2015, par Hamed GHI create a virtual audio filter in DirectShow and introduce it as a AudioInputDevice.
When I select this filter as a Directshow Device in FFMPEG, it’s working without any problem. But in Flash Media Live Encoder(FMLE) it’s not working.
FMLE said "Audio format not supported" when selecting my filter as the Audio Device.
I searched in internet and found the following link. But implementing GetStreamCaps not working for me.
https://forums.adobe.com/thread/778085?tstart=0
Would you please tell me what is the problem ? or which audio connections FMLE accept ?
-
executing a command from php that requires being root
8 août 2017, par P.GI would like to find a solution to this problem : I have a list of images that i want to convert into a video on the server. I’ve created a virtual machine with centOS and installed ffmpeg to test that. Everything working well when I type myself this line in the terminal
sudo ffmpeg -r 10 -i img%03d.png -c:v libx264 -preset veryslow -crf 0
video.mp4What I want is to call this when I click on a button. Here is the code :
Javascript :
$(document).ready(function(){
$("#ffmpeg").click(function(){
$.get('ffmpegBooklet.php', function (data) {
console.log(data);
});
});
});PHP :
echo shell_exec("/usr/local/bin/ffmpeg -r 10 -i /img%03d.png -c:v
libx264 -preset veryslow -crf 0 video.mp4 2>&1");What i get in the console of the browser is :
the log from ffmpeg and at the end —> Permission deniedI’ve tried with a static build (after reading on internet) but I have the same problem. Is there any solution to do this without the sudo rights ? I don’t want to do this as sudo or to some tricky command to give sudo permissions through php because I think it’s not secure.
Any helps is welcome ! Thanks for reading it :)