Audio 关于如何解码数据包的线索和建议

Audio 关于如何解码数据包的线索和建议,audio,udp,protocols,reverse-engineering,network-protocols,Audio,Udp,Protocols,Reverse Engineering,Network Protocols,我去年收到了一份礼物,这是一个索尼CMT700Ni音频站,支持wifi。它还具有类似airplay的功能,称为“零件流”。我目前正在深入研究,探索它,这样也许我就可以拥有自己的“PartyStream”功能设备,并免费拥有类似AirPlay的功能(挑战也很有趣) PartyStreaming是一个非常容易理解的基于SOAP的服务。有4个主要功能分为2组:服务器端和客户端。每组中的2个函数表示开始与另一端的连接或结束连接(服务器的启动/停止,客户端的加入/离开) 事实上,自从我现在能够访问服务器(

我去年收到了一份礼物,这是一个索尼CMT700Ni音频站,支持wifi。它还具有类似airplay的功能,称为“零件流”。我目前正在深入研究,探索它,这样也许我就可以拥有自己的“PartyStream”功能设备,并免费拥有类似AirPlay的功能(挑战也很有趣)

PartyStreaming是一个非常容易理解的基于SOAP的服务。有4个主要功能分为2组:服务器端和客户端。每组中的2个函数表示开始与另一端的连接或结束连接(服务器的启动/停止,客户端的加入/离开)

事实上,自从我现在能够访问服务器(音频站)通过网络传播的音频数据以来,我已经走了很远。看起来,在使用soap方法加入服务器之后,客户端必须在端口3975上向服务器发送UDP数据包。收到后,服务器通过在同一端口上向客户端发送数据包30秒进行应答

在看了大约一百个之后,我发现一个典型的数据包是1024字节长的,其中有一个64字节的头,一个64字节的0填充,然后是896字节的声音数据

我现在有了数据,但它看起来像是一堆随机写入的字节。没有编解码器信息,没有结构,没有“chunck格式”(如wave文件)。我找不到任何关于协议的好文档或任何“PartyStream”相关的技术资料

我的问题是:“嘿,有什么建议吗?有什么线索吗?我应该放弃吗?或者你有什么想法我可以试试吗?”


可能有用的东西:

  • 关于该主题的说明:

  • 转储不带标头的数据包:

  • 转储具有标题和某些格式的数据包以读取它们:


我现在要测试的东西:

  • 捕获UDP数据包作为客户端,然后启动服务器并将数据发送到我的音频站,看它是否可以读取数据;也许有服务器端加密,如果是的话,我就卡住了

  • 建立一个1kHz的文件,并在音频站上播放;捕获数据包并观察其字节,可能会与使用许多编解码器编码的同一文件进行比较,以找到一种模式


    • 您可能需要猜测一种格式。首先,看看比特率。每秒有多少字节?这将帮助您计算它可能是PCM,还是压缩格式

      您应该能够很容易地排除PCM。将一组音频数据包放入一个带有不同标题的WAV文件中(例如44.1kHz/32kHz、16kHz、16位/8bit、单声道/立体声),看看你们是否听到了和你们的音乐有点相似的声音

      如果这不起作用,您需要猜测压缩格式。MP3可能值得一试(你可以通过查看每个数据包的前四个字节是否为a来识别它)


      您可能会发现它支持多种格式,因为文档似乎建议您可以从Windows Media player播放。因此,您可以查看64字节的标题,并查看当您向其发送以不同格式编码的文件时会发生什么变化。

      您可能需要猜测一种格式。首先,看看比特率。每秒有多少字节?这将帮助您计算它可能是PCM,还是压缩格式

      您应该能够很容易地排除PCM。将一组音频数据包放入一个带有不同标题的WAV文件中(例如44.1kHz/32kHz、16kHz、16位/8bit、单声道/立体声),看看你们是否听到了和你们的音乐有点相似的声音

      如果这不起作用,您需要猜测压缩格式。MP3可能值得一试(你可以通过查看每个数据包的前四个字节是否为a来识别它)


      您可能会发现它支持多种格式,因为文档似乎建议您可以从Windows Media player播放。因此,您可以查看64字节的头,并查看当您向其发送以不同格式编码的文件时会发生什么变化。

      由于您的比特率非常高,因此数据可能未压缩。如果是这样的话,您的数据字节并不是真正随机的——至少它们不是均匀分布的

      尝试以不同的分辨率(8位、16位,可能介于两者之间)重建样本(即读取有符号整数)。对多个数据包执行此操作,计算并显示直方图(对于8位:计算多少-128,多少-126…多少127)

      您应该为每个可能的值收集至少100个样本(例如8位:12800个样本),以获得良好的统计信息。然后看看你的直方图。如果它是平坦的,并且所有值的出现次数都大致相同,则会对其进行压缩/加密,或者每个样本选取了错误的位。如果某些值的出现次数明显多于或少于其他值:宾果,这是未压缩的声音样本

      如果每个样本的所有位都有平坦的直方图,那么它就变得更难了。您可以尝试将100kb的数据转储到一个文件中,并通过linux/unix
      file
      命令运行它,看看它是否识别了格式。它可能识别压缩。然后,您必须解压缩并使用未压缩的流重复整个过程:分析直方图并运行
      文件

      还可以尝试通过vlc、mplayer、ffplay运行它,它们可以访问丰富的库(如ffmpeg),并可以识别流或在调试输出中提供有用的消息


      不管怎样,如果是加密的,你就完蛋了。。。或者至少我怀疑这种努力是否值得;)

      由于您的比特率很高,数据可能未压缩。如果是这样的话,您的数据字节并不是真正随机的——至少它们不是均匀分布的

      尝试以不同的分辨率(8位、16位,可能介于两者之间)重建样本(即读取有符号整数)。在许多数据包上执行此操作,计算并显示