2012-11-26 13 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或者別的東西;我將在服務器上播放它並捕獲字節以查找模式 –