用树莓派搭建自己的FM电台并进行直播

用树莓派搭建自己的FM电台并进行直播

进行操作前首先请先备份树莓派数据,防止操作过程中出现的问题导致数据丢失!
连接杜邦线的长度不宜过长,防止发射范围超过法律规定,切勿违犯无线电管理条例!
操作过程中会设置force_turbo=1强制超频将使得树莓派官方保修失效!请考虑好再进行操作。

引子

我很早很早,在上高中时就听说过树莓派能够发射广播信号,奈何当时没有树莓派,无法进行尝试。去年下半年买了树莓派之后,我也第一时间进行了很多次尝试,但是都是以失败告终。年后在舍友和网络上的信息的帮助下,终于成功用树莓派搭建一个自己的FM电台并发射了直播信号进行直播。最近几天稍微有了些时间,简单记录下整个过程,希望能够帮助到同样对此感兴趣的人。

本文参考了使用树莓派搭建一个个人广播站这篇文章,非常感谢原作者,本文主要就是在这篇文章的基础上进行补充和拓充的。也因此最前面的安装过程本文会从简。下面正文开始咯。

所需要的材料:电脑一台、树莓派4B一个,杜邦线一条(选配,也可以用铜线、铜丝代替),收音机一台(或者有FM收音功能的设备,比如一些手机)

主要用到的软件:rpitx。它可以让树莓派发射5 KHz到1500 MHz之间的广播信号。

安装rpitx

实测在Raspberry Pi OS 64位版本上安装成功并能正常运行。

  1. 先更新树莓派上的软件包:sudo apt update

  2. 之后安装Git: sudo apt install git

注:rpitx软件源在Github,国内直接访问可能有些许困难,安装过程也需要一直连接Github安装依赖。因此安装好Git后建议提前给树莓派上的Git配置好代理,可以保证之后的安装比较顺利。搜索关键字:Git 配置代理

  1. cd到合适的位置,拉取rpitx在Github的代码:git clone https://github.com/F5OEO/rpitx
  2. 进入rpitx文件夹:cd rpitx
  3. 安装rpitx:./install.sh

之后就是漫长的安装过程了,中间会有一些报错,但是只要安装没有停下来就问题不大。放一张原作者安装成功的图,我编译的截图早就不知道那里去了Orz...

完成安装过程

在安装最后,会提示是否允许修改 /boot/config.txt,这一步要求我们将GPU的频率锁定在250Mhz,并设置force_turbo=1强制超频。注意!设置force_turbo=1强制超频将使得树莓派保修失效。输入y并回车,之后重启树莓派即可。重启测试成功之后可以再修改回原有参数500M,实测没有大问题,但是force_turbo=1不可以修改。

rpitx测试

现在让我们测试一下是否正确安装了rpitx。如果你的树莓派有金属保护壳的话,将保护壳拿下来,把树莓派暴露出来,否则收音机收不到足够的信号。

  1. 先进入rpitx目录:cd rpitx
  2. 然后输入rpitx自带的测试命令:./easytest.sh
  3. 输入命令之后窗口会变成蓝色,首先需要输入发射的频率,我国FM收音机的能接受的频率在87.5~108之间,输入一个这段频率之间的、你本地没有其他电台占用的频率,回车即可。
    选择频率
  4. 之后就进入选择发射方式的菜单了,按方向键选择“FmRds”的选项,按回车键确认。
    选择发射方式
  5. 屏幕上就会显示出下面的界面,拿出收音机,调到刚刚输入的频率,试着听一下,是不是有一段男声播报"Pi FmFds"的测试语音啦?按空格键可以返回上层菜单,再按ESC键退出测试。
    正在发射

但是这样发射的范围特别近,收音机离开树莓派一两米就没有信号了。这时候就可以拿出杜邦线,插在树莓派的GPIO 4引脚(图中7号引脚,图还是转载的原作者的...)实测加一段十几厘米的线能将发射范围拓展到两三间屋子,加到半米左右能覆盖大半层宿舍楼。但是要注意,范围不要太大,否则可能就违反无线电相关的法律条例了。

树莓派引脚

使用rpitx播放音乐

rpitx支持直接播放WAV格式的音频,命令如下:

sudo ./pifmrds -freq [frequency] -audio [filename.wav]

比如你要在88.0MHZ进行发射,播放根目录下的music.wav文件,就可以输入命令:

sudo ./pifmrds -freq 88.0 -audio /music.wav

但是如果音乐的格式是MP3格式或者是其他格式呢?当然是可以事先转换成WAV格式的音频的,但这样太麻烦了。这时候就可以请出音频处理的瑞士军刀——sox了。

先安装sox,直接从包管理器中安装就可以:sudo apt install sox libsox-fmt-all

安装完成后就可以使用如下的命令来实时转换MP3文件到WAV文件进行播放了,其中的"-"就是大名鼎鼎的Linux管道符了:

sox -t [format] [filename] -t wav - | sudo ./pifmrds -freq XX -audio -

比如你要在88.0MHZ进行发射,播放根目录下的music.mp3文件,就可以输入命令:

sox -t mp3 /music.mp3 -t wav - | sudo ./pifmrds -freq 88.0 -audio /music.wav

播放的MP3文件不一定是本地的,网络上的MP3文件或者MP3的直播源(流)也是可以的,比如可以用sox+rpitx的组合发射法广或俄罗斯卫星广播电台的直播节目:

sox -t mp3 https://rfienchinois64k.ice.infomaniak.ch/rfienchinois-64.mp3 -t wav - | sudo ./pifmrds -freq 80 -audio -

sox -t mp3 http://icecast-ruvr.cdnvideo.ru/rian.voicechi -t wav - | sudo ./pifmrds -freq 80 -audio -

使用rpitx播放网络串流

上面简单提到了如何使用sox配合rpitx来发射MP3,并且可以直播发射一小部分格式为MP3音频流的直播串流。但是很多串流是M3U8格式的,并不是MP3音频流。这个时候可以请出来Linux上的播放神器——VLC。

下面的步骤最好是先为树莓派设置VNC连接或Xrdp远程桌面连接,连接到树莓派的图形化界面上,操作会更加方便些。这里推荐这篇文章,可以作为参考:如何在 Raspberry Pi 上安装 Xrdp Server (远程桌面) - 树莓派俱乐部

  1. 使用VNC或远程桌面连接到树莓派。
  2. 先安装VLC,可以用apt命令行安装,也可以用图形化界面下的包管理器进行安装。
  3. 打开VLC,选择媒体菜单中的“流”并进入“打开媒体”对话框。
    VLC
  4. 选择“网络”选项卡,在输入框中输入M3U8源地址,之后点击“串流”按钮,弹出“流输出”对话框。弹出的新对话框中,第一个“下一个”按钮直接点击即可。
  5. 在此之后的菜单中选择"HTTP"这一选项,点击"添加"按钮。之后的端口号和路径可以不进行修改(当然端口号如果被占用了当然要进行修改,下面的命令中也要同步修改),直接下一步即可。
    流输出对话框
  6. 之后保持默认设置,配置文件为"Audio - MP3",直接下一步,然后再点击"流"按钮,VLC这一部分就完成了。
    流输出对话框2
  7. 再使用sox+rpitx的组合拳,把串流直播出来:
sox -t mp3 http://127.0.0.1:8080/ -t wav - | sudo ./pifmrds -freq 80 -audio -

直播成功

(上图中我换了一个端口号,因为8080被占用了.)现在打开收音机,听一听,是不是能听到清晰的直播节目了?

采集树莓派系统声音 并使用rpitx实时发射

下面将会简单介绍,如何采集树莓派系统声音,并使用rpitx实时发射。不管是在树莓派中打开音乐播放器播放的音乐,还是打开视频播放器播放视频的声音,还是浏览网页上网页的声音,都可以被实时采集并通过rpitx发射出去。

  1. 先查看一下可以捕捉的声卡,使用命令:pacmd list | grep ".monitor"。如果命令行返回的是”没有 PulseAudio 守护进程在运行,或者没有作为会话守护进程运行“或者是相同含义的英语,那么就先执行一下pulseaudio --start,启动一下PulseAudio 守护进程,再重新执行这条命令。正常返回的截图如下,将画红线部分的monitor name复制下来备用,不同系统版本的树莓派可能会有一些差异:
    获取monitor name
  2. 进入rpitx文件夹,输入命令:
pacat --record -d [monitor_name] | sox -t raw -b 16 -c 2 -v 1 -r 44100 -L -e signed-integer - -t wav - | sudo ./pifmrds -freq [frequency] -audio -

简单解释一下这一句长长的命令:其中,[monitor_name]就是第一步中我们得到的monitor name[frequency]是你想要发射的频率。sox命令后所跟的参数,-b代表采样的比特位数,-c代表声道的个数,-v代表转换音量的大小,-r代表采样率的多少。前面的-t代表是从raw格式进行转换,后面的-t代表转换成wav格式。当时研究出这条命令,花费了我足足半天的时间呢......

本文的标题里面还有一句“并进行直播”,这一部分就是对直播的简单实践。当然要直播自己的声音,或者直播其他设备上的声音,理论上也是可行的。有两种方案:

  1. 购买一个USB声卡,安装好USB声卡的驱动后,连接好麦克风或者AUX输入,再从树莓派端进行采集和捕获。
  2. 建立一个局域网内的直播服务器,使用其他设备进行收音并推流刀直播服务器,从树莓派上拉流进行直播。

这两种方案我都简单实践过,先是测试了第一种方法,花费10元钱淘宝包邮买了个声卡。建议购买声卡尝试的时候参照自己的经济能力,尽量买好一点的,10块钱包邮的声卡音质真的非常烂,还有杂音...第二种方案我是用的是Nginx-rtmp,服务器建立在树莓派上,但是有的时候有些许卡顿,将服务器搭建在PC上或许效果会好很多。其中第二种方法篇幅会比较长,有时间我会并单独开一篇文章好好记录一下。


2021年6月12日更新:
今天考完六级,晚上决定Happy下 (喝杯茶,喝个靓靓的杯) 。于是再次尝试了第一种方案,竟然——成功啦!于是赶紧再来记录一下第一种方案的实施过程。

我的声卡非常垃圾,或许是因为驱动或者声卡本身不支持热插拔,一开始插上USB声卡,尽管右上角显示检测到了USB声音输出设备,但插上耳机或者线路输入,声卡并不工作。于是重启了一下树莓派,声卡就工作正常了。连接上声卡的3.5麦克风口到其他设备的耳机孔/线路输出孔,就可以进行下面的操作了。

  1. 先查询一下当前系统中的声音输入设备:pacmd list | grep "input"可以看到,有一个名叫alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.mono-fallback的设备。复制设备的设备名称备用。
    input
  2. cd到rpitx的目录,执行上面提到的输出命令:
pacat --record -d alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.mono-fallback | sox -t raw -b 16 -c 2 -v 1 -r 44100 -L -e signed-integer - -t wav -  | sudo ./pifmrds -freq 100.3 -audio -

打开收音机,调整到正确的频率上,是不是能听到输出设备中的声音啦?部分输出设备的音量要调大一些才能取得不错的效果。另外根据声卡的好坏,会有些许延迟,这是正常情况。到此,用树莓派搭建自己的FM电台并进行直播这一终极目标终于实现,我们可以利用树莓派发射自己喜欢的节目咯。

本文永久链接:https://blog.xmgspace.me/archives/set-up-fm-station-with-raspberry-pi.html
本文文章标题:用树莓派搭建自己的FM电台并进行直播
如文章内无特殊说明,只要您标明转载/引用自Xiaomage's Blog,您就可以自由的转载/引用文章。禁止CSDN/采集站采集转载。
授权协议:署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)

评论

  1. 自镇流高压汞灯
    Windows Firefox
    2周前
    2021-6-01 13:28:26

    能否通过蓝牙将声音输入树莓派来进行直播?

    • Xiaomage 博主
      Windows Edge
      2周前
      2021-6-03 22:29:45

      理论上也是可以的,但估计还是得装驱动之类的,因为树莓派不是音频输出设备,所以还得好好折腾一番。

  2. qiuyuair
    Windows Chrome
    3周前
    2021-5-31 19:17:10

    相比直接听流媒,广播还是发射到收音机里传出来才最有内味儿😜

    • Xiaomage 博主
      Macintosh Safari
      3周前
      2021-5-31 22:25:44

      那是 声音从收音机里面出来就感觉不一样,尤其在是老收音机上面。

  3. 自镇流高压汞灯
    Windows Firefox
    4周前
    2021-5-24 13:43:06

    最好是在76-87发射,此处无电台且很多收音机都覆盖这个频段。否则像珠三角这种频率拥挤的地方无立锥之地可供发射。是否有办法通过这个功能输出RF模拟电视信号到电视机以充当显示器?

    • Xiaomage 博主
      Windows Edge
      3周前
      2021-5-25 9:02:35

      我自己发射的话肯定是在76-87发射的,但是考虑到很多收音机只能收到87,就写的87-108.输出模拟电视信号应该是不行的,树莓派的解码有点羸弱...与图像相关的只有SSTV能够发射。

      • 自镇流高压汞灯
        Windows Firefox
        3周前
        2021-5-26 1:02:56

        搜了下,选项2和3也能传输图像。

        • Xiaomage 博主
          Windows Edge
          3周前
          2021-5-28 8:33:51

          应该是可以的,但是还是没法像模拟电视那样接收

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇