ffmpeg實現H264壓縮並且推流至RTSP

------------------------------------------------------------------------------------------------------

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

=======================================================================


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章