123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- // 读取 rtpPack1.txt 文件,解析其中的 rtp 包,检查其中的序列号是否连续
- const path = require("path");
- const loadTxt = require("./loadTxt");
- const rtp = require("./rtpParse");
- function handle(promise){
- return promise.then(data=>[null,data]).catch(err=>[err,null])
- }
- let filePath1 = path.join(__dirname, 'rtpPack1.txt');
- let filePath2 = path.join(__dirname, 'rtpPack2.txt');
- async function parseRtpPackTxt(filePath) {
- let rtpPacks = [];
- let [err,lines] = await handle( loadTxt.loadFileLines(filePath) );
- if (err){
- return console.log(err);
- }
- // 读取一行,跳过一行
- for (let i = 0; i < lines.length; i+=2) {
- let line = lines[i];
- if (line === "***end***"){
- console.log("文件解析结束");
- return rtpPacks;
- }
- rtpPacks.push(line);
- }
- return rtpPacks;
- }
- // 格式化输出内容 用于打印表格 例如
- // 表单长度 用于打印表格 例如 [20,20] 则再打印表格时,每个单元格的长度为 20
- let tbLen = [50, 50];
- let lineLen = 2;
- function printf() {
- let str = "";
- str += "|";
- for (let i = 0; i < lineLen; i++) {
- let arg = arguments[i] || "";
- let len = tbLen[i];
- let argLen = arg.length;
- let spaceLen = len - argLen;
- let space = "";
- for (let j = 0; j < spaceLen; j++) {
- space += " ";
- }
- //
- // 如果长度超过了表单长度,则截取字符串
- if (argLen > len){
- arg = arg.substr(0,len);
- }
- str += arg + space + "|";
- }
- console.log(str);
- }
- // 解析剩余数据
- let last_data = ["",""];
- let bitLen = 2;
- // rtp over tcp 包的前两个字节为rtp包的长度
- function parseRtpOverTcp(no, package){
- // 合并旧数据
- if(last_data[no] !== ""){
- package = last_data[no] + package;
- last_data[no] = "";
- }
- let allLen = package.length;
- console.log(`---*-*-*-*-*------ allLen: ${allLen} ------*-*-*-*-*-*---`)
- let len = 0;
- // 读取包长度
- let packageLenStr = package.substr(0,4);
- let packageLen = parseInt(packageLenStr,16);
- console.log(`packageLenStr: ${packageLenStr} >>> ${packageLen}`);
- // package_len + i <= left_len + data_len
- while ( (len + packageLen) * 2 <= allLen ){
- console.log('----')
- // 解析rtp包
- let rtpPackage = package.substr(len * 2 + 4, packageLen * bitLen);
- let rtpHeaderInfo = rtp.parseRtpHeader(rtpPackage.substr(0,24));
- console.log(rtpHeaderInfo)
- // i += package_len + 2;
- // 读取下一个包长度
- len += packageLen + 2;
- console.log(`len: ${len}`)
- packageLenStr = package.substr(len * 2, 4);
- packageLen = parseInt(packageLenStr,16);
- console.log(`packageLenStr: ${packageLenStr} >>> ${packageLen} `);
- // 如果剩余数据不足以解析一个包,则跳出循环
- }
- // 读取剩余数据
- last_data[no] = package.substr(len * 2 );
- console.log(`last_data: ${last_data[no].length}`);
- }
- async function main(){
- let rtpPackages_1 = await parseRtpPackTxt(filePath2);
- let rtpPackages_2 = await parseRtpPackTxt(filePath2);
- printf(" black"," ok");
- printf("------------------------------","------------------------------");
- // 开始解析rtp数据
- for (let i = 0; i < rtpPackages_1.length; i++) {
- console.log(`---*-*-*-*-*------ ${i} ------*-*-*-*-*-*---`)
- let rtpPackage_1 = rtpPackages_1[i];
- // 输出前10个字节
- console.log(rtpPackage_1.substr(0,20));
- let rtpPackage_2 = rtpPackages_2[i];
- // rtpPackage_1 = rtpPackage_1.substr(4,24);
- // rtpPackage_2 = rtpPackage_2.substr(4,24);
- // printf(
- // ` ${rtpPackage_1}`,
- // ` ${rtpPackage_2}`,
- // );
- let rtpHeaderInfo_1 = parseRtpOverTcp(0, rtpPackage_1);
- // let rtpHeaderInfo_2 = rtp.parseRtpOverTcp(1, rtpPackage_2);
- let rtpHeaderInfo_2 = {};
- // printf(
- // `${i} version: ${rtpHeaderInfo_1.version}`,
- // `${i} version: ${rtpHeaderInfo_2.version}`,
- // );
- //
- // printf(
- // `${i} padding: ${rtpHeaderInfo_1.padding}`,
- // `${i} padding: ${rtpHeaderInfo_2.padding}`,
- // );
- //
- // printf(
- // `${i} extension: ${rtpHeaderInfo_1.extension}`,
- // `${i} extension: ${rtpHeaderInfo_2.extension}`,
- // );
- //
- // printf(
- // `${i} csrcCount: ${rtpHeaderInfo_1.csrcCount}`,
- // `${i} csrcCount: ${rtpHeaderInfo_2.csrcCount}`,
- // );
- //
- // printf(
- // `${i} csrcCount: ${rtpHeaderInfo_1.csrcCount}`,
- // `${i} csrcCount: ${rtpHeaderInfo_2.csrcCount}`,
- // );
- //
- // printf(
- // `${i} marker: ${rtpHeaderInfo_1.marker}`,
- // `${i} marker: ${rtpHeaderInfo_2.marker}`,
- // );
- //
- // printf(
- // `${i} payloadType: ${rtpHeaderInfo_1.payloadType}`,
- // `${i} payloadType: ${rtpHeaderInfo_2.payloadType}`,
- // );
- //
- // printf(
- // `${i} sequenceNumber: ${rtpHeaderInfo_1.sequenceNumber}`,
- // `${i} sequenceNumber: ${rtpHeaderInfo_2.sequenceNumber}`,
- // );
- //
- // printf(
- // `${i} timestamp: ${rtpHeaderInfo_1.timestamp}`,
- // `${i} timestamp: ${rtpHeaderInfo_2.timestamp}`,
- // );
- //
- // printf(
- // `${i} ssrc: ${rtpHeaderInfo_1.ssrc}`,
- // `${i} ssrc: ${rtpHeaderInfo_2.ssrc}`,
- // );
- //
- // printf(
- // `${i} csrc: ${rtpHeaderInfo_1.csrc}`,
- // `${i} csrc: ${rtpHeaderInfo_2.csrc}`,
- // );
- //
- // printf(
- // `${i} time: ${rtpHeaderInfo_1.time}`,
- // `${i} time: ${rtpHeaderInfo_2.time}`,
- // );
- //
- // printf("------------------------------","------------------------------");
- // printf("------------------------------","------------------------------");
- // printf("------------------------------","------------------------------");
- }
- }
- main()
|