AIRPLAY映象音訊資料的處理
AIRPLAY映象投屏過程中,音視訊資料都是加密過的,對於接收端來說,需要正確解密後才能對音視訊資料進行處理,音訊和視訊的解密過程還不一樣。音訊相對簡單一點,視訊會複雜一些。這一塊的解密過程是沒有公開的,是蘋果自身的Fairplay DRM協議部分。現在市面上的第三方Airplay接收端無非都是通過逆向過程破解了相關部分。
本文針對音訊的處理做一個介紹,音訊部分的處理相對簡單一點。
解密過程:
1 音訊採用AES CBC128進行加密,這一部分可以使用開源的openssl庫進行處理
2 該演算法需要解密的輸入引數包括aeskey,aeskiv,通過
ANNOUNCE請求中攜帶,ANNOUNCE請求同時還會攜帶音訊的編碼資訊。
解碼過程:
通過解密過程後,我們會得到AAC編碼的音訊資料,播放器播放AAC資料還需要對其進行解碼。
在我們實現的接收端程式,協商出來的是AAC-ELD編碼。對於AAC的解碼,可以使用一些開源的庫,如fdk,ffmpeg等,也可以使用android提供的MediaCodec進行解碼。
但筆者曾經在某些Android手機上發現,解碼AAC-ELD有問題。推薦大家用fdk進行解碼。
使用fdk對aac進行解碼,其實在網上也能找到很多例子,但筆者發現很多例子有一處錯誤,在低版本的fdk上不會出現錯誤,但是在高版本的fdk會出現crash這樣的問題。話不多說,直接通過部分程式碼來說明過程。
初始化解碼器:
UCHAR eld_conf[] = { 0xF8, 0xE8, 0x50, 0x00 }; //44100,2channels,s16 UCHAR *aac_eld_conf[] = { eld_conf }; //TODO just for aac eld config static UINT aac_eld_conf_len = sizeof(eld_conf); decoder = aacDecoder_Open(TT_MP4_RAW, 1); AAC_DECODER_ERROR ret = aacDecoder_ConfigRaw(decoder, aac_eld_conf, &aac_eld_conf_len); buffer = new INT_PCM[960]; buffer_size = 1920; pcm_size = 960;
上述程式碼中eld_conf這一塊的值對應android MediaCodec aac,CSD buffer #0具體什麼含義看規範吧。
每次編碼和傳送的採用數為480,故下面申請對應長度的Buffer
解碼:
bytesValid = dataLen;
while(bytesValid){
ret = aacDecoder_Fill(decoder, reinterpret_cast<UCHAR **>(&p_frame), (UINT*)&size, &bytesValid);
if (ret != AAC_DEC_OK) {
printf("aacDecoder_Fill return %x.\r\n", ret);
return;
}
for (;;) {
ret = aacDecoder_DecodeFrame(decoder, buffer, pcm_size, 0);
if (ret == AAC_DEC_OK) {
dump_audio_data((unsigned char *)buffer,buffer_size);
} else if (ret == AAC_DEC_NOT_ENOUGH_BITS)
break;
else {
printf("aacDecoder_DecodeFrame return %x.\r\n", ret);
return;
}
}
}
aacDecoder_DecodeFrame填入的引數為pcm_size,其單位為short,而不是byte。網上的例子很多都是在這裡錯誤。請各位務必注意。
技術交流有興趣請加:
音視訊技術交流群:308601278
無線投屏技術交流群:582349005
無線投屏官網: http://www.wirelessdisplay.cn/
無線投屏DEMO下載: https://github.com/wirelessdisplay
公司官網
www.bijienetworks.com
我司有成熟的視訊會議/視訊監控/視訊排程/無線投屏盒子銷售,也可做音視訊相關產品和技術的定製化開發
商務合作請至郵件[email protected]
相關推薦
AIRPLAY映象音訊資料的處理
AIRPLAY映象投屏過程中,音視訊資料都是加密過的,對於接收端來說,需要正確解密後才能對音視訊資料進行處理,音訊和視訊的解密過程還不一樣。音訊相對簡單一點,視訊會複雜一些。這一塊的解密過程是沒有公開的,是蘋果自身的Fairplay DRM協議部分。現在市面上的第三方Air
視音訊資料處理入門:PCM音訊取樣資料處理
=====================================================視音訊資料處理入門系列文章:=====================================================上一篇文章記錄了RGB/YUV視訊畫素
視音訊資料處理入門 AAC音訊碼流解析
=====================================================視音訊資料處理入門系列文章:=====================================================本文繼續上一篇文章的內容,介紹一個音訊
視音訊資料處理入門 FLV封裝格式解析
=====================================================視音訊資料處理入門系列文章:=====================================================前兩篇文章介紹了音訊碼流處理程式和視訊
視音訊資料處理入門:UDP-RTP協議解析
=====================================================視音訊資料處理入門系列文章:=====================================================本文介紹網路協議資料的處理程式。網路
視音訊資料處理入門:AAC音訊碼流解析
=====================================================視音訊資料處理入門系列文章:=====================================================本文繼續上一篇文章的內容,介紹一個音
視音訊資料處理入門:FLV封裝格式解析
=====================================================視音訊資料處理入門系列文章:=====================================================前兩篇文章介紹了音訊碼流處理程式和視
音視訊資料處理(6)--- PCM音訊取樣資料處理程式碼實現
音訊取樣資料在視訊播放器的解碼流程中的位置如下圖所示。 本文分別介紹如下幾個PCM音訊取樣資料處理函式: 分離PCM16LE雙聲道音訊取樣資料的左聲道和右聲道 將PCM16LE雙聲道音訊取樣資料中左聲道的音量降一半 將PCM16LE雙聲道音訊取樣資
資料處理不常用語句3
###########################時間序列################################# data_bs.index = pd.date_range (start='2018-08-01 00:00:00',periods=744,freq='h',norma
由散列表到BitMap的概念與應用(三):面試中的海量資料處理
一道面試題 在面試軟體開發工程師時,經常會遇到海量資料排序和去重的面試題,特別是大資料崗位。 例1:給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,找出a、b檔案共同的url? 首先我們最常想到的方法是讀取檔案a,建立雜湊表,然後再讀取檔案b,遍歷檔
python對於資料處理所會用到得一般操作
xlsx檔案轉為csv import pandas as pd#需要用到的包 import numpy as np#需要用到的包 path = "/home/public/GFQ/math_model/"#路徑 filepath_poi = path + "data.xlsx"#路徑+檔名 da
資料處理速查表
Python資料科學速查表 - Python 基礎 Python資料科學速查表 - 匯入資料 Python資料科學速查表 - Jupyter Notebook 資料處理系列推出的內容包括:Numpy、Pandas 及 SciPy:  
R語言-預測海藻數量1(資料準備和缺失資料處理)
準備工作 安裝要用到得到包 install.packages("DMwR") 載入並檢視資料 > library(lattice) > library(grid) > library(DMwR) > summary(algae) season
R語言時間序列處理介紹--以A股財報資料處理為案例
本文以處理A股財務報表為例,介紹了將資料轉換成時間序列後在進行處理的一些方法和思路。將會用到xts,lapply,do.call等資料結構和函式。 1、 簡介 我們從各個途徑獲得了個股的財務報表原始資料後,還需要對資料做一些處理,以便後續指標計算和使用。舉個簡單的例子,
【oracle 處理日期型資料】常見日期資料處理
獲得當前日期 sysdate() 為日期加上特定月份 add_months(end_date,1) 求日期所在月的最後一天 last_day() 計算兩個日期所差的月數 months_between() 計算日期之後的一週之內的日期 next_day()
小專案(Gensim庫)--維基百科中文資料處理
1.下載維基百科資料 https://dumps.wikimedia.org/zhwiki/latest/ 2.預處理檔案:將壓縮的檔案轉化成.txt檔案 新增指令碼檔案process.py,程式碼如下: import logging import os.path import sys
panda資料處理:groupby()函式
groupby()是pandas庫中DataFrame結構的函式,最近在看用Movielens資料集進行關聯分析的教程時,發現用到了groupby()函式,覺得該函式功能很強大,經常用在for迴圈結構中用於提取資料,故對該函式一些常用的方法進行一些記錄。
資料處理:用pandas處理大型csv檔案
在訓練機器學習模型的過程中,源資料常常不符合我們的要求。大量繁雜的資料,需要按照我們的需求進行過濾。拿到我們想要的資料格式,並建立能夠反映資料間邏輯結構的資料表達形式。 最近就拿到一個小任務,需要處理70多萬條資料。 我們在處理csv檔案時,經常使用pandas,可以幫助處理較大的
資料處理--reshape2包(長寬資料)
寬資料 ozone wind temp 1 23.62 11.623 65.55 2 29.44 10.267 79.10 3 59.12 8.942 83.90 4 59.96 8.794 83.97 長資料 variable value 1 ozone 23.
DKhadoop大資料處理平臺監控資料介紹
標題:DKhadoop大資料處理平臺監控資料介紹 2018年國內大資料公司50強榜單排名已經公佈了出來,大快以黑馬之姿闖入50強,並摘得多項桂冠。Hanlp自然語言處理技術也榮膺了“2018中國資料星技術”獎。對這份榜單感興趣的可以找一下看看。本篇承接上一篇《DKM平臺監控引數說明》,繼續就