如何使用Golang从RTP数据包中提取鹦鹉的Anafi AI无人机Protobuf元数据? 我真的很难从RTP数据包的录音中提取Protobuf有效载荷(Parrot TimedMetadata)。 我正在使用Golang。我遵循了鹦鹉的开发指南,没有成功。 这是我的主要。 packag ...

问题描述 投票:0回答:1

问题是它永远不会成功... 期望我们使用RTP扩展标头,但是如果我使用Wireshark提取并解码,则会失败。 即使我遵循Parrot-developers/libvideo-streaming的源代码(

Https://github.com/parrot-developers/libvideo-streaming/blob/master/master/src/src/src/vstrm_rtp_h264.h264.h#l140

有人知道应该如何使用“填充”字段?在文档中没有提到(

https://developer.parrot.com/docs/groundsdk-tools/video-metadata.html#id4

有人从事这样的事情吗? 我终于设法找到了一个解决方案。 我的问题来自缺乏鹦鹉的文档。如果我们看一下C库(

https://github.com/parrot-developers/libvideo-streaming/blob/blob/bfd02a6c385dcd4645dcd4645dfe8a7979797973f2e426e426 e75199a see see see see see see see see see we a we we we an44444444444.h2664.h264.h2644.h2644.h264.h 2扩展标头的标题(是的,有点复杂)。

要包装一下,您需要跳过12个字节RTP标头,检查以下两个字节是否等于0x5062(Protobuf格式),获取带有以下2个字节(多个BYTES的多个)的标题扩展的长度,请使用以下代码获取数据包信息:

go protocol-buffers rtp parrot
1个回答
0
投票

如果curpack == LastPack我们有一个完整的原始消息。否则附加了中间缓冲区。 然后,我们可以跳过以下两个字节(代表中间缓冲区的偏移,我们不需要此),最后我们到达Protobuf Raw Data。 Protobuf消息的界限如下:

data[20 : 20+(4*(length - 1)) - padding] 实际上,可以使用以下解析功能找到扩展标头的Protobuf部分:

func parse(data []byte) error { n := 12 // skip fixed size header log.Printf("Initial buffer: %x", data) version := data[n : n+2] n += 2 log.Printf("Defined by profile: 0x%x\n", version) // 0x5062 here, so no pb length := binary.BigEndian.Uint16(data[n : n+2]) n += 2 log.Printf("Length: %d\n", length) packIndicator := binary.BigEndian.Uint16(data[n : n+2]) lastPack := (packIndicator >> 9) & 0x7f curPack := (packIndicator >> 2) & 0x7f padding := (packIndicator >> 0) & 0x03 n += 2 log.Printf("Packet: %d/%d\n", curPack, lastPack) log.Printf("Padding: %d\n", padding) offset := binary.BigEndian.Uint16(data[n : n+2]) n += 2 log.Printf("Offset: %d\n", offset) rawData := data[n : int(n)+(4*int(length - 1)) - int(padding)] log.Printf("RawData: %x", rawData) model := vmeta.TimedMetadata{} if err := proto.Unmarshal(rawData, &model); err != nil { return fmt.Errorf("failed to deserialize: %v", err) } return nil }

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.