我去年收到的礼物是索尼CMT700Ni音频电台,支持wifi。它还具有类似于airplay的功能,称为“PartyStreaming”。我正在挖掘内部,探索它,所以也许我可以结束拥有自己的“PartyStreaming”功能设备并免费使用类似AirPlay的功能(挑战也非常有趣)
PartyStreaming是一种基于SOAP的服务,非常容易理解。有4个主要功能分为2组:服务器端和客户端。每组中的2个函数表示从另一侧开始连接或结束它(服务器启动/停止,客户端加入/离开)
实际上我走得很远,因为我现在能够访问服务器 - 音频站 - 通过网络传播的音频数据。看起来,在使用soap方法加入服务器之后,客户端必须在端口3975上向服务器发送UDP数据包。收到后,服务器通过在同一端口上向客户端发送数据包30秒来回复。
在查看了大约一百个之后,我发现典型的数据包长度为1024字节,其中有一个64字节的标头,一个64字节的0的填充,然后是一个896字节的声音数据。
我现在有数据,但看起来像一堆随机写的字节。没有编解码器信息,没有结构,没有“chunck格式”(就像波形文件一样)。我找不到关于协议或任何“PartyStreaming”相关技术内容的任何好文档。
我的问题是:“嗨StackOverflow,任何建议?任何线索?我应该放弃,或者你有想法我可以测试?”
有用的东西:
有关主题的说明:http://pastebin.com/pp8aRQrR
没有标题的数据包转储:http://cl.ly/430H2i001K3R
转储带有标题和一些格式的数据包以便阅读它们:http://cl.ly/2i2F2c3E3W3C
我即将测试的事情:
将UDP数据包捕获为客户端,然后启动服务器并将该数据发送到我的音频站以查看它是否可以读取它;也许有服务器端加密,如果是这样,我就卡住了
构建1kHz文件,并在音频台播放;捕获数据包并观察其字节,可能与使用许多编解码器编码的同一文件进行比较以找到模式...
答案 0 :(得分:2)
由于您的比特率非常高,因此数据可能未压缩。如果是这种情况,那么您的数据字节实际上并不是随机的 - 至少它们不是均匀分布的。
尝试以不同的分辨率重建样本(即读取有符号的整数)(8位,16位,可能介于两者之间)。在许多数据包上执行此操作,计算并显示直方图(对于8位:计算多少-128,多少-126 ...多少127)。
您应该为每个可能的值收集至少100个样本(例如8位:12,800个样本)以获得良好的统计数据。然后看看你的直方图。如果它是平坦的并且所有值具有大约相同的出现次数,则它被压缩/加密或者您为每个样本选择了错误的位。如果某些值明显多于或少于其他值:bingo它是未压缩的声音样本!
如果每个样本的所有位都得到平直的直方图,则会变得更难。您可以尝试将100kb数据转储到文件并通过linux / unix file
命令运行它,看看它是否识别格式。它可能会识别压缩。然后你将不得不解压缩并使用未压缩的流重复整个过程:分析直方图并运行file
。
还可以尝试通过vlc,mplayer,ffplay运行它,它可以访问丰富的库,例如ffmpeg,并且可以识别流或在调试输出中提供有用的消息。
无论如何,如果它被加密你就被搞砸了......或者至少我怀疑这种努力是值得的;)
答案 1 :(得分:1)
你可能不得不猜测一种格式。首先,看看比特率。你得到每秒多少字节?这将帮助您计算它是PCM,还是压缩格式。
你应该可以很容易地排除PCM。将一堆音频数据包放入具有不同标题的WAV文件中(例如44.1kHz / 32kHz,16kHz,16比特/ 8比特,单声道/立体声),看看你是否听到任何类似音乐的声音。
如果这不起作用,您需要猜测压缩格式。 MP3可能值得一试(您可以通过查看每个数据包中的前四个字节是frame header来识别它。)
您可能会发现它支持多种格式,因为文档似乎建议您可以从Windows Media Player播放它。因此,当您将以不同格式编码的文件发送给它时,您可以查看64字节标题并查看更改。