从零开始搭建BubbleUPnPServer

IT, 其他
没有评论

最近一阵收到一只Chromecast v2于是开始研究一些网络推流的工具,这时候我发现手机上使用的BubbleUPnP软件不但可以推流给Chromecast,借助BubbleUPnPServer还可以实现转码推流。

BubbleUPnPServer转码推流的实质是借助FFMPEG对视频流进行预处理。当你有一台性能还不赖的NAS的时候,你就可以使用它转码并且输出兼容性更好的视频流推送给Chromcast。

media-infly-transcode

其作用即Twonkyserver文档中提到的Transcoding Engines。同时,BubbleUPnPServer也是可以配合Twonky使用的。

安装BubbleUPnPServer

安装的宿主系统使用OMV3.0(即Debian8.x系统)

由于BubbleUPnPServer的官方支持软件包列表中暂时没有Debian系统,因此这里采用手动安装。

注:此处使用的,命令都运行在root权限下。

 

Step 1:

安装JAVA

BubbleUPnPServer是一个基于JAVA的跨平台项目,因此所有平台都公用一个BubbleUPnPServer-distrib.zip。它的安装要求是提供oracle JAVA 7或者更高版本。在这里我选择安装JAVA 8。

在Debian中的安装方法如下:


echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt-get update
apt-get install oracle-java8-installer

 

Step 2:

安装FFmpeg

BubbleUPnPServer的转码依赖于FFmpeg。我们首先下载一些FFmpeg的编码解码lib,并且编译一个最新的FFmpeg

1.安装相关lib库


apt-get update && apt-get upgrade -y
apt-get -y install autoconf automake build-essential libass-dev libgpac-dev libssl-dev libtool openssl pkg-config texi2html zlib1g-dev libmp3lame-dev libx264-dev yasm

2.安装FDKaac

FDKaac是一个不错的开源编解码器(但不是自由软件),并且被Android使用。编译步骤如下:


mkdir ~/ffmpeg_sources
cd ~/ffmpeg_sources
wget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/master
unzip fdk-aac.zip
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

3.编译FFmpeg

有了以上编译的几个lib库以后,就可以正式编译FFmpeg了。根据需求我们需要下载源码,更新编译配置。


cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
export PKG_CONFIG_PATH
./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs="-ldl" --enable-gpl \
--enable-libass --enable-openssl --enable-libfdk-aac --enable-libmp3lame --disable-ffserver --disable-ffplay \
--enable-libx264 --enable-nonfree
make
make install

此时我们可以在~/bin目录中找到编译好的ffmpeg、ffprobe

 

Step 3:

部署BubbleUPnPServer

BubbleUPnPServer的部署主要是文件的拷贝并不涉及其他的编译。

cd /usr/local
mkdir BubbleUPnPServer
cd BubbleUPnPServer/
wget http://www.bubblesoftapps.com/bubbleupnpserver/BubbleUPnPServer-distrib.zip
unzip BubbleUPnPServer-distrib.zip && rm BubbleUPnPServer-distrib.zip
chmod 755 launch.sh
cp ~/bin/ffmpeg ffmpeg
cp ~/bin/ffprobe ffprobe

首先做一下启动测试:

./launch.sh

如果正常输出log则部署成功,此时访问https://<SERVERADDR>:58051/就可以看到BubbleUPnPServer的WebUI。

设置自启动:

touch /etc/init.d/BubbleUPnPServer
nano /etc/init.d/BubbleUPnPServer

粘贴以下内容:

#!/bin/bash
### BEGIN INIT INFO
# Provides: BubbleServer
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: BubbleUPnP Server Background Service Management
# Description: Used to ensure BubbleUPnP starts/stops etc
### END INIT INFO

DAEMON_PATH="/usr/local/BubbleUPnPServer"

DAEMON="./launch.sh"
DAEMONOPTS=""

NAME=BubbleUPnPServer
DESC="Runs BubbleUPnPServer"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

case "$1" in
start)
 printf "%-50s" "Starting $NAME..."
 cd $DAEMON_PATH
 PID=`$DAEMON $DAEMONOPTS > /dev/null 2>&1 & echo $!`
 #echo "Saving PID" $PID " to " $PIDFILE
 if [ -z $PID ]; then
 printf "%sn" "Fail"
 else
 echo $PID > $PIDFILE
 printf "%sn" "Ok"
 fi
;;
status)
 printf "%-50s" "Checking $NAME..."
 if [ -f $PIDFILE ]; then
 PID=`cat $PIDFILE`
 if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
 printf "%sn" "Process dead but pidfile exists"
 else
 echo "Running"
 fi
 else
 printf "%sn" "Service not running"
 fi
;;
stop)
 printf "%-50s" "Stopping $NAME"
 PID=`cat $PIDFILE`
 cd $DAEMON_PATH
 if [ -f $PIDFILE ]; then
 kill -HUP $PID
 printf "%sn" "Ok"
 rm -f $PIDFILE
 else
 printf "%sn" "pidfile not found"
 fi
;;

restart)
 $0 stop
 $0 start
;;

*)
 echo "Usage: $0 {status|start|stop|restart}"
 exit 1
esac

保存文档,并更新自启动管理。

chmod 755 /etc/init.d/BubbleUPnPServer
update-rc.d BubbleUPnPServer defaults

 

 

配置BubbleUPnPServer

BubbleUPnPServer的配置项目并不多,但是其Android客户端的功能却着实不少。
对于WebUI方面我这次主要目的是给Chromecast推流做转码,那么暂且跳过一段常规配置(Proxy,access等)

Chromecast的转码播放

在正确安装完BubbleUPnPServer以及ffmpeg/ffprobe之后,一种方案是通过Android BubbleUPnP来推流。通常情况下这里不需要手动输入任何链接设定。当Android BubbleUPnP被检测到以后,从Settings > Chromecast即可设置各项配置。
cc_transcoding
Current transcoding method会显示现在使用的Server的ip地址;

Transconding settings中可以调节各项参数:
是否启用转码
转码速度预设(Ultra fast最快,效果最差,Very slow资源占用最大,效果最好)
最大视频码率(超过这项值视频就会被转码,当回放有卡顿就需要减小这个值,开启转码)
强制转码开关
是否转码多声道音频
是否转码AC-3音频(默认转码)
是否解压出内嵌字幕

根据自己BubbleUPnPServer的性能高低可以设定不同的配置方案。

 

将 Google Cast 设备转换成一个音频 DLNA 或者 OpenHome 渲染器

media_renderers

在MediaRanders页面中可以勾选将Chromecast转换成DLNA音频设备,或者OpenHome设备,但是禁止同时设定为OpenHome以及DLNA设备,防止两套程序互相抢夺控制权。

使用这个功能我们可以在不开启Android BubbleUPnP的时候继续给Chromecast推流。

BubbleUPnP Server可以比较方便的解决一些Chromecast无法完成的解码工作,减轻负担。

 

参考文档:

http://bubblesoftapps.com/bubbleupnpserver/index.html

https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=73464

http://wiki.tuxnet24.de/display/MAIN/BubbleUPnPServer+auf+Debian+Wheezy+installieren

, , , ,
上一篇文章
使用KeyCDN为WordPress加速
下一篇文章
我的数据仓库-Gen8从开箱到使用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Fill out this field
Fill out this field
请输入正确的电子邮件地址。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

菜单