0

去年我收到了一个礼物,它是一个索尼 CMT700Ni 音频站,支持 wifi。它还具有类似于广播的功能,称为“PartyStreaming”。我目前正在挖掘内部,探索它,所以也许我可以结束拥有自己的“PartyStreaming”设备并免费拥有类似 AirPlay 的功能(挑战也很有趣)

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

实际上我已经走了很远,因为我现在能够访问服务器 - 音频站 - 在网络上传播的音频数据。似乎,在使用soap方法加入服务器后,客户端必须在端口3975上向服务器发送一个UDP数据包。收到后,服务器通过在同一端口上向客户端发送数据包来回复,持续30秒。

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

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

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


可能有用的东西:


我现在要测试的东西:

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

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

4

2 回答 2

2

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

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

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

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

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

无论如何,如果它被加密了,你就完蛋了……或者至少我怀疑付出的努力是否值得;)

于 2012-11-26T17:11:00.383 回答
1

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

您应该能够很容易地排除 PCM。将一堆音频包放入具有不同标题(例如 44.1kHz/32kHz、16kHz、16 位/8 位、单声道/立体声)的 WAV 文件中,看看您是否听到任何与您的音乐相似的声音。

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

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

于 2012-11-26T07:36:02.710 回答