Parser

conveter.py


#!/usr/bin/python-
# -*- coding: UTF-8 -*-
class Converter(object):
    # to make the respond value can be analyze in hex
    def toHexStr(self,s):
        strv=""
        for x in s:
            if ord(x)<=15:
                strv+="0"+hex(ord(x))
            else :
                strv+=hex(ord(x))
        strv=strv.replace("0x", "")
        return strv
    # to get the checksum
    def toInt(self,s):
        value=0
        for x in range(0,len(s)):
            if s[len(s)-1-x]=="0":
                value+=0*16**x
            elif s[len(s)-1-x]=="1":
                value+=1*16**x
            elif s[len(s)-1-x]=="2":
                value+=2*16**x
            elif s[len(s)-1-x]=="3":
                value+=3*16**x
            elif s[len(s)-1-x]=="4":
                value+=4*16**x
            elif s[len(s)-1-x]=="5":
                value+=5*16**x
            elif s[len(s)-1-x]=="6":
                value+=6*16**x
            elif s[len(s)-1-x]=="7":
                value+=7*16**x
            elif s[len(s)-1-x]=="8":
                value+=8*16**x
            elif s[len(s)-1-x]=="9":
                value+=9*16**x
            elif s[len(s)-1-x]=="a":
                value+=10*16**x
            elif s[len(s)-1-x]=="b":
                value+=11*16**x
            elif s[len(s)-1-x]=="c":
                value+=12*16**x
            elif s[len(s)-1-x]=="d":
                value+=13*16**x
            elif s[len(s)-1-x]=="e":
                value+=14*16**x
            elif s[len(s)-1-x]=="f":
                value+=15*16**x
        return value

Parser.py


#!/usr/bin/python-
# -*- coding: UTF-8 -*-
import sys
sys.path.append("c:/Users/Administrator/Desktop/JERE/project/client/")
from converter import Converter


class MyParser(object):


def __init__(self,respond):
self.__respond=respond


def formatCheck(self):
msg=self.__respond
if msg[0]=="\x7E" and msg[len(msg)-1]=="\x7E":
if len(msg)>=34:
dataLengthStr=msg[28:32]
converter=Converter()
dataLength=converter.toInt(converter.toHexStr(dataLengthStr))
if dataLength>0:
if len(msg)==(34+dataLength):
cbody=msg[1:len(msg)-2]
testValueFeedback=msg[len(msg)-2]
intvalue=0
for c in cbody:
intvalue+=ord(c)
testValueOriginalString=hex(intvalue)
testValueString=testValueOriginalString[len(testValueOriginalString)-2:len(testValueOriginalString)]
testValue=chr(Converter().toInt(testValueString))
if testValueFeedback==testValue:
command=msg[25:28]
if command=="\x21\x02\x00":
return (True,True,False,"","","Password Incorrect")
elif command=="\x21\x03\x00":
return (True,True,False,"","","Check Failed")
elif command=="\x21\x04\x00":
return (True,True,False,"","","Ip Incorrect")
elif command=="\x21\x01\x00":
return (True,True,False,"","","Ok")
else:
return (True,True,True,"",msg[32:(32+dataLength)],"")
else :
return (False,False,False,"ChecksumErrorNData","","")
else :
return (False,False,False,"DataLengthErrorNData","","")
else :
if len(msg)==34:
cbody=msg[1:len(msg)-3]
testValueFeedback=msg[len(msg)-2]
intvalue=0
for c in cbody:
intvalue+=ord(c)
testValueOriginalString=hex(intvalue)
testValueString=testValueOriginalString[len(testValueOriginalString)-2:len(testValueOriginalString)]
testValue=chr(Converter().toInt(testValueString))
if testValueFeedback==testValue:
command=msg[25:28]
if command=="\x21\x02\x00":
return (True,False,False,"","NoData","Password Incorrect")
elif command=="\x21\x03\x00":
return (True,False,False,"","NoData","Check Failed")
elif command=="\x21\x04\x00":
return (True,False,False,"","NoData","Ip Incorrect")
elif command=="\x21\x01\x00":
return (True,False,False,"","NoData","Ok")
else:
return (True,False,True,"","NoData","")
else :
return (False,False,False,"ChecksumErrorNData","","")
else :
return (False,False,False,"DataLengthErrorYData","","")
else :
return (False,False,False,"DataLengthError","","")
else :
return (False,False,False,"BegingAndDataError","","")


def check(self):
result=self.formatCheck()
if result[0]==True:
if result[2]==True:
if result[1]==True:
return (True,result[4])
else:
return (True,"NoData"+result[4])
else:
return (False,result[5])
else :
return (False,result[3])

### FFmpeg 解析器文档与使用 #### 什么是FFmpeg解析器? FFmpeg中的解析器(parser)用于处理编码后的数据流,能够识别并分割出完整的帧或包。这有助于更高效地管理和操作多媒体文件。 #### 主要功能 - **帧同步**:通过查找特定的起始码来定位每一帧的位置。 - **元数据分析**:提取每帧的相关信息如时间戳、持续时间和侧信道数据等[^1]。 #### 使用方法 为了利用FFmpeg提供的解析器接口,在程序中通常需要执行以下几个关键步骤: 1. 获取对应的`AVParser`结构体指针; 2. 初始化该对象以便后续调用其成员函数; 3. 将待解析的数据传递给解析器进行处理; 4. 处理返回的结果直至结束条件满足。 下面是一个简单的C语言代码片段展示如何初始化H.264视频流的解析过程: ```c #include <libavcodec/avcodec.h> // ... const AVCodecParser *parser; AVCodecParserContext *pc; parser = av_parser_init(AV_CODEC_ID_H264); if (!parser) { fprintf(stderr, "Unable to find H.264 parser\n"); exit(1); } pc = av_parser_init(parser->codec_ids[0]); if (!pc){ fprintf(stderr,"Could not allocate parser context.\n"); exit(1); } ``` 此段代码展示了获取指定编解码ID关联的解析器实例,并对其进行必要的设置以准备接收输入数据[^2]。 对于实际应用来说,还需要循环读取原始比特流并将它们送入上述创建好的解析上下文中进一步拆分成为独立单元供下一步骤使用。 #### 关键API介绍 - `av_parser_parse2()` 是最重要的工作马达之一,它接受来自外部源的一系列字节作为参数,并尝试从中分离出有效的NALU或其他类型的媒体样本[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值