Qt and ffmpeg, как работать со звуком.
Добрый день.
Так получаю данные звука:
- static struct SwsContext *img_convert_ctx;
- int videoStream, i, numBytes, audioStream;
- int ret, got_picture;
- avformat_network_init(); //初始化FFmpeg网络模块
- av_register_all(); //初始化FFMPEG 调用了这个才能正常适用编码器和解码器
- AVFormatContext *pFormatCtx = NULL;
- //Allocate an AVFormatContext.
- pFormatCtx = avformat_alloc_context();
- // Open video file
- if(avformat_open_input(&pFormatCtx, "./Wildlife.wmv", 0, 0) != 0)
- qDebug()<<"Couldn't open file";
- if(avformat_find_stream_info(pFormatCtx, NULL) < 0)
- qDebug()<<"Couldn't find stream information";
- av_dump_format(pFormatCtx, 0, "./Wildlife.wmv", 0);//information abaut file
- //vide0
- AVCodecContext *pCodecCtxOrig = NULL;
- AVCodecContext *pCodecCtx = NULL;
- //audio
- AVCodecContext *aCodecCtxOrig;
- AVCodecContext *aCodecCtx;
- // Find the first video and audio stream
- videoStream = -1;
- audioStream = -1;
- for(i=0; i < pFormatCtx->nb_streams; i++) {
- if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO
- &&
- videoStream < 0) {
- videoStream=i;
- }
- if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO &&
- audioStream < 0) {
- audioStream=i;
- }
- }
- if(videoStream==-1)
- qDebug()<<"Didn't find a video stream";
- if(audioStream==-1)
- qDebug()<<"Didn't find a audio stream";
- // Get a pointer to the codec context for the video stream
- pCodecCtx=pFormatCtx->streams[videoStream]->codec;
- //audio
- aCodecCtxOrig=pFormatCtx->streams[audioStream]->codec;
- //aCodecCtx=pFormatCtx->streams[audioStream]->codec;
- //audio
- AVCodec *aCodec;
- aCodec = avcodec_find_decoder(aCodecCtxOrig->codec_id);
- if(!aCodec) {
- qDebug()<<"Unsupported codec!";
- }
- // Copy context
- aCodecCtx = avcodec_alloc_context3(aCodec);
- if(avcodec_copy_context(aCodecCtx, aCodecCtxOrig) != 0) {
- qDebug()<<"Couldn't copy codec contextt";
- }
- /* set up SDL Audio here */
- avcodec_open2(aCodecCtx, aCodec, NULL);
Так предлогается работать со звуком с помощью STL:
- wanted_spec.freq = aCodecCtx->sample_rate;
- wanted_spec.format = AUDIO_S16SYS;
- wanted_spec.channels = aCodecCtx->channels;
- wanted_spec.silence = 0;
- wanted_spec.samples = SDL_AUDIO_BUFFER_SIZE;
- wanted_spec.callback = audio_callback;
- wanted_spec.userdata = aCodecCtx;
- if(SDL_OpenAudio(&wanted_spec, &spec) < 0) {
- fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError());
- return -1;
- }
Начал делать так:
- QAudioRecorder audioRecorder;
- QAudioEncoderSettings audioSettings;
- audioSettings.setCodec("audio/amr");
- audioSettings.setQuality(QMultimedia::HighQuality);
- audioRecorder.setEncodingSettings(audioSettings);
Как правильно сделать воспроизведение с помощью Qt?
2
252
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- Сейчас обсуждают на форуме
- DT14 апреля 2025 г. 15:38Всем привет! На Qt 6.8 MinGW пытаюсь сделать управление подключением WiFi из программы. Пока делаю поддержку Windows, но так же хочу в дальнейшем внедрить и поддержку Linux/MacOS. Для…
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Добрый день
Могу только предположение высказать, что возможно формат кодека не соответствует, а также какие-то параметры не соотносятся.
Пробовли соотнести параметры настройки кодека Qt, а также библиотеки... SDL может всё-же?
Я похоже пользовался не теми инструментами Qt. А какие точно нужня я пока не знаю.