Golang通过pcap文件解析TS流以恢复TS视频

电脑杂谈  发布时间:2020-04-06 01:20:48  来源:网络整理

ts 文件解析_解析m3u8文件下载ts_ts 文件解析

最近在捕获和记录数据包的情况下,通过tcpdump捕获软件包后分析软件包文件,并解析出软件包中的视频和其他文件信息. 首先ts 文件解析,让我们做最简单的部分,分析多播流的数据包捕获视频.

ts 文件解析_ts 文件解析_解析m3u8文件下载ts

TS数据包由4B报头ts 文件解析,可变长度调整报头和有效载荷组成;

解析m3u8文件下载ts_ts 文件解析_ts 文件解析

标头结构定义如下:

ts 文件解析_ts 文件解析_解析m3u8文件下载ts

struct ts_header{
        char     syn_byte:8;                        // 包头同步字节,0x47
        char     transport_error_indicator:1;       //传送数据包差错指示器
        char    payload_unit_start_indicator:1;     //有效净荷单元开始指示器
        char    transport_priority:1;               //传送优先级
        int        PID:13;                          //包ID
        char    transport_scrambling_control:2;     //传送加扰控制
        char    adaptation_field_control:2;         //调整字段控制
        char    continuity_conunter:4;              //连续计数器 0-15
    }

解析m3u8文件下载ts_ts 文件解析_ts 文件解析

syn_byte位用于标识TS流. 47个连续的字节之间的间隔为188,并且有3个以上的连续字节,则此流为TS,原始二进制文件可以字节为单位写入. 进入空白的ts文件.

// 判断 连续 三个71 中间间隔是否 187
func isTs(p *[]byte) bool{
    var (
        num int // 包含连续 71的个数
    )
    for index,value :=range *p{
        if value!=71 {
            continue
        }
        lastindex:=index
        for {
            ni:=lastindex+188
            if (len(*p)-1)<ni {
                return false
            }
            if (*p)[ni]!=71 {
                break
            }
            num++
            if num>=3 {
                return true
            }
            lastindex=ni
        }
    }
    return false
}

在上面的代码中使用71的原因是将47转换为十进制是71. 识别ts流之后,可以将当前包的有效负载保存在文件中,并最终生成TS文件. 这样就完成了TS流. 捕获视频文件以进行视频还原.

Golang通过pcap文件解析TS流并恢复TS video-WEB地平线webkk.net


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-165373-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...