文章

顯示從 4月, 2023 起發佈的文章

[筆記] WebRTC VP8 視頻封包的解析

圖片
WebRTC 媒体流中,从 RTP 视频流接收到的封包,封包包含 RTP header 头部以及 RTP payload ,其中 RTP 的 payload 内含是 VP8 视频内容。将封包刨除 RTP header 后的 VP8 内容,其包含两部分: Payload descriptor 和 Payload data 部分。 Payload descriptor 用来描述每笔收到的 RTP 封包中的 VP8 画面资料, descriptor 后面就带着 VP8 的资料。 🔰  底下是  Payload descriptor  的部分 90 代表  VP8  第一个 header ,栏位意义如下 X 0 N S 0 PID   X : 1 代表后面还有 option S : 1 代表 VP8 第一个 partition PID : 0~7 ,第一个为 0 80 代表 option I L T K 000                   I : 1 代表后面有 I 行,带着 picture ID CC-B5  代表 picture ID ,当 M=0 , ID 为 7-bit 。 M=1 , ID 为 15-bit , ID 随机产生。 M Picture ID       🔰 底下是  Payload data  的  header  部分 70 - C7 - 00 这三个 byte 代表意义,如下 Size0 H Ver P Size1 Size2 Size = 0 * 2048 + 0xC7 * 8 + 3 = 0x63B = 1595 后面有 1595 bytes                 P : 0 代表 key frame , 1 代表 inter frame         

[問題] 利用 ffmpeg 工具來轉換 RTP 檔案

        想利用 ffmpeg 工具將 RTP 檔案轉換成 wav 檔,但是似乎過程會出現錯誤。我將 RTP stream 儲存成 RTP 檔案,分別儲存成三種檔案類型,而只有一種類型可以被轉換成功。三種類型的描述如下:     第一種 -- 保存來自網路的每個 RTP 完整封包,每個封包包含 RTP header 加上 payload。     第二種 -- 只保存第一筆 RTP header,其餘封包的 header 不保存,每筆 payload 依序儲存下來。     第三種 -- 只保存所有的 payload,不含 RTP header。 我將上述這三種檔案的範例放在底下的連結, https://drive.google.com/file/d/1aCznHT_3Wp45Ndm50dUb_G_0hyje0O49/view?usp=share_link ,接下來透過 ffmpeg 工具來進行轉換,下面是依序採用三種檔案類型來轉換成 wav。 "ffmpeg.exe -loglevel debug -f rtp -i input.sdp -i AudioRx_RTP_Packets.rtp out1.wav" ==> 出現錯誤 "ffmpeg.exe -loglevel debug -f rtp -i input.sdp -i AudioRx_RTP_Header.rtp out2.wav" ==> 出現錯誤 "ffmpeg.exe -f mulaw -ar 8000 -ac 1 -i AudioRx_Raw_Data.raw -codec:a pcm_mulaw out3.wav" ==> 成功         過程出現錯誤時,返回的錯誤訊息為 " Unsupported RTP version packet received ",實在找不出問題點在哪裡,詢問了網站 stackoverflow 也沒有人能回答。 https://stackoverflow.com/questions/75955112/got-error-to-convert-rtp-files-by-using-ffmpeg-tool ,希望後續有人能解答。