maddox / wallop

📺 A transcoding server for your HDHomeRun Prime
167 stars 41 forks source link

Docker Container - Internal Server Error #60

Closed n0012 closed 7 years ago

n0012 commented 7 years ago

I receive an Internal Server Error after firing up wallop via docker. See below, and let me know if I provide any additional details.

config.toml ffmpeg_path = "/ffmpeg/bin/ffmpeg" acodec = "libfdk_aac" transcoding_path = "/tmp" hdhomerun_host = "10.0.0.106" port = "8888"

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

hdhr firmware 20160902beta3

hdhr channel lineup http://10.0.0.106/lineup.json returns json

Docker Terminal Output after accessing http://localhost:8888 and receiving Internal Server Error == Sinatra (v1.4.7) has taken the stage on 8888 for production with backup from Thin 172.17.0.1 - - [18/Sep/2016:08:56:33 +0000] "GET / HTTP/1.1" 302 - 0.0026 2016-09-18 08:56:33 - NoMethodError - undefined method []' for nil:NilClass: /wallop/lib/wallop.rb:128:inblock in lineup' /wallop/lib/wallop.rb:126:in each' /wallop/lib/wallop.rb:126:inlineup' /wallop/lib/wallop.rb:143:in favorite_lineup' app/app.rb:45:inblock in class:App' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:inblock in compile!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:in block (3 levels) in route!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:994:inroute_eval' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:in block (2 levels) in route!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1015:inblock in process_route' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:in catch' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:inprocess_route' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:973:in block in route!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:ineach' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:in route!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1085:inblock in dispatch!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in block in invoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:incatch' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in invoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1082:indispatch!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:in block in call!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:inblock in invoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in catch' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:ininvoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:in call!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:895:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:219:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/logger.rb:15:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:incall' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:219:in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:212:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/head.rb:13:in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:182:incall' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:2013:in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:inblock in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1787:in synchronize' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:incall' /wallop/vendor/gems/ruby/2.3.0/gems/thin-1.6.4/lib/thin/connection.rb:86:in block in pre_process' /wallop/vendor/gems/ruby/2.3.0/gems/thin-1.6.4/lib/thin/connection.rb:84:incatch' /wallop/vendor/gems/ruby/2.3.0/gems/thin-1.6.4/lib/thin/connection.rb:84:in pre_process' /wallop/vendor/gems/ruby/2.3.0/gems/eventmachine-1.2.0.1/lib/eventmachine.rb:1076:incall' /wallop/vendor/gems/ruby/2.3.0/gems/eventmachine-1.2.0.1/lib/eventmachine.rb:1076:in block in spawn_threadpool' 172.17.0.1 - - [18/Sep/2016:08:56:33 +0000] "GET /channels?type=favorites HTTP/1.1" 500 30 0.0196 172.17.0.1 - - [18/Sep/2016:08:56:33 +0000] "GET / HTTP/1.1" 302 - 0.0015 2016-09-18 08:56:33 - NoMethodError - undefined method[]' for nil:NilClass: /wallop/lib/wallop.rb:128:in block in lineup' /wallop/lib/wallop.rb:126:ineach' /wallop/lib/wallop.rb:126:in lineup' /wallop/lib/wallop.rb:143:infavorite_lineup' app/app.rb:45:in block in <class:App>' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:incall' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:in block in compile!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:inblock (3 levels) in route!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:994:in route_eval' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:inblock (2 levels) in route!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1015:in block in process_route' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:incatch' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:in process_route' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:973:inblock in route!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:in each' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:inroute!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1085:in block in dispatch!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:inblock in invoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in catch' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:ininvoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1082:in dispatch!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:inblock in call!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in block in invoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:incatch' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in invoke' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:incall!' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:895:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:incall' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:219:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/logger.rb:15:incall' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:219:incall' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:212:in call' /wallop/vendor/gems/ruby/2.3.0/gems/rack-1.6.4/lib/rack/head.rb:13:incall' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:182:in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:2013:incall' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in block in call' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1787:insynchronize' /wallop/vendor/gems/ruby/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in call' /wallop/vendor/gems/ruby/2.3.0/gems/thin-1.6.4/lib/thin/connection.rb:86:inblock in pre_process' /wallop/vendor/gems/ruby/2.3.0/gems/thin-1.6.4/lib/thin/connection.rb:84:in catch' /wallop/vendor/gems/ruby/2.3.0/gems/thin-1.6.4/lib/thin/connection.rb:84:inpre_process' /wallop/vendor/gems/ruby/2.3.0/gems/eventmachine-1.2.0.1/lib/eventmachine.rb:1076:in call' /wallop/vendor/gems/ruby/2.3.0/gems/eventmachine-1.2.0.1/lib/eventmachine.rb:1076:inblock in spawn_threadpool' 172.17.0.1 - - [18/Sep/2016:08:56:33 +0000] "GET /channels?type=favorites HTTP/1.1" 500 30 0.0016

n0012 commented 7 years ago

From the terminal within the docker container, I can ping the hdhomerun_host.

n0012 commented 7 years ago

Any thoughts? Maddox, you think this issue resides on the Docker side or wallop?

n0012 commented 7 years ago

Side note - I've tried using HDHRViewerV2, without a lot of luck on the transcoding side. Would be great if wallop could integrate with PLEX as a Channel like HDHRViewer does, and actually render well over mobile connections. http://hdhrviewer.zynine.net/hdhrviewerv2-initial-setup/

maddox commented 7 years ago

This is where it's erring: https://github.com/maddox/wallop/blob/master/lib/wallop.rb#L128

Do you have a section in your config defining channel logos? It should look like this:

[channel_logos]
506 = "cbs.png"
508 = "abc.png"
511 = "fox.png"
512 = "nbc.png"
maddox commented 7 years ago

Side note - I've tried using HDHRViewerV2, without a lot of luck on the transcoding side. Would be great if wallop could integrate with PLEX as a Channel like HDHRViewer does, and actually render well over mobile connections.

Why not just use that plugin instead of Wallop?

n0012 commented 7 years ago

Why not just use that plugin instead of Wallop?

I haven't found it to work that well. Lots of buffering etc. Hoping wallop will work better.

maddox commented 7 years ago

Well, the whole point of using Plex channels is to pipe it through their transcoder. So I suspect it'd have the same results. You wouldn't actually use Wallop, you'd just use Plex's internal transcoder.

n0012 commented 7 years ago

Well, the whole point of using Plex channels is to pipe it through their transcoder. So I suspect it'd have the same results. You wouldn't actually use Wallop, you'd just use Plex's internal transcoder.

Gotcha. I'll let you know my feedback after I can compare experiences between the Plex Channel and Wallop.

n0012 commented 7 years ago

Got it resolved. My working config for a docker container running on OSX is as follows. So far working much better than HDHRViewerV2 - the ffmpeg transcoder must handle real time mpg2 to mpg4 better than Plex's built in transcoder....

I also like the options you offer up in the settings menu to throttle the stream quality when needed.

hdhomerun_host = "10.0.0.50" hdhr_transcode = false ffmpeg_path = "/ffmpeg/bin/ffmpeg" transcoding_path = "/tmp" port = "8888" hd_start = 1

[ffmpeg] threads = 4 acodec = "libfdk_aac" framerate = "29.97" h264_preset = "superfast" hls_time = 2 hls_wrap = 40 options = "-loglevel warning -async 1 -tune zerolatency -flags -global_header -fflags +genpts -map 0:0 -map 0:1"

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

maddox commented 7 years ago

Great!