功能:(使用MinGW64套件)
- 从摄像头拉rtmp裸h264流
- 实时播放
- 断线重连
- ffmpeg版本4.3,包括在源码中
- 作为学习够用了
- 进阶功能
测试rtmp:
rtmp://58.200.131.2:1935/livetv/hunantv
主要代码
while(av_read_frame(m_pInFmtCtx, packet) >= 0)//从pInFmtCtx读H264数据到packet;
{
if(packet->stream_index != nVideo_indx)//仅保留图像
{
continue;
}
if(avcodec_send_packet(pInCodecCtx, packet)<0)//送packet中H264数据给解码器码器进行解码,解码好的YUV数据放在pInCodecCtx,
{
break;
}
av_packet_unref(packet);
got_picture = avcodec_receive_frame(pInCodecCtx, pFrame);//把解码好的YUV数据放到pFrame中
if(0 == got_picture)//解码好一帧数据
{
//发送显示图像的信号
// 对解码视频帧进行缩放、格式转换等操作
sws_scale(m_SwsContext, (uint8_t const * const *)pFrame->data,
pFrame->linesize, 0, pInCodecCtx->height,
pFrameRGB->data, pFrameRGB->linesize);
// 转换到QImage
QImage tmmImage((uchar *)m_OutBuffer, pInCodecCtx->width, pInCodecCtx->height, QImage::Format_RGB32);
QImage image = tmmImage.copy();
// 发送QImage
emit Sig_GetOneFrame(image);
}
}
结果: