Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9393185
  • 博文数量: 1747
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20060
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1747)

文章存档

2024年(23)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2021-06-09 10:35:12


点击(此处)折叠或打开

  1. 转自 https://nicktcl.blog.csdn.net/article/details/84640851?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs

  2. https://nicktcl.blog.csdn.net/article/details/84567395?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.baidujs&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.baidujs

前言
想使用树莓派连接usb音频采集卡实时采集收音机接收到的音频,树莓派上运行着由nginx+RTMP 搭建的直播流媒体服务器,这样就可以在客户端上通过支持rtmp串流协议的播放器就可以正常接收到音频直播流了。


采用方案
树莓派作为流媒体服务器
直播协议:RTMP
实时音频源:usb音频采集卡实时采集的收音机电台音频
什么是nginx?
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。


什么是RTMP?
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。


NGINX-RTMP 流媒体服务器
基于NGINX模块,使用C语言编写的流媒体服务器,也是目前市场上使用最多的流媒体服务器。伴随着2012年CDN业务的扩展,直播业务需求暴涨,由于NGINX-RTMP中直播点播共用一套服务器,且用户熟悉信任NGINX;NGINX-RTMP逐渐处于行业垄断地位。


场景介绍
建议使用最新的树莓派镜像文件,我用之前做过一些东西在上面的树莓派系统在安装nginx服务器时出现了找不到很多需要的依赖,后来又换成了树莓派最新的raspbian系统。


本文所用树莓派系统镜像:2018-11-13-raspbian-stretch-full.img
本文所用树莓派系统版本:Linux raspberrypi 4.14.79+ #1159 Sun Nov 4 17:28:08 GMT 2018 armv6l GNU/Linux


树莓派搭建nginx+rtmp流媒体服务器步骤
先执行sudo apt-get update更新一下当前系统的软件列表,再进行以下操作。


1、安装所需要的依赖;


sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
1
2、安装nginx和rtmp,依此执行以下每一行命令;


wget


wget


tar -zxvf nginx-1.11.8.tar.gz


unzip master.zip


cd nginx-1.11.8


./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master


make


sudo make install
3、执行sudo nano /usr/local/nginx/conf/nginx.conf 修改nginx配置文件,添加以下内容。


# /usr/local/nginx/conf/nginx.conf
# 添加
rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        application live {
            live on;
            record off;
           }
        }
    }
4、启动nginx+rtmp流媒体服务器


sudo /usr/local/nginx/sbin/nginx
1
5、安装ffmpeg,默认树莓派最新的raspbian系统中已经带有ffmpeg;


sudo apt install ffmpeg
1
6、将usb音频采集卡插到树莓派的usb口,启动ffmpeg从usb音频采集卡实时采集实时的外部收音机电台音频,并推流到树莓派上搭建好的nginx+rtmp流媒体服务器。


ffmpeg -f alsa -ac 2 -i hw:1,0 -ar 44100 -f flv rtmp://192.168.10.109/live/audio
1
参数说明:主要参数:
-f 设定输出格式
-i 设定输入流(hw:1,0为外接的usb音频采集卡设备,hw:1,0的1指的是第一个外部设备,因为树莓派内部没有声卡,所以只能使用外部的usb音频采集卡);
-ar 设定采样率(因为输出为flv格式,所以采样率只能选择44100,22050,11025这三种);


另外,192.168.10.109为树莓派的IP地址。


7、在windows客户端中使用PotPlayer打开链接“rtmp://192.168.10.109/live/audio”,即可收听到实时的收音机电台音频,延时大概为2秒。


参考资料
1、树莓派使用nginx+rtmp搭建直播服务器 - zizi7的专栏 - CSDN博客
2、树莓派nginx+rtmp搭建直播流媒体服务 - 夜魂 - 开源中国
3、树莓派使用nginx+rtmp搭建直播服务器 - 程序园
4、树莓派使用nginx+rtmp搭建直播服务器 | Cyckerr
5、使用树莓派实现24小时不间断直播 - EdmondFrank’s 时光足迹
6、用树莓派做 RTMP 流直播服务器,可推送至斗鱼直播 | 树莓派实验室
7、FFmpeg 录制桌面、麦克风、摄像头 - 勤能补拙 - CSDN博客
8、ffmpeg 音视频集大成者之学习-iibull-ChinaUnix博客
9、ALSA 音频工具 amixer、aplay、arecord - 卢小喵的学习笔记 - CSDN博客
10、Linux使用ffmpeg直播推流(很重要的一个参考资料)
11、ffmpeg 音视频集大成者之学习-iibull-ChinaUnix博客
12、FFmpeg 录制桌面、麦克风、摄像头 - 勤能补拙 - CSDN博客
————————————————
前言
想通过usb音频采集卡连接树莓派后实时采集音频,并通过音频流的方式将采集到的音频实时传输到另外一台电脑。


什么是树莓派?
树莓派是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100 以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。




树莓派系统镜像
2018-11-13-raspbian-stretch-full.img


步骤
1、给树莓派安装好系统(Raspbian),安装步骤请见博客:
[折腾向]树莓派3B+安装系统(Raspbian)以及配置环境 - 大盈若冲,其用无穷。 - CSDN博客
2、将usb音频采集卡插到树莓派的usb口上,此处用的usb音频采集卡如下图,并将需要采集的音频连接至采集卡;
3、使用putty等ssh工具远程连接到树莓派;


4、在终端输入lsusb查看usb设备,下图中的Device 006即为插上的usb音频采集卡;


5、因为系统Raspbian默认安装有alsa-utils,所以直接可以输入aplay -l来查看当前的播放设备,输入arecord -l来查看当前的音频采集卡设备;如果命令不能执行,请执行sudo apt-get install alsa-utils安装alsa-utils;




5、输入nc -h看一下系统中是否已安装netcat,如果未安装,通过sudo apt-get install netcat进行安装;




测试场景:
树莓派IP:192.168.10.109
ubuntu客户端:192.168.10.122


本地采集音频测试
在树莓派端执行以下命令,让树莓派实时采集音频后并在本地播放,插上耳机即可听到采集到的实时音频。
arecord -D plughw:1,0 -t wav -f cd -r 8000 | aplay
1
调节音量大小: 结束当前命令后输入命令:alsamixer ,然后就会出现字符形式的图形界面,使用四个方向键就可以进行调节。


方式1(延迟高):
树莓派实时采集音频后将音频流通过netcat实时发布到8888端口,等待客户端连接,该方式延迟高,局域网环境下大概4秒延迟,并且客户端连接一次断开后树莓派端也会关闭该连接,导致树莓派端需要重新开启音频采集和发布音频。


在树莓派端执行以下命令,让树莓派实时采集音频后将音频流实时发布到8888端口;
arecord -D plughw:1,0 -t wav -f cd -r 8000 | nc -l 8888
1




在ubuntu客户端执行以下命令,通过netcat连接到树莓派的8888端口,获取音频流并播放,命令中“192.168.10.122”为树莓派的IP地址;
nc 192.168.10.122 8888 | aplay
1




方式2(延迟低):
ubuntu客户端实时监听自己的8888端口,然后树莓派向ubuntu客户端的8888端口推送自己实时采集到的音频。但是连接一次断开后树莓派端和ubuntu客户端都也都会关闭该连接,导致树莓派端和ubuntu客户端需要重新运行命令进行连接。


在ubuntu客户端执行以下命令设置netcat监听8888端口并播放;
nc -l -p 8888 | aplay
1




在树莓派端设置netcat推送自己实时采集到的音频;
arecord -D plughw:1,0 -t wav -f cd -r 8000 | nc 192.168.10.122 8888
1



阅读(2524) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~