------------------------------------------------------------------------------------------------------
ffmpeg rtsp推流、解码 课程教学:
ffmpeg实现H264编、解码,RTSP推流,RTSP解码
里面提供源码可以直接下载运行!
-----------------------------------------------------------------------------------------------------------------------
一、整体思路
1 利用ffmpeg读取出视频的一帧图像 存储在pFrame中
2 利用ffmpeg进行格式转换 sws_scale
3 利用ffmpeg编码存在pFrame中的图像 H264压缩
4 利用ffmpeg的 av_interleaved_write_frame( ) 写入到rtsp端
5 辅助部分:解码、编码初始化,QT线程创建
二、编解码初始化
1 解码初始化
参考http://blog.csdn.net/yunge812/article/details/79342089
2 编码初始化
-
-
fmtctx = avformat_alloc_context();
-
-
video_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
-
if(video_codec == NULL )
-
{
-
qDebug()
<< "video_codec == NULL"<< endl;
-
}
-
-
这里需要根据需要自行设置
-
//打开编码器
-
avcodec_open2(c, video_codec, NULL);
-
/*写入数据流的头部*/
-
avformat_write_header(fmtctx, NULL);
-
//打印SDP信息, 该信息可用于Rtp流接收解码
-
char sdp[2048];
-
int tmp = av_sdp_create(&fmtctx,1, sdp, sizeof(sdp));
-
qDebug()
<< sdp <<endl;
-
if(tmp != 0)
-
{
-
qDebug() << "av_sdp_create error " <<endl;
-
}
打印信息可以打印出当前的RTSP流的信息 用于另一端捕获用。具体用法后文会有介绍
三、读取视频
3.1 视频读取
av_read_frame(pFormatCtx_decode, packet)
3.2 视频解码
avcodec_decode_video2(pCodecCtx_decode, pFrame, &got_picture, packet)
3.3 格式转换
-
sws_scale(img_convert_ctx,pFrame->data, pFrame->linesize, 0, pCodecCtx_decode->height, //源
-
pFrameYUV->data, pFrameYUV->linesize); //目的
此时 经过解码的视频存储在pFrameYUV中
四、编码视频
avcodec_encode_video2(c, &pkt, pFrameYUV, &got_output)
五 推流至RTSP
av_interleaved_write_frame(fmtctx,&pkt);
六 利用VLC播放器接受压缩之后的视频
6.1 识别打印信息
第二步留下打印信息很有用 例如我的打印信息是
-
v=
0
-
o=-
0
0 IN IP4
127.0
.0
.1
-
s=No Name
-
c=IN IP4
127.0
.0
.1
-
t=
0
0
-
a=tool:libavformat
57.71
.100
-
m=video
5678 RTP/AVP
96
-
a=rtpmap:
96 H264/
90000
-
a=fmtp:
96 packetization-mode=
1
将上述打印信息直接copy到记事本,另存为 test.sdp的文件
6.2 再次运行程序 同时将 test.sdp文件拖到VLC播放器中进行播放
6.3 播放效果
参考资料
课程教学视频:https://edu.csdn.net/course/detail/27795
课件里面提供源码
参考连接:http://blog.csdn.net/czc1009/article/details/12913759
http://blog.csdn.net/ytaosky/article/details/72820329
=======================================================================
最近新开的公众号,文章正在一篇篇的更新,
公众号名称:玩转电子世界
各位朋友有什么问题了可以直接在上面提问,我会一一进行解答的。
跟着阳光非宅男,一步步走进电子的世界。
关注之后回复 资料下载 可以获得免费海量的视频学习资料下载~~!
已共享的学习视频资料,共享资料正在不断更新中。
共享ffmpeg视频学习资料:
=======================================================================
转载:https://blog.csdn.net/yunge812/article/details/79345584