------------------------------------------------------------------------------------------------------
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視頻學習資料:
=======================================================================