Михаиллл
17 апреля 2020 г. 21:02

Qt and ffmpeg, как работать со звуком.

Добрый день.
Так получаю данные звука:

  1. static struct SwsContext *img_convert_ctx;
  2. int videoStream, i, numBytes, audioStream;
  3. int ret, got_picture;
  4.  
  5. avformat_network_init(); //初始化FFmpeg网络模块
  6. av_register_all(); //初始化FFMPEG 调用了这个才能正常适用编码器和解码器
  7.  
  8.  
  9. AVFormatContext *pFormatCtx = NULL;
  10. //Allocate an AVFormatContext.
  11. pFormatCtx = avformat_alloc_context();
  12.  
  13. // Open video file
  14. if(avformat_open_input(&pFormatCtx, "./Wildlife.wmv", 0, 0) != 0)
  15. qDebug()<<"Couldn't open file";
  16.  
  17. if(avformat_find_stream_info(pFormatCtx, NULL) < 0)
  18. qDebug()<<"Couldn't find stream information";
  19.  
  20. av_dump_format(pFormatCtx, 0, "./Wildlife.wmv", 0);//information abaut file
  21.  
  22. //vide0
  23. AVCodecContext *pCodecCtxOrig = NULL;
  24. AVCodecContext *pCodecCtx = NULL;
  25. //audio
  26. AVCodecContext *aCodecCtxOrig;
  27. AVCodecContext *aCodecCtx;
  28.  
  29. // Find the first video and audio stream
  30. videoStream = -1;
  31. audioStream = -1;
  32.  
  33. for(i=0; i < pFormatCtx->nb_streams; i++) {
  34. if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO
  35. &&
  36. videoStream < 0) {
  37. videoStream=i;
  38. }
  39. if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO &&
  40. audioStream < 0) {
  41. audioStream=i;
  42. }
  43. }
  44. if(videoStream==-1)
  45. qDebug()<<"Didn't find a video stream";
  46. if(audioStream==-1)
  47. qDebug()<<"Didn't find a audio stream";
  48.  
  49. // Get a pointer to the codec context for the video stream
  50. pCodecCtx=pFormatCtx->streams[videoStream]->codec;
  51. //audio
  52. aCodecCtxOrig=pFormatCtx->streams[audioStream]->codec;
  53. //aCodecCtx=pFormatCtx->streams[audioStream]->codec;
  54.  
  55. //audio
  56. AVCodec *aCodec;
  57.  
  58. aCodec = avcodec_find_decoder(aCodecCtxOrig->codec_id);
  59. if(!aCodec) {
  60. qDebug()<<"Unsupported codec!";
  61. }
  62. // Copy context
  63. aCodecCtx = avcodec_alloc_context3(aCodec);
  64. if(avcodec_copy_context(aCodecCtx, aCodecCtxOrig) != 0) {
  65. qDebug()<<"Couldn't copy codec contextt";
  66. }
  67. /* set up SDL Audio here */
  68.  
  69. avcodec_open2(aCodecCtx, aCodec, NULL);

Так предлогается работать со звуком с помощью STL:

  1. wanted_spec.freq = aCodecCtx->sample_rate;
  2. wanted_spec.format = AUDIO_S16SYS;
  3. wanted_spec.channels = aCodecCtx->channels;
  4. wanted_spec.silence = 0;
  5. wanted_spec.samples = SDL_AUDIO_BUFFER_SIZE;
  6. wanted_spec.callback = audio_callback;
  7. wanted_spec.userdata = aCodecCtx;
  8.  
  9. if(SDL_OpenAudio(&wanted_spec, &spec) < 0) {
  10. fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError());
  11. return -1;
  12. }

Начал делать так:

  1. QAudioRecorder audioRecorder;
  2. QAudioEncoderSettings audioSettings;
  3. audioSettings.setCodec("audio/amr");
  4. audioSettings.setQuality(QMultimedia::HighQuality);
  5. audioRecorder.setEncodingSettings(audioSettings);

Как правильно сделать воспроизведение с помощью Qt?

2

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 21 апреля 2020 г. 13:12

Добрый день

Могу только предположение высказать, что возможно формат кодека не соответствует, а также какие-то параметры не соотносятся.
Пробовли соотнести параметры настройки кодека Qt, а также библиотеки... SDL может всё-же?

    Михаиллл
    • 21 апреля 2020 г. 16:01

    Я похоже пользовался не теми инструментами Qt. А какие точно нужня я пока не знаю.

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь
      • Последние комментарии
      • Evgenii Legotckoi
        16 апреля 2025 г. 17:08
        Благодарю за отзыв. И вам желаю всяческих успехов!
      • IscanderChe
        12 апреля 2025 г. 17:12
        Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
      • AK
        1 апреля 2025 г. 11:41
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        9 марта 2025 г. 21:02
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        9 марта 2025 г. 16:14
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…