所有分类
  • 所有分类
  • 音乐
  • 照片
  • 新直播
  • 自留地
  • 视频
  • 喜瑞斯

一个陈一发儿音乐电台

http的mp3流媒体链接,基本就是生成一个流媒体链接,然后套各种播放器的壳打开,原理都一样

https://radio.chatcyf.com/chenyifaer.mp3

 

播放器版,可能要缓冲一会儿才能打开

       

      陈一发儿直播的纯音频转播

      地址:https://www.chatcyf.com/live/

       

      前些日子想搞个网络版的陈一发儿电台,大概内容就是把读邮件,唱歌,以及精彩的闲聊部分,用纯音频的方式,随机播放推流出去。

      说白了,就是个没有画面的网络直播,因为实体FM电台搭建需要各种广播设备,当然还有执照什么的,所以只能搞个网络版的玩玩。

      到这里,可能就有人会问,那这个和下载到手机中的mp3音乐有什么区别?

      手机中的mp3属于点播性质,就是想听什么就可以点什么听,而这种电台版,讲究的就是一个随缘,我这边随机推流到什么,接收端就只能跟着听什么。

      比较适合开车的时候听,至于怎么在车上播放,也是得用手机播放,然后靠蓝牙或者DLNA什么的发送到车上听吧。

      毕竟都说在电台中听到的歌比手机手动点播的更好听嘛,未知才有惊喜~

       

      至于这玩意还可以干什么,比如这个html5的分享代码,以及成果

      成品演示可以看网站首页的播放器模块

      代码

      <!-- require APlayer -->
      <link rel="stylesheet" href="https://cdn.chatcyf.com/static/jsdelivr/APlayer/dist/APlayer.min.css">
      <script src="https://cdn.chatcyf.com/static/jsdelivr/APlayer/dist/APlayer.min.js"></script>
      <!-- require MetingJS -->
      <script src="https://cdn.chatcyf.com/static/jsdelivr/APlayer/dist/Meting.min.js"></script>
      
      <meting-js
      	name="陈一发儿电台"
      	artist="ChatCYF"
      	url="https://radio.chatcyf.com/chenyifaer.mp3"
      	cover="https://cdn.chatcyf.com/static/2020/05/1589707290-561c9ab24f7b7cc.jpg">
      </meting-js>
      

       

      又新增了直播转播音频版,效果看上面,这里分享两个音频直播间的html的代码

      <!-- require APlayer -->
      <link rel="stylesheet" href="https://cdn.chatcyf.com/static/jsdelivr/APlayer/dist/APlayer.min.css">
      <script src="https://cdn.chatcyf.com/static/jsdelivr/APlayer/dist/APlayer.min.js"></script>
      <!-- require MetingJS -->
      <script src="https://cdn.chatcyf.com/static/jsdelivr/APlayer/dist/Meting.min.js"></script>
      
      <meting-js
      	name="陈一发儿直播音频"
      	artist="ChatCYF"
      	url="https://radio.chatcyf.com/chatcyf.mp3"
      	cover="https://cdn.chatcyf.com/static/2020/05/1589799830-55c03779d7d1f15.jpg">
      </meting-js>
      

       

      又或者在欧洲卡车模拟2,或者美国卡车模拟这种游戏里面,可以自定义添加电台

      那么也就是说,手动添加完了以后,就可以一边在游戏中开车一边听发酱电台了

      编辑我的文档/Euro Truck Simulator 2文件夹中的live_streams.sii,按格式添加

       stream_data[0]: "http://107.173.255.235:1354/chenyifaer.mp3|Chenyifaer|Sim radio|CN|128|0"
      

      游戏内效果这样

       

      分享一下搭建的制作流程

      买个vps,最好流量大点,用debian或者ubuntu系统,直接这个代码安装

      sudo apt-get install icecast2
      

      更多设置的细节部分点这里:https://www.mfpud.com/topics/12913/

       

      接下来说推流部分

      使用ubuntu或者debian之类的系统,借助.sh脚本,用python的.py脚本推流,需要把一大堆mp3文件上传到同一个目录,然后给这些mp3批量随机重命名,因为推流包含特殊字符或者中文的mp3文件可能会报错,所以直接推流随机重命名之后的文件。

      大概流程,把所有mp3音频文件上传到某个目录,比如 /www/wwwroot/voice

      重命名的.sh脚本

      #!/bin/bash
      
      # 设置文件夹路径
      folder_path="/www/wwwroot/voice"
      
      # 进入文件夹
      cd $folder_path
      
      # 随机重命名
      for file in *; do
          # 生成10位随机字符串
          random_name=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1)
          
          # 获取文件扩展名
          extension="${file##*.}"
          
          # 生成新的文件名
          new_name=$random_name.$extension
          
          # 重命名文件
          mv "$file" "$new_name"
      done
      
      echo "重命名完成!"
      

      负责推流的 radio.sh 和 radio.py 脚本代码,把这两个文件放到 /www/wwwroot/Radio/ 目录中。

      使用 radio.sh去推动 radio.py,设置了每隔72小时重启一次。

      #!/bin/bash
      
      # 设置程序路径和名称
      program_path="/www/wwwroot/Radio/radio.py"
      file_to_delete="/www/wwwroot/Radio/ice_cast"
      
      while true; do
          # 删除文件(如果存在)
          if [ -f "$file_to_delete" ]; then
              rm "$file_to_delete"
          fi
          
          # 运行程序
          python "$program_path"
          
          # 暂停3天(259200秒)
          sleep 259200
      done
      
      
      import os
      import random
      import subprocess
      
      icecast_server = "source:password@127.0.0.1:1354"
      mount_point = "chenyifaer.mp3"
      playlist_file = "playlist.m3u"
      
      # 遍历目录中的所有MP3文件
      directory_path = "/www/wwwroot/voice"
      mp3_files = []
      for root, dirs, files in os.walk(directory_path):
          for file in files:
              if file.endswith(".mp3"):
                  mp3_files.append(os.path.abspath(os.path.join(root, file)))
      
      # 随机打乱MP3文件列表
      random.shuffle(mp3_files)
      
      # 创建M3U播放列表文件
      with open(playlist_file, "w") as f:
          for file in mp3_files:
              f.write(f"file '{file}'\n")
      
      # 使用FFmpeg进行推流
      ffmpeg_cmd = [
          "ffmpeg",
          "-re",
          "-f",
          "concat",
          "-safe",
          "0",
          "-i",
          playlist_file,
          "-c:a",
          "libmp3lame",
          "-f",
          "mp3",
          "ice_cast", "icecast://source:password@127.0.0.1:1354/chenyifaer.mp3"
      ]
      subprocess.call(ffmpeg_cmd)
      
      # 删除临时生成的播放列表文件
      os.remove(playlist_file)
      

      推流方式是,使用 screen -S radio 新建个后台终端窗口

      之后是

      cd /www/wwwroot/Radio/
      
      ./radio.sh
      

       

      在群晖NAS里面,使用虚拟机装了个windows7系统的方案。

      安装个音乐播放器,随机播放添加的音频文件,然后使用buff这个软件推流到服务器。

      不过群晖的虚拟机安装系统后没有声卡驱动,所以找了个虚拟声卡软件,Voicemeeter,这个软件本来是虚拟音频调音台软件,这里只用它虚拟声卡的功能。

      推流界面大概这样子

       

      顺便补充一下视频直播的纯音频推流部分,简易代码

      不过不推荐用代码的,推荐用借助 docker 的 restreamer 里面的转发工具,还可以添加多个音频推流,以及视频推流,全部一站式解决了。

      streamlink https://www.youtube.com/channel/UC7QVieoTCNwwW84G0bddXpA/live best -O | ffmpeg -re -i pipe:0 -c:v none -acodec libmp3lame -ar 44100 -ab 128k -f mp3 "icecast://source:password@127.0.0.1:1354/chatcyf.mp3"
      5

      站点公告

      夸克网盘的合集 https://www.chatcyf.com/topics/17464/
      没有账号?注册  忘记密码?