从零开始搭建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.listecho "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.listapt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886apt-get updateapt-get install oracle-java8-installer

 

Step 2:

安装FFmpeg

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

1.安装相关lib库

apt-get update && apt-get upgrade -yapt-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_sourcescd ~/ffmpeg_sourceswget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/masterunzip fdk-aac.zipcd mstorsjo-fdk-aac*autoreconf -fiv./configure --prefix="$HOME/ffmpeg_build" --disable-sharedmakemake install

3.编译FFmpeg

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

cd ~/ffmpeg_sourceswget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2tar xjvf ffmpeg-snapshot.tar.bz2cd ffmpegPKG_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-nonfreemakemake install

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

 

Step 3:

部署BubbleUPnPServer

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

cd /usr/localmkdir BubbleUPnPServercd BubbleUPnPServer/wget http://www.bubblesoftapps.com/bubbleupnpserver/BubbleUPnPServer-distrib.zipunzip BubbleUPnPServer-distrib.zip && rm BubbleUPnPServer-distrib.zipchmod 755 launch.shcp ~/bin/ffmpeg ffmpegcp ~/bin/ffprobe ffprobe

首先做一下启动测试:

./launch.sh

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

设置自启动:

touch /etc/init.d/BubbleUPnPServernano /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 INFODAEMON_PATH="/usr/local/BubbleUPnPServer"DAEMON="./launch.sh"DAEMONOPTS=""NAME=BubbleUPnPServerDESC="Runs BubbleUPnPServer"PIDFILE=/var/run/$NAME.pidSCRIPTNAME=/etc/init.d/$NAMEcase "$1" instart) 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 1esac

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

chmod 755 /etc/init.d/BubbleUPnPServerupdate-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来减少垃圾评论。了解我们如何处理您的评论数据