兩個樹莓派(或香蕉派)之間的音頻直播測試
阿新 • • 發佈:2017-05-29
部分 record 得到 toad attr 應該 進行 class 用法
原文鏈接:http://www.jianshu.com/p/04558693a731
一、場景介紹及準備工作
1. 場景
- 一共兩個設備(樹莓派或香蕉派)。一個設備做錄音端,一個設備做播放端,通過網絡的方式建立連接。
- 網絡連接采用netcat的方式在錄音端建立監聽(arecord -D ‘xxx(錄音設備名)‘ |nc -l 8888),在播放端連接上監聽後播放(nc xxx.xxx.xxx(ip地址) xxxx(端口) | aplay)。
- 為了簡化手工輸入命令,用python來實現在一個設備來控制另外一個設備自動錄音、播放。
2. 準備工作
- 兩個設備(樹莓派或香蕉派,我手上有一個樹莓派一個香蕉派,香蕉派自帶mic)、設備安裝好系統(本場景中以debian為例)、網絡環境(設備可以上網、兩個設備可以互相訪問)、2.5插頭喇叭----這部分工作在本文不做介紹
- 安裝好聲卡驅動、alsa工具、python-pip環境
二、步驟說明
1、安裝alsa-utils
在終端中輸入:
sudo apt-get install alsa-utils
安裝完成後輸入aplay -l
來查看當前的聲卡設備,輸入arecord -l
來查看當前的錄音設備。
- 聲卡播放設備
樹莓派上如果顯示不出播放設備,應該是沒有把聲音模塊加入內核,需要輸入:sudo modprobe snd-bcm2835 #把聲音模塊加入內核
- 錄音設備
樹莓派不自帶mic的需要插入外置錄音設備,香蕉派自帶mic就能直接看到錄音設備了
2. 測試單設備和錄音和播放
- 單錄音(例:
arecord -l
plughw:1,0
其他參數自行查用法)
在當前目錄錄音生成test.wavarecord -D plughw:1,0 -t wav -f cd -r 8000 ./test.wav
- 單播放
aplay ./test.wav
- 邊錄邊播
得到期望的結果為錄音和播放正常。arecord -D plughw:1,0 -t wav -f cd -r 8000 | aplay
3.測試一個設備錄音,另一個設備播放
輸入nc -h
看一下系統中是否已安裝netcat,如果未安裝,通過sudo apt-get install netcat
進行安裝。
這裏兩臺設備的ip分別為:
- A設備:192.168.199.101
- B設備:192.168.199.102
- 在A設備錄音:
arecord -D plughw:1,0 -t wav -f cd -r 8000 | nc -l 8888
- 在B設備播放:
得到期望的結果為在B設備能聽到A設備的錄音。nc 192.168.199.102 8888 | aplay
4. 自動化控制
只在一個設備裏控制另一個設備進行錄音或者播放。
這裏用python的paramiko庫來實現這個測試。
- 首先安裝pip:
sudo apt-get install build-essential libssl-dev libffi-dev python-dev sudo easy_install pip
- 通過pip安裝paramiko:
sudo pip install paramiko
- 寫python控制程序:
- 實現A設備控制B設備錄音,並在A設備中播放 (測試成功):
#!/bin/python
# -*- coding: utf-8 -*-
import paramiko
#B端的IP
ip=‘192.168.199.102‘
port = 22
username = ‘用戶名‘
password = ‘密碼‘
#B端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port,username, password)
cmd=‘arecord -t wav -f cd -r 8000 | nc -l 8888‘
stdin, stdout, stderr = ssh.exec_command(cmd)
#A端
os.system(‘nc 192.168.1.102 8888|aplay‘)
ssh.close()
- 實現A設備控制 B設備錄音,並在A設備中播放,同時A設備錄音在B設備中播放。(手頭的設備有一個沒有mic未實際測試):
#!/bin/python
# -*- coding: utf-8 -*-
import paramiko
#B端的IP
ip=‘192.168.1.102‘
port = 22
username = ‘用戶名‘
password = ‘密碼‘
#B端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port,username, password)
cmd=‘arecord -t wav -f cd -r 8000 | nc -l 8888‘
stdin, stdout, stderr = ssh.exec_command(cmd)
#A端
os.system(‘nc 192.168.1.102 8888|aplay‘)
#A端
os.system(‘arecord -t wav -f cd -r 8000 | nc -l 9999‘)
#B端
cmd=‘nc 192.168.1.101 9999 |aplay‘
stdin, stdout, stderr = ssh.exec_command(cmd)
ssh.close()
arecord -f cd -D "plughw:1" -d 10 | ssh [email protected] aplay -f cd
理論上這種方式也可行
兩個樹莓派(或香蕉派)之間的音頻直播測試