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);