• Stars
    star
    167
  • Rank 226,635 (Top 5 %)
  • Language
    Ruby
  • Created over 11 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

📺 A transcoding server for your HDHomeRun Prime

⚡ Wallop ⚡

⚠️⚠️⚠️

This project has been discontinued. Check out what we made with the knowledge we learned by building Wallop: https://getchannels.com

⚠️⚠️⚠️

Wallop is a transcoding server for your HDHomeRun Prime.

Wallop lets you watch TV streams on your iPhone, iPad, Roku, Web, Android device. Even away from home.

Warning

Wallop is still very new, and because of that, it's unstable.

Not unstable as in crash prone, unstable as in lots will change. Not a lot has been decided on, so things could change any time. Keep an eye on the pull requests in this repo to see what is new and what has changed.

Why?

The HDHomeRun Prime is an amazing CableCard TV tuner. It has 3 tuners, and makes its tuned content available over your local network. It even lets you capture these streams via HTTP with a simple CURL command!

The problem is, TV is generally broadcast in MPEG2 at bitrates hovering around 16-20mbps. This causes 3 problems:

  • These streams are usually too large for WiFi.
  • These streams are definitely too large to stream to your mobile device when away from home.
  • Basically no modern devices decode MPEG2 in hardware, leaving the devices to do it with CPU.

This means, as awesome as this device is, and as accessible as the TV streams are, it's still basically useless. It can't stream to your phone, tablet, or even over your WiFi.

The solution is simple. Take these MPEG2 streams and transcode them to h.264 at a lower bitrate. That's what Wallop does.

How

Using FFMPEG, Wallop tunes the channel you request and consumes the stream from the HDHomeRun. It then transcodes it to a more consumable bitrate and broadcasts it as an HTTP Live Stream.

Voila! Now basically any modern device can stream TV from your HDHomeRun Prime.

Setup

Wallop is written in Ruby and runs fine with the Ruby that ships on OS X 10.8.

Wallop has only been tested running on OS X, though its just Ruby and FFMPEG, so it should run ok elsewhere.

FFMPEG

You should have a modern version of FFMPEG compiled and installed. I'd suggest you just compile a fresh version from the most recent source. Here are good instructions on how get FFMPEG built for OS X. It's not that bad!

$ brew update
$ cp vendor/libaacplus.rb /usr/local/Library/Formula/
$ cp vendor/x264.rb /usr/local/Library/Formula/
$ brew install x264 --HEAD
$ brew install vendor/ffmpeg.rb --with-fdk-aac --with-libaacplus --with-libvo-aacenc --with-schroedinger --with-opencore-amr --disable-stripping

Quickie Set Up

Wallop is a simple Ruby server. All you need to do is clone it down, install its dependencies, and start it up!

Be sure you have bundler installed first. gem install bundler Bundler is a dependency management tool for Ruby.

git clone https://github.com/maddox/wallop.git
cd wallop
script/setup
script/start
open http://127.0.0.1:8888

Starting Server

To start the server after you've already set it up, just run this:

script/start
open http://127.0.0.1:8888

Installing/Uninstalling

You can optionally use launchd in OS X to start Wallop on boot. Not only will this start the server when the computer boots, but it will keep it running in case it crashes.

I'd suggest you make sure Wallop is running normally via script/start before you install it this way.

Install

This will install the script to launch it at boot and keep it alive. If you seem to be having trouble, you can tail the log for the install at ~/Library/Logs/wallop.log.

script/install

Uninstall

This will remove the script from launchd.

script/uninstall

Restart

This will restart the server. If you update the server, you'll want to run this to get the updates running.

script/restart

Updating

If you want to update Wallop, just do a normal git pull on the repo you cloned down. Watch the development via this repo to see if there's anything you want to update for.

After updating the code, run:

script/update

This will fulfill any new dependencies as well as anything else that needs to happen after an update.

Configuring

Wallop is pretty simple, but it does have a couple user configurable settings.

You can edit these settings via the config/config.toml.example file. Once you have updated your setting save the file back to the config directory as config.toml.

hdhomerun_host = "192.168.1.13"
ffmpeg_path = "/usr/local/bin/ffmpeg"
transcoding_path = "./tmp"
port = "8888"
hd_start = 500
hdhomerun_host

The IP address of your HDHomeRun Prime on your network.

ffmpeg_path

The path to your FFMPEG binary.

transcoding_path

The path where Wallop will write the temporary segments when transcoding and streaming the tv streams. This defaults to the tmp directory in Wallops own directory. If you want these files written somewhere else, you can change that here.

port

The port that the server will run on.

hd_start

The start channel of your HD channels. Most providers start all of their HD channels at a certain number. Providing this number will let you browse JUST your HD channels.

Network Logos

Wallop supports the serving of Network Logos if you configure your channels to use them. Within the config.toml file, you can map your channels to images. Just map the channel number to a file name and place those files into /app/public/logos. Wallop will send the logo urls along in its JSON response to services talking to it.

[channel_logos]
506 = "cbs.png"
508 = "abc.png"
511 = "fox.png"
512 = "nbc.png"

you can see that cbs.png corresponds to:

Logs

Logs are written out to the log directory.

Wallop rolls its logs whenever it starts up. So only information for the current process will be found in log/wallop.log. When Wallop starts, it moves the old log to log/wallop.old.log before starting up.

Usage

Wallop is more of a tool than a user facing application. It's designed to be used in coordination with other things like:

  • an iPhone app
  • an XBMC/Plex addon/channel

It has a full API that lets you kick off the transcode, pick your resolution and bitrate, and provides status of the stream. Read the documentation on how to talk to Wallop.

Via Web

Wallop DOES have some web views that you can use to watch a stream though. Just open the server with your browser to see a list of channels. Tap/click a channel to start the stream.

Just point your browser to http://localhost:8888, or whatever host it's on.

Just tap/click a channel, and it will do it's thing and start streaming.

Favorite Channels

You have LOTS of channels. To alleviate this pain, you can set which ones are your favorites. Just tap/click the star and it will be set as a favorite channel.

This should speed up getting to the channels you want.

Browser Support

Basically the only browser that is supported right now is Safari. Sorry, Google hates HLS for some reason.

Chrome won't play the HLS stream natively, and JWPlayer wants $300 per year for their player that will fallback to flash for HLS streams. Even for non-commercial use. 👎

  • 👍 iPhone (Safari)
  • 👍 iPad (Safari)
  • 👍 OS X (Safari)
  • 👎 Chrome
  • ❓ Android

I don't have any Android devices, nor do I have any experience with them. So your milage may vary. I'd love to hear some feedback via issues

Docker Image

To get Wallop up and running quickly you can use the Docker image provided by ipstatic. It contains everything required to run Wallop.

On a machine that has Docker installed, pull the image down:

docker pull ipstatic/wallop

Next copy the sample config.toml file and ensure these directives are set:

ffmpeg_path = "/ffmpeg/bin/ffmpeg"
acodec = "libfdk_aac"
transcoding_path = "/tmp"

Then start the container:

docker run --rm --name wallop -v $(pwd)/config.toml:/wallop/config/config.toml -p 8888:8888 ipstatic/wallop:latest

Contributing

  • Fork the repo
  • Create a topic branch
  • Push your topic branch
  • Submit a pull request for your feature

More Repositories

1

dasher

🔘 A simple way to bridge your Amazon Dash buttons to HTTP services
JavaScript
707
star
2

magic-cards

🎩 Queue music, play movies, or trigger events with RFID cards.
JavaScript
566
star
3

magick-installer

ImageMagick installer script because macports sucks
Shell
486
star
4

actions

A collection of useful GitHub Actions
Dockerfile
393
star
5

harmony-api

🗼 A simple server allowing you to query/control multiple local Harmony Home Hubs over HTTP or MQTT
JavaScript
390
star
6

kart

🎮 Frontend for RetroArch
CoffeeScript
367
star
7

itunes-api

🎵 A simple server providing a RESTful service for controlling iTunes
JavaScript
193
star
8

imdb-party

IMDB client using the IMDB API that their iPhone app uses
Ruby
116
star
9

tvdb_party

Simple Ruby library to talk to thetvdb.com
Ruby
72
star
10

pluto-for-channels

📺 M3U generator optimized for Channels' custom channels.
JavaScript
69
star
11

imdb

Don't use this anymore, use maddox/imdb-party
Ruby
46
star
12

mac-api

Command your Mac from afar
Shell
32
star
13

categories

Community driven repo for awesome Objective-C categories
28
star
14

mgtwitterengine

Git fork of MGTwitterEngine
Objective-C
26
star
15

piano

Because you know you hate Apple's Stats
Ruby
26
star
16

arcade1up-tools

Arcade1Up Modding
20
star
17

freelancer

For your freelancing yo!
JavaScript
19
star
18

channels-strmlnks

Example stream links for Channels
18
star
19

gpi-tools

GPI Case Resources
18
star
20

instagrammer

Get personal RSS feed access to your Instagrams
JavaScript
15
star
21

impawards

Simple library to find high quality posters for movies
Ruby
10
star
22

regexkit

a fork of the objective-c RegexKit regular expression framework
10
star
23

tvdb

Ruby library for the TVDB
Ruby
8
star
24

movieposterdb

a simple ruby client for the MoviePosterDB api
Ruby
7
star
25

cbs_sports

A quickie library to read in sports scores
Ruby
6
star
26

trailers

library for retrieving trailer movies
Ruby
6
star
27

aim_status_helper

Rails plugin that will display a user's AIM status
Ruby
6
star
28

xbmc-library

Ruby library to talk to the XBMC sqlite database
Ruby
5
star
29

broadcatcher

find your favorite shows via nzb
Ruby
5
star
30

magic-cards-docker

Simple repo to get started with Magic Cards & Sonos right away.
Shell
5
star
31

college-humor-plex

Plex plugin for College Humor
Python
4
star
32

star-search

Cache, feed, and search your Campfire stars
Ruby
4
star
33

cocoaheads_gltouches

iPhone GL example app
Objective-C
3
star
34

giant_bomb

A simple Ruby library to talk to GiantBomb
Ruby
3
star
35

xbmc-remote

XBMC iPhone Remote
3
star
36

webcam-resolver

📺 Fetch m3u8 URLs for hosted webcams.
Ruby
3
star
37

bracket_busters

Provides scores for NCAA tournament
JavaScript
3
star
38

wrapper

GIT Mirror of The Worlds Worst Project
2
star
39

app_wiki

a place to store your app stuff
Ruby
2
star
40

broken.com

2
star
41

iphone2itunes

Browse and Watch the videos in your iTunes library from your iPhone.
JavaScript
2
star
42

test

2
star
43

mobile_scores

Finally, a simple freaking way to get your scores via your mobile
JavaScript
2
star
44

mschrag.github.com

mschrag.github.com
2
star
45

SiriProxy-Pugme

A simple SiriProxy plugin that will return a random photo of a pug
Ruby
2
star
46

star-searcher

Simple Ruby Client for Star Search - http://github.com/maddox/star-search
Ruby
2
star
47

slideshower

Simple way to generate the json that will power a future iPhone app that does simple slide shows
Ruby
2
star
48

Aeon-Slim

Slimified Aeon skin adjusted just for Plex
Python
2
star
49

nightscout-s3-proxy

🩸 Simple proxy for Nightscout data to S3
Shell
2
star
50

vlc

C
1
star
51

noodle

JavaScript
1
star
52

npe

npe
1
star
53

lol

JavaScript
1
star
54

rpi-docker-node-sonos-http-api

Docker wrapper for node-sonos-http-api for the Raspberry Pi
1
star
55

twictures

The code behind Twictur.es
Ruby
1
star