m0_61770108 2024-07-09 18:19 采纳率: 13.5%
浏览 31
已结题

Qt+FFmpeg解析rtsp音频,并外放

Qt+FFmpeg解析rtsp音频,并外放
源码:

 ///查找解码器
    pCodecCtx = pFormatCtx->streams[audioStream]->codec;
    pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
    ///2017.8.9---lizhen
    pCodecCtx->bit_rate =0;   //初始化为0
    pCodecCtx->time_base.num=1;  //下面两行:一秒钟25帧
    pCodecCtx->time_base.den=10;
    pCodecCtx->frame_number=1;  //每包一个视频帧
    if (pCodec == NULL) {
        qDebug()<<"Codec not found";
        return;
    }
    ///打开解码器
    if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) {
        qDebug()<<"Could not open codec";
        return;
    }

    pFrame = av_frame_alloc();
    pFrameRGB = av_frame_alloc();


    packet = (AVPacket *) malloc(sizeof(AVPacket)); //分配一个packet

    int ret=0;
    while (m_statue) {
        if (av_read_frame(pFormatCtx, packet) < 0)
        {
            return; //这里认为音频读取完了
        }
        if (packet->stream_index == audioStream) {
            qDebug()<<"音频";
            if (avcodec_send_packet(pCodecCtx, packet) == 0) {
                while (avcodec_receive_frame(pCodecCtx, pFrame) >= 0) {

                }
            }

        }

        av_free_packet(packet); //释放资源,否则内存会一直上升
    }

    av_free(out_buffer);
    av_free(pFrameRGB);
    avcodec_close(pCodecCtx);
    avformat_close_input(&pFormatCtx);

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-07-09 18:19
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您好!很高兴看到您在使用Qt和FFmpeg来解析RTSP流中的音频数据。以下是针对您提出的问题的一些建议和解答:

    1. 查找并打开音频流的解码器: 您的代码中已经包含了查找解码器的步骤,这是正确的。确保pFormatCtx->streams[audioStream]->codec指向的是音频流的codec context。如果avcodec_find_decoder返回NULL,则表示没有找到相应的解码器。

    2. 使用avcodec_send_packetavcodec_receive_frame解码音频数据

      • avcodec_send_packet用于向解码器发送一个数据包。
      • avcodec_receive_frame用于从解码器接收解码后的帧。您需要在一个循环中调用它,直到解码器没有更多的帧可以返回。
      • 您的代码中已经包含了这些调用,但似乎缺少了对解码后帧的处理。您需要将解码后的音频帧转换为可以播放的格式,然后使用音频输出设备进行播放。
    3. 处理内存分配和释放

      • 确保使用av_freeav_frame_free来释放分配的内存。
      • 在您的代码中,您已经释放了packet,这是正确的。同时,您也需要释放pFramepFrameRGB
    4. 实现音频数据的播放功能

      • 您需要将解码后的音频帧转换为适合播放的格式。这通常涉及到将音频数据从原始解码格式转换为PCM或其他音频播放库支持的格式。
      • Qt提供了QAudio类来处理音频输出。您可以使用QAudio来播放解码后的音频数据。

    以下是一些可能对您有帮助的参考链接:

    请注意,由于我无法创建或提供下载链接,上述链接仅供参考。您可以根据需要搜索和访问这些资源。希望这些信息对您有所帮助!如果您有其他问题或需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月6日
  • 创建了问题 7月9日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错