1. 程式人生 > >H.264碼流打包為RTP碼流

H.264碼流打包為RTP碼流

H264碼流打包成RTP包的程式碼如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <winsock2.h>
  6. #include <winsock2.h>
  7. //#include "mem.h"
  8. #define PACKET_BUFFER_END            (unsigned int)0x00000000
  9. #define MAX_RTP_PKT_LENGTH     1400
  10. #define DEST_IP                "180.101.59.185"
  11. #define DEST_PORT            1234
  12. #define H264                    96
  13. typedefstruct
  14. {  
  15.     /**//* byte 0 */
  16.     unsigned char csrc_len:4;        /**//* expect 0 */
  17.     unsigned char extension:1;        /**//* expect 1, see RTP_OP below */
  18.     unsigned char padding:1;        
    /**//* expect 0 */
  19.     unsigned char version:2;        /**//* expect 2 */
  20.     /**//* byte 1 */
  21.     unsigned char payload:7;        /**//* RTP_PAYLOAD_RTSP */
  22.     unsigned char marker:1;        /**//* expect 1 */
  23.     /**//* bytes 2, 3 */
  24.     unsigned short seq_no;              
  25.     /**//* bytes 4-7 */
  26.     unsigned  long timestamp;          
  27.     /**//* bytes 8-11 */
  28.     unsigned long ssrc;            /**//* stream number is used here. */
  29. } RTP_FIXED_HEADER;  
  30. typedefstruct {  
  31.     //byte 0
  32.     unsigned char TYPE:5;  
  33.     unsigned char NRI:2;  
  34.     unsigned char F:1;      
  35. } NALU_HEADER; /**//* 1 BYTES */
  36. typedefstruct {  
  37.     //byte 0
  38.     unsigned char TYPE:5;  
  39.     unsigned char NRI:2;   
  40.     unsigned char F:1;      
  41. } FU_INDICATOR; /**//* 1 BYTES */
  42. typedefstruct {  
  43.     //byte 0
  44.     unsigned char TYPE:5;  
  45.     unsigned char R:1;  
  46.     unsigned char E:1;  
  47.     unsigned char S:1;      
  48. } FU_HEADER; /**//* 1 BYTES */
  49. BOOL InitWinsock();  

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <memory.h>
  5. #include "h264.h"
  6. #pragma comment(lib,"ws2_32.lib")
  7. typedefstruct
  8. {  
  9.     int startcodeprefix_len;      //! 4 for parameter sets and first slice in picture, 3 for everything else (suggested)
  10.     unsigned len;                 //! Length of the NAL unit (Excluding the start code, which does not belong to the NALU)
  11.     unsigned max_size;            //! Nal Unit Buffer size
  12.     int forbidden_bit;            //! should be always FALSE
  13.     int nal_reference_idc;        //! NALU_PRIORITY_xxxx
  14.     int nal_unit_type;            //! NALU_TYPE_xxxx    
  15.     char *buf;                    //! contains the first byte followed by the EBSP
  16.     unsigned short lost_packets;  //! true, if packet loss is detected
  17. } NALU_t;  
  18. FILE *bits = NULL;                //!< the bit stream file
  19. staticint FindStartCode2 (unsigned char *Buf);//查詢開始字元0x000001
  20. staticint FindStartCode3 (unsigned char *Buf);//查詢開始字元0x00000001
  21. //static bool flag = true;
  22. staticint info2=0, info3=0;  
  23. RTP_FIXED_HEADER        *rtp_hdr;  
  24. NALU_HEADER     *nalu_hdr;  
  25. FU_INDICATOR    *fu_ind;  
  26. FU_HEADER       *fu_hdr;  
  27. BOOL InitWinsock()  
  28. {  
  29.     int Error;  
  30.     WORD VersionRequested;  
  31.     WSADATA WsaData;  
  32.     VersionRequested=MAKEWORD(2,2);  
  33.     Error=WSAStartup(VersionRequested,&WsaData); //啟動WinSock2
  34.     if(Error!=0)    
  35.     {  
  36.         return FALSE;  
  37.     }  
  38.     else
  39.     {  
  40.         if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)  
  41.         {  
  42.             WSACleanup();  
  43.             return FALSE;  
  44.         }  
  45.     }  
  46.     return TRUE;  
  47. }  
  48. //為NALU_t結構體分配記憶體空間
  49. NALU_t *AllocNALU(int buffersize)  
  50. {  
  51.     NALU_t *n;  
  52. 相關推薦

    H.264打包RTP

    H264碼流打包成RTP包的程式碼如下: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h&g

    調用FFmpeg SDK對H.264格式的視頻壓縮進行解碼

    b- follow 分享圖片 vpd fff proc ofo com 進行 由於作者不習慣該編輯器,只是將本文的截圖貼了出來,詳文見:https://www.yuque.com/docs/share/cce69b1b-b619-44b5-acd1-efa229d8862

    將H264打包RTP

    H264碼流打包成RTP包的程式碼如下:#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #incl

    檔案轉換base64 和 base64轉換檔案

    package test.com.cs;import com.cs.Base64Convert;import junit.framework.TestCase;import java.io.FileNotFoundException;import java.io.IOExc

    Linux下H.264實時RTP打包與傳送

        由於專案要求在DM6467T平臺上新增實時RTP打包傳送模組,這才找了找有沒有人分享 這方面的經驗。這裡需要感謝網友:yanyuan9527,他寫的文章對我幫助很大,可以說讓一個完全小白的人瞭解了RTP打包,連結在此:http://www.chinavideo.or

    H.264RTP打包格式[FU-A]

    本荷載型別允許分片一個NAL單元到幾個RTP包中。下圖 表示FU-A的RTP荷載格式。FU-A由1位元組的分片單元指示,1位元組的分片單元頭,和分片單元荷載組成。 FU指示位元組有以下格式: FU指示位元組的型別域的28,29表示FU-A和FU-B。F的使用在5。3描述。NRI域

    libx264編碼---YUV影象資料編碼h.264

    編譯環境:ubuntu12.04 目標平臺:ARM Cortex A9 交叉編譯器:arm-none-linux-gnueabi-gcc 4.4.1 基本步驟:  一、移植x264庫到ARM板,請看上一篇博文移植x264編碼庫 二、測試:

    Wireshark Lua: 一個從RTP抓包裡匯出H.264 Payload,變成264檔案(xxx.264)的Wireshark外掛

         抓取一個包含H.264 Payload RTP包的SIP會話或RTSP會話後,用Wireshark的Play功能只能播放聲音,不能播放視訊。把RTP payload直接匯出成檔案後也是不能直接播放的,因為H.264 over RTP封包是符合RFC3984規範的,

    【視頻編解碼·學習筆記】6. H.264分析工程創建

    clear href mark 一個 html filename down 創建 fail 一、準備工作: 新建一個VS工程SimpleH264Analyzer, 修改工程屬性參數-> 輸出目錄:$(SolutionDir)bin\$(Configuration)\,

    H 264中NALU RBSP SODB的關係 弄清結構

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    海思3518EV200 SDK中獲取和儲存H.264詳解

    1 /****************************************** 2 step 2: Start to get streams of each channel. 3 ************************************

    H.264---格式分析

    1、H.264的基本流結構 H.264 的基本流(elementary stream,ES)的結構分為兩層,包括視訊編碼層(VCL)和網路適配層(NAL)。視訊編碼層負責高效的視訊內容表示,而網路適配層負責以網路所要求的恰當的方式對資料進行打包和傳送。引入NAL並使之與VCL分離帶來的好處包括兩方面:1、使

    使用FFMPEG類庫分離出多媒體檔案中的H 264

                    在使用FFMPEG的類庫進行程式設計的過程中,可以直接輸出解複用之後的的視訊資料碼流。只需要在每次呼叫av_read_frame()之後將得到的視訊的AVPacket存為本地檔案即可。經試驗,在分離MPEG2碼流的時候,直接儲存AVPacket即可。在分離H.264碼流的時候,

    H264編碼器11( H.264 探索 第二部分 H264格式)

    來自:https://segmentfault.com/a/1190000006698552 表1中描述了所有可能的資料包型別。 Type Definition 0 Undefined

    H.264解析 一個SPS的nalu及獲取視訊的解析度

    00 00 00 01 67 42 00 28 E9 00   A0 0B 77 FE 00 02 00 03 C4 80   00 00 03 00 80 00 00 1A 4D 88   10 94 00 00 00 01 00 00 00 01為NALu頭,‍其餘

    H.264/AVC視訊編解碼技術詳解】十二、解析H.264的巨集塊結構(上)

    《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼

    H.264分析

    原文轉自:http://blog.163.com/[email protected]/blog/static/193507792010498440670/ H.264標準寫得比較繁複,所以考慮在瀏覽完Whitepaper之後就開始研讀X264程式碼。X264程

    Linux安裝SRS伺服器轉發H.264

    操作步驟:2.得到srs-master.zip原始碼檔案,把它拷貝到Linux系統3.解壓檔案命令unzip srs-master.zip4.進入檔案安裝目錄命令cd srs-master/trunk5.生成預設Makefile命令./configure6.編譯命令make命

    H.264視訊解析

    原理 H.264原始碼流(又稱為“裸流”)是由一個一個的NALU組成的。他們的結構如下圖所示。 其中每個NALU之間通過startcode(起始碼)進行分隔,起始碼分成兩種:0x00000

    利用mp4v2實現H.264實時封裝

    1. mp4v2庫配置、交叉編譯 mp4v2 庫是一個專用於處理mp4容器的開源專案,其使用c++編寫,並提供c語言介面。 下載mp4v2庫的最新程式碼以後,使用標準linux configure