感谢IT之家网友 晨旭喵 的投稿

写在前面:

之前我写了篇教程(用树莓派在B站24小时直播音乐),评论里有很多人都想要点歌功能。

点歌这个功能吧,其实想加也不算太难,可是啊…这是树莓派啊!直播姬弹幕姬实时渲染什么的带不动的啊!(好像也装不上)

可是啊…点歌这个功能好像也是很有必要的呢……

所以呢…我今天花了一个上午+一个中午的时间自己做了一个能在树莓派上运行的点歌台,虽然很简陋,但是能实现这个功能就已经很不错了嘛

(不会php和python的我靠着搜索引擎用php和python实现了这个功能…不是计算机专业的我已经尽力了……)

最终效果:http://live.bilibili.com/16703

本文着重于讲解如何搭建,不会涉及代码的详细解释。

下面开始教程

第一步:

第二步:安装python的库

我们的python脚本需要一些必不可少的库,依次运行下面两个命令进行安装:

sudo pip install eyed3

sudo pip install pathlib

第三步:安装nginx+php环境

这一步是为了能运行点歌的网页

安装nginx:

sudo apt-get install nginx

启动 nginx:

sudo /etc/init.d/nginx start

接下来修改配置文件:

sudo nano /etc/nginx/sites-available/default

在 “listen 80” 那个大括号里,把 “index index.html index.htm” 后面加上 “index.php”,像下面这样:

listen 80;

root /usr/share/nginx/www;

index index.html index.htm index.php;

然后再找到 php 那一段,改成下面这样:

location ~ .php$ {

fastcgi_pass unix:/var/run/php5-fpm.sock;

fastcgi_index index.php;

include fastcgi_params;

}

改完配置文件之后,保存关闭(ctrl+o回车,ctrl+x)。

安装 php 和必要组件:

sudo apt-get install php5-fpm php5-sqlite

重启 nginx:

sudo /etc/init.d/nginx reload

如果你不嫌烦的话,可以再把所有php组件装上,我也不知道后面的代码需不需要这些东西,因为我全都装上了。

sudo apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

第四步:内网穿透(有公网IP的各位可以跳过,你们直连ip就行了)

网站搭建好了,我们要实现别人可以访问,可是呢,我这里是学校的局域网(哭),所以需要内网穿透。

这里我是用的是ngrok,水家之前有人发过nat123的,感兴趣的可以去找找。

其实用法很简单(如果你不想自己搭建服务器的话)。

用 ngrok.cc 提供的服务举例:

首先到后台开通一个隧道,隧道协议选择 “http”、本地端口写你前面设置的端口(前面配置文件里写的是 80)“127.0.0.1:80” 其他的按照自己的需求来写就行,

然后下载官网提供的软件,树莓的话要选linux arm版,

下载之后先给 777 权限:

sudo chmod 777 xxxx#文件名

然后按教程运行就行了:

./sunny clientid xxxxxxxxxxxxxx

如果前面没有做错什么的话,你的网站应该就能从ngrok.cc里获取的链接里访问了。

第五步:点歌系统所需的php文件

这里php所需要实现的功能就是:

1.可以自动搜索歌曲;

2.可以获取到歌曲的下载链接;

我网上找到一个远古的网易云api,所以我就拿来用了。

php代码在水家文章里发可能被转码,所以我发到了这里:glist。

php文件放置请放到/usr/share/nginx/www/这一级文件夹的下面任意位置(你要保证别人能访问),

为了能让脚本正常运行,建议在赋予其读写文件夹的权限:

sudo chmod -R 777 /usr/share/nginx/www/

注意事项:本人的php水平不高,毕竟没有系统性学过,这个文件是靠着必应来的代码拼凑+模仿写成的,可能会有漏洞(应该问题不大)。

第六步:使用python脚本实现下载歌曲、调用ffmpeg渲染视频的功能

python脚本如下,请注意缩进和准备好游标卡尺(笔者将php文件放到了/usr/share/nginx/www/songs/文件夹):

import os

import urllib

import eyed3

import time

while True:

for i in range(1, 30+1):

if(os.path.exists('/usr/share/nginx/www/songs/'+str(i)+'.txt')): #判断待渲染文件是否存在

f = open('/usr/share/nginx/www/songs/'+str(i)+'.txt')

content = f.read() #读取文件

print('downloading '+str(i)+'.mp3') #debug

urllib.urlretrieve(content, str(i)+'.mp3') #下载mp3文件

print('download success') #debug

xx=eyed3.load(str(i)+'.mp3')

seconds=xx.info.time_secs #获取音乐时长,为渲染一图流视频做准备

os.system('ffmpeg -loop 1 -r 1 -t '+str(seconds)+' -f image2 -i '+str(i)+'.png -vcodec libx264 -pix_fmt yuv420p -crf 24 -y SinglePictureVideo.mp4') #渲染一图流视频,参数都是我做完试出来的,尤其是-pix_fmt yuv420p这个参数,缺了它视频就是黑屏了

os.system('ffmpeg -i SinglePictureVideo.mp4 -i '+str(i)+'.mp3 -c:v copy -c:a aac -y '+str(i)+'.flv') #合并视频与音频

os.remove(str(i)+'.mp3') #删掉临时文件

os.remove('SinglePictureVideo.mp4')

os.remove('/usr/share/nginx/www/songs/'+str(i)+'.txt')

print(str(i)+'output finished')

time.sleep(10)

注意事项:本人的python水平也不高,所以……(逃

第六步:做好视频封面

请在py脚本的同级目录新建三十个png图片,文件名也要1-30,看我多么有诚意的手绘(真难看):

第七步:修改ffmpeg运行脚本

因为我们是运行多个文件,所以我们需要连续推流,这时ffmpeg网站的帮助文档就起作用了(我找了半天没找到发现官网就有…

官网说明:https://trac.ffmpeg.org/wiki/Concatenate

下面直接说做法了,首先新建一个txt,内容类似为:

file '/home/pi/songs/1.flv'

file '/home/pi/songs/2.flv'

file '/home/pi/songs/3.flv'

file '/home/pi/songs/4.flv'

file '/home/pi/songs/5.flv'

file '/home/pi/songs/6.flv'

file '/home/pi/songs/7.flv'

file '/home/pi/songs/8.flv'

file '/home/pi/songs/9.flv'

file '/home/pi/songs/10.flv'

file '/home/pi/songs/11.flv'

file '/home/pi/songs/12.flv'

file '/home/pi/songs/13.flv'

file '/home/pi/songs/14.flv'

file '/home/pi/songs/15.flv'

file '/home/pi/songs/16.flv'

file '/home/pi/songs/17.flv'

file '/home/pi/songs/18.flv'

file '/home/pi/songs/19.flv'

file '/home/pi/songs/20.flv'

file '/home/pi/songs/21.flv'

file '/home/pi/songs/22.flv'

file '/home/pi/songs/23.flv'

file '/home/pi/songs/24.flv'

file '/home/pi/songs/25.flv'

file '/home/pi/songs/26.flv'

file '/home/pi/songs/27.flv'

file '/home/pi/songs/28.flv'

file '/home/pi/songs/29.flv'

file '/home/pi/songs/30.flv'

然后多复制粘贴十几遍保存,免得放完又重启。启动的sh脚本也不能用昨天的了,要改成下面的样子:

#!/bin/bash

while true

do

ffmpeg -re -f concat -safe 0 -i playlist.txt -vcodec copy -acodec aac -b:a 192k -f flv "你的。。。那啥网址和码"

done

注意本sh脚本要与playlist.txt在同级目录(废话)…

这样ffmpeg就会连续按txt里的顺序进行推流。

第八步:把初始视频文件生成好

这一步非常简单,就是把1-30.flv全部生成完就行,

我这里全部选择了“种太阳”,我对不起直播间的那位小伙伴(Sortana)的耳朵。

第九步:启动

启动就行了。。

screen nohup sh live.sh &

screen nohup python live.py &

教程完毕。

由于内容比较多,可能有遗漏的部分,请谅解。

python弹幕点歌_直播续章:用树莓派搭建B站直播“点歌台”相关推荐

  1. python弹幕点歌_IT之家学院:使用树莓派搭建 B 站直播点歌台

    感谢IT之家网友 晨旭喵 的投稿 写在前面: 昨天我写了篇教程(IT之家学院:利用树莓派在B站24小时直播音乐),评论里有很多人都想要点歌功能. 点歌这个功能吧,其实想加也不算太难,可是啊-这是树莓派 ...

  2. H5直播之从推流服务搭建到视频直播

    最近视频直播比较火,发现目前 WEB 上主流的视频直播方案有 HLS 和 RTMP,移动 WEB 端目前以 HLS 为主,PC端则以 RTMP 为主实时性较好,接下来将围绕这两种视频流协议来展开H5直 ...

  3. [转]H5直播之从推流服务搭建到视频直播

    转自http://www.php.cn/html5-tutorial-403035.html 最近视频直播比较火,发现目前 WEB 上主流的视频直播方案有 HLS 和 RTMP,移动 WEB 端目前以 ...

  4. python弹幕脚本_自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万!...

    大家好,今天又给大家带来了Python爬虫的分享,今天我们继续上次的问题,继续来研究一下虎牙平台的爬虫. 起因 写完上次的代码,我冒出有一个很有趣的想法,就是,我们可以使用selenium来完成虎牙自 ...

  5. python弹幕代码_只需3 行代码就可以获取B站(弹幕、评论、用户)数据

    在今年5月份,我写了一篇爬取B站视频的文章,今天给大家介绍一个获取B站数据的Python扩展库-bilibili_api,可以获取的数据包括: video-视频模块 user-用户模块 dynamic ...

  6. python 定义变量_第三章(第2节):变量和常量

    变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型,比如我们上节课刚刚学过的基本数据类型或者我们后面要学的自定义数据类型. 所谓常量就是不能改变 ...

  7. opencv python 生成画布_第16章 坚持一百秒(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现坚持一百秒的游戏,玩家通过移动人脸控制飞碟躲避越来越多的反弹子弹,效果如图所示.首先利用面向对象的知识,实现了一个鼠 ...

  8. python弹幕分析_《用python 玩转数据》项目——B站弹幕数据分析

    1. 背景 在视频网站上,一边看视频一边发弹幕已经是网友的习惯.在B站上有很多种类的视频,也聚集了各种爱好的网友.本项目,就是对B站弹幕数据进行分析.选取分析的对象是B站上点播量过1.4亿的一部剧&l ...

  9. python弹幕代码_使用python对隐秘的角落进行弹幕分析

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 最近有部很火的悬疑推理剧:<隐秘的角落>,豆瓣评分9.0,周末闲来无 ...

最新文章

  1. R 回归 虚拟变量na_工具amp;方法 | R语言机器学习包大全(共45个包)
  2. 05-ServletconfigServletCOntext
  3. 自定义ui_如何允许用户自定义UI
  4. 面试官问我:如何减少客户对交付成果的质疑
  5. batch spring 重复执行_spring-batch – Spring批处理:重新启动作业,然后自动启动下一个作业...
  6. discuz核心函数库function_core的函数注释
  7. 晓庄师范的3 4 计算机应用,2021全国应用心理学专业大学排名(5篇)
  8. mysql的round_MySQL的ROUND函数
  9. pythonic希腊典故_希腊神话习语(整理)
  10. 关于阿里云域名购买与DNS解析教程
  11. Oracle LiveLabs实验:Application Continuity Fundamentals
  12. html实现粘性页脚
  13. CODEVS 2491 玉蟾宫
  14. 【转】经典的劝酒令和挡酒词
  15. 巅峰对决:node.js和php性能测试
  16. java微博图床小工具
  17. oracle大数据量删除方案
  18. 银河麒麟踩坑笔记——tty、单用户模式
  19. IDE新建gradle liferay workspace项目没有项目目录问题解决方案
  20. python 解决 0-1 二维背包问题

热门文章

  1. 算法题 匈牙利算法 求二分图最大匹配(Python)
  2. 数学建模整理-线性规划、整数规划、非线性规划
  3. Python爬虫:Q房网房源信息
  4. 【AI+IOT】人工智能+物联网:这7家公司如何让机器更“听话”
  5. vue 获取当前元素的父元素_vue获取dom元素内容
  6. Hexo+Fluid搭建自己的个人博客网站!
  7. 推荐四款最易上手的电脑版视频编辑软件
  8. php无限极分类 退出,PHP实现无限极分类图文教程
  9. linux删除指定文件夹中某个文件除外的其他文件
  10. 明天去看世博会,今天找点信息做点功课!(内容转载自百度知道)