2012-11-26 12 views
0

去年我收到一份礼物,它是一台索尼CMT700Ni音频站,支持wifi功能。它也具有称为“PartyStreaming”的类似AirPlay的功能。我正在挖里面,探索它,所以也许我可以结束有我自己的“PartyStreaming”,能够免费的设备,并有免费的AirPlay功能(挑战也很有趣)线索,关于如何解码数据包的建议

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

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

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

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

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


事情coud是有用的:


的事情,我很担心,现在来测试:

  • 捕获的UDP包的客户端,然后启动服务器和数据发送到我的音乐电台,看它是否可以读取它;也许有服务器端加密,如果是这样,我卡住了

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

+0

您使用什么编程语言? –

+0

我使用python进行快速开发,但是我可以使用其他任何东西 –

回答

1

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

你应该能够很容易地排除PCM。将一堆音频数据包放入带有不同标题(例如44.1kHz/32kHz,16kHz,16位/ 8bit,单声道/立体声)的WAV文件中,然后查看是否有任何类似音乐的声音。

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

您可能会发现它支持多种格式,因为文档似乎建议您可以使用Windows Media Player播放它。因此,您可以查看64字节标题,并查看将不同格式的文件发送给它时发生了哪些更改。

+0

比特率不易计算,服务器连续30秒向客户端发送数据包。至于我可以看到,它的896个字节。我试图计算这个持续时间的数据包数量,结果总是大约4300个数据包。 –

+0

关于mp3,我敢肯定这不是因为数据包数据部分的所有字节都在变化。我试图将音频站的源改为某些不输出声音(线路输入没有插入源)并且所有数据字节都变为0x00,所以我确定没有一致的“帧头”的东西 –

+1

好吧,这是相当的大量的数据,大约128kB/s,指向未压缩的PCM。尽管如此,它还不足以成为44.1Khz Stereo 16位。但是,它非常接近32kHz 16位立体声。尝试将捕获的数据包写入带有该格式的WAV文件,并查看它是否听起来不错。 –

2

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

尝试以不同的分辨率(8位,16位,可能是异国情调)重建样本(即读取signed int)。在许多数据包上做这件事,计算和显示直方图(对于8位:计算多少-128,多少-126 ......多少127)。

你应该收集每个可能值至少100个样本(说8位:12800个样本)有一个良好的统计数据。然后看看你的直方图。如果它是平坦的并且所有值都具有大约相同的出现次数,则它被压缩/加密或者您选择每个样本的错误位。如果某些值比其他值显着多或少:宾果,它是未压缩的声音样本!

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

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

无论如何,如果是加密的,你就完蛋了......至少我怀疑的努力是值得的;)

+0

我已经尝试过最大的数据转储(问题中的第一个cloudlyapp链接)vlc没有成功。我的一位朋友刚刚在Audacity中打开并播放了它。他对我说,它在32khz 16b立体声上看起来有点慢,所以他想到ADPCM,但由于他没有任何参考,他可能是错的... –

+1

尝试ffmpeg,与-f s16le -ar 44.1k -ac 2 [解释](http://ffmpeg.org/trac/ffmpeg/wiki/audio%20types)。此外,如果您对此感到满意,可以输出问题 - 因为您提到了python try [pyo](http://code.google.com/p/pyo/) – Antoine

+0

非常感谢。我会尽力尝试你的建议。顺便说一句,我有很好的方式来处理它,因为我已经确认,再次将我的原始转储放入Audacity,经过一些设置和良好的耳环后,我可以听到一个字。这有点麻烦,但这给了我一个暗示数据没有加密的暗示。测试完成后,我会尝试生成1k立体声正弦,仅剩1k正弦,仅适用1k右正弦,在pcm 44.1k 16b,32k 16b中生成3个,一个普通的mp3或者别的东西;我将在服务器上播放它并捕获字节以查找模式 –