1. 程式人生 > >AIRPLAY映象音訊資料的處理

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平臺監控引數說明》,繼續就