ADBTuner: A "channel tuning" application for networked Google TV / Android TV devices

I'm getting the following link.
https://www.hulu.com/network/vice-bde4af8e-b348-448f-a580-a7ea6e5d4dc4
According to the example posted in the group it should be as follows.
https://www.hulu.com/watch/vice-bde4af8e-b348-448f-a580-a7ea6e5d4dc4

Trying to get the hand of Hulu myself. I get the channel on FRNDLY tvso don't need it but good to know it is here.

In the Hulu link, replace the word "Network", with "Watch"

Now I can no longer watch my Haystack TV app. Is there any way to have this as an optional setting. Worked great before.

1 Like

I've been able to reproduce the stutter now consistently when watching the main stream on my Onn device, and tuning in a second channel on my iPhone. When I tune in the second channel, the first device stutters, and the second channel comes in briefly on the iPhone, before it disappears and I get the "tuner lost" message. I don't know how this works, but it's almost like the tuner thinks the channel hasn't tuned, so takes some action which ends the stream.

My expericence is siimular but for recordings. I had two movies recorded this morning and both have no issue. Later on a New recording started and 30mins in my second recording started. The first recording studders and shows interrupted. The Second recording also shows interrupted.

I think this was a transition from a finished recording and new recording. The recording were on the same network and looks like the 2nd recording started then the first recording stopped. Then the second recording closed connection and started on "tuner 1" instead of staying on the current "tuner 2"
Maybe something below cateches your eye

Part of the log showing the closed/open connection.

2023/07/14 17:31:09.027538 [DVR] Starting job 1689373800-ch5002 Ping Pong Summer (2014) on ch=[5002]
2023/07/14 17:31:09.027650 [DVR] Waiting 1h28m50.972356779s until next job 1689379200-100 On Patrol: First Shift
2023/07/14 17:31:09.027820 [TNR] Closed connection to 107104F1/0 for ch6.1 WBRC
2023/07/14 17:31:09.027845 [TNR] Sharing existing connection to M3U-HDMIEncoder for ch5002 HDNETMV (clients=2, len=29431164)
2023/07/14 17:31:09.046313 [DVR] Recording for job 1689373800-ch5002 from M3U-HDMIEncoder ch5002 into "Movies/Ping Pong Summer (2014) 2023-07-14-1731.mpg" for 1h44m50.972297071s
2023/07/14 17:31:09.050447 [SNR] Statistics for ch6.1 WBRC: ss=100% snq=99%,60%-100% seq=99%,0%-100% bps=6263383,866304-12424544 pps=535,0-1063 sigerr=1%
2023/07/14 17:31:09.050904 [SNR] Buffer statistics for 192.168.1.96 (SHIELD) for ch6.1 WBRC: buf=0% drop=0%
2023/07/14 17:31:09.050961 [HTTP] | 200 | 29m49s | 192.168.1.96 | GET "/devices/107104F1/channels/6.1/stream.mpg?transcode=none&codec=copy"
2023/07/14 17:31:09.084121 [HTTP] | 200 | 29m52s | 192.168.1.96 | GET "/dvr/events/subscribe"
2023/07/14 17:31:22.757798 [HTTP] | 502 | 13.62806624s | 192.168.1.96 | GET "/tmsimg/assets/p22550246_v_v12_aa.jpg?w=480&h=720"
2023/07/14 17:31:22.758090 [HTTP] | 502 | 13.62690807s | 192.168.1.96 | GET "/tmsimg/assets/p20892668_v_v12_aa.jpg?w=480&h=720"
2023/07/14 17:31:22.772799 [NAT] Successfully mapped port 8090 using natpmp
2023/07/14 17:31:23.545465 [HTTP] | 200 | 14.428685515s | 192.168.1.96 | GET "/tmsimg/assets/p10880351_b_h9_ah.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.546132 [HTTP] | 200 | 14.421981042s | 192.168.1.96 | GET "/tmsimg/assets/p8257644_b_h9_ae.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.546617 [HTTP] | 200 | 14.411756836s | 192.168.1.96 | GET "/tmsimg/assets/p185469_b_h9_bn.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.547076 [HTTP] | 200 | 14.414316372s | 192.168.1.96 | GET "/tmsimg/assets/p185469_b_h9_bn.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.547754 [HTTP] | 200 | 14.427346787s | 192.168.1.96 | GET "/tmsimg/assets/p185469_b_h9_bn.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.675938 [HTTP] | 200 | 124.799508ms | 192.168.1.96 | GET "/status"
2023/07/14 17:31:23.696263 [HTTP] | 200 | 14.545989561s | 192.168.1.96 | GET "/status"
2023/07/14 17:31:23.697807 [HTTP] | 200 | 14.645971783s | 192.168.1.96 | GET "/status"
2023/07/14 17:31:23.699791 [HTTP] | 200 | 1.222019ms | 192.168.1.96 | GET "/auth"
2023/07/14 17:31:23.738242 [HTTP] | 200 | 14.634525496s | 192.168.1.96 | GET "/tmsimg/assets/p185880_b_h9_as.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.814875 [HTTP] | 200 | 14.672097839s | 192.168.1.96 | GET "/tmsimg/assets/p24717477_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.815446 [HTTP] | 200 | 14.674665227s | 192.168.1.96 | GET "/tmsimg/assets/p24717477_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.821545 [ERR] Could not start stream for 107104F1 ch6.2 Bounce: HDHomeRun: Tuner Unreachable: Could not tune to http://192.168.1.29:5004/auto/v6.2?transcode=none after 30s
2023/07/14 17:31:23.821625 [HTTP] | 503 | 14.719471249s | 192.168.1.96 | GET "/devices/107104F1/channels/6.2/stream.mpg?transcode=none&codec=copy"
2023/07/14 17:31:23.849606 [HTTP] | 200 | 569.459µs | 192.168.1.96 | GET "/dvr"
2023/07/14 17:31:23.896409 [HTTP] | 200 | 14.796263251s | 192.168.1.96 | GET "/tmsimg/assets/p160676_v_v11_ac.jpg?w=480&h=720"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.897108 [HTTP] | 200 | 14.798392753s | 192.168.1.96 | GET "/tmsimg/assets/p160676_v_v11_ac.jpg?w=480&h=720"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.897584 [HTTP] | 200 | 14.813102035s | 192.168.1.96 | GET "/tmsimg/assets/p12555556_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.899401 [HTTP] | 200 | 14.776861807s | 192.168.1.96 | GET "/tmsimg/assets/p22241315_v_v12_aa.jpg?w=480&h=720"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.901062 [HTTP] | 200 | 14.774901174s | 192.168.1.96 | GET "/tmsimg/assets/p10030424_b_h9_aq.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.901703 [HTTP] | 200 | 14.76500386s | 192.168.1.96 | GET "/tmsimg/assets/p12555556_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.902187 [HTTP] | 200 | 14.757440962s | 192.168.1.96 | GET "/tmsimg/assets/p160676_v_v11_ac.jpg?w=480&h=720"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.902637 [HTTP] | 200 | 14.764117411s | 192.168.1.96 | GET "/tmsimg/assets/p160676_v_v11_ac.jpg?w=480&h=720"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.919548 [HTTP] | 200 | 14.800805683s | 192.168.1.96 | GET "/tmsimg/assets/p10274105_b_h9_ae.jpg?w=720&h=540"
2023/07/14 17:31:23.923101 [HTTP] | 200 | 14.809987946s | 192.168.1.96 | GET "/tmsimg/assets/p7893519_b_h9_ac.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.923623 [HTTP] | 200 | 14.795753601s | 192.168.1.96 | GET "/tmsimg/assets/p20810046_v_v12_aa.jpg?w=480&h=720"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.945845 [HTTP] | 200 | 6.748551ms | 192.168.1.96 | GET "/dvr/groups"
2023/07/14 17:31:23.969555 [HTTP] | 200 | 102.130182ms | 192.168.1.96 | GET "/dvr/files?deleted=true&raw=false"
2023/07/14 17:31:23.971980 [HTTP] | 200 | 14.864608165s | 192.168.1.96 | GET "/tmsimg/assets/p12567318_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.982970 [HTTP] | 200 | 10.485725ms | 192.168.1.96 | GET "/dvr/rules"
2023/07/14 17:31:23.984589 [HTTP] | 200 | 14.878825696s | 192.168.1.96 | GET "/tmsimg/assets/p12567318_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.985152 [HTTP] | 200 | 14.873365603s | 192.168.1.96 | GET "/tmsimg/assets/p279398_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:23.985619 [HTTP] | 200 | 14.875264093s | 192.168.1.96 | GET "/tmsimg/assets/p7893929_b_h9_aa.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:24.020034 [HTTP] | 200 | 14.911163256s | 192.168.1.96 | GET "/tmsimg/assets/p18335752_b_h9_ac.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:24.020803 [HTTP] | 200 | 197.7136ms | 192.168.1.96 | GET "/dvr/jobs"
2023/07/14 17:31:24.038963 [HTTP] | 200 | 1.215176ms | 192.168.1.96 | GET "/dvr/collections/content"
2023/07/14 17:31:24.076663 [HTTP] | 200 | 1.201636ms | 192.168.1.96 | GET "/dvr/collections/channels"
2023/07/14 17:31:24.089394 [HTTP] | 200 | 1.20975ms | 192.168.1.96 | GET "/dvr/guide/on_later/settings"
2023/07/14 17:31:24.278580 [HTTP] | 200 | 428.304094ms | 192.168.1.96 | GET "/dvr/files?raw=false"
2023/07/14 17:31:24.492499 [HTTP] | 200 | 45.80753ms | 192.168.1.96 | GET "/dvr/recordings/upnext"
2023/07/14 17:31:24.609760 [HTTP] | 200 | 623.761281ms | 192.168.1.96 | GET "/dvr/programs"
2023/07/14 17:31:27.792090 [HTTP] | 200 | 18.6774173s | 192.168.1.96 | GET "/tmsimg/assets/p528489_b_h9_ab.jpg?w=720&h=540"
Error #01: net/http: abort Handler
2023/07/14 17:31:27.804013 [HTTP] | 200 | 4.052157646s | 192.168.1.96 | GET "/devices"
2023/07/14 17:31:30.466362 [TNR] Closed connection to M3U-HDMIEncoder for ch5002 HDNETMV
2023/07/14 17:31:32.947236 [HTTP] | 200 | 1.426147ms | 192.168.1.60 | GET "/dvr/files/2242?raw=false"
2023/07/14 17:31:32.951582 [HTTP] | 200 | 1.364443ms | 192.168.1.44 | GET "/dvr/files/2242?raw=false"
2023/07/14 17:31:34.009914 [SNR] Buffer statistics for "Movies/Ripped (2017) 2023-07-14-1546.mpg": buf=11%,0%-100% drop=6%
2023/07/14 17:31:34.010176 [DVR] Finished job 1689367500-ch5002 Ripped (2017)
2023/07/14 17:31:36.150077 [HTTP] | 200 | 1.209404ms | 192.168.1.60 | GET "/dvr/files/2243?raw=false"
2023/07/14 17:31:36.171141 [HTTP] | 200 | 1.197502ms | 192.168.1.44 | GET "/dvr/files/2243?raw=false"
2023/07/14 17:31:44.869985 [DVR] Processing file-2242: Movies/Ripped (2017) 2023-07-14-1546.mpg
2023/07/14 17:31:45.931162 [HTTP] | 200 | 22.111575785s | 192.168.1.96 | POST "/dvr/clients/register"
2023/07/14 17:31:46.314614 [HTTP] | 200 | 366.780333ms | 192.168.1.96 | GET "/devices/ANY/guide?time=1689373903&duration=28800"
2023/07/14 17:31:46.533075 [HTTP] | 200 | 1.216066ms | 192.168.1.96 | GET "/dvr/files/2242?raw=false"
2023/07/14 17:31:46.545535 [DVR] Waiting 1h28m13.45447531s until next job 1689379200-100 On Patrol: First Shift

Can you try using https://haystack.tv as the URL? It loads right into the fullscreen video. Is that what you intended?

{
    "provider_name": "Haystack",
    "number": 1000000,
    "name": "Haystack",
    "url": "https://haystack.tv",
    "package_name": "com.haystack.android",
    "alternate_package_name": "",
    "compatibility_mode": true,
    "tvc_guide_stationid": ""
}

It is actually possible to get what is read as
Dolby 2.0 (ac3) from some versions.

The audio is richer than what they produce by default as aac encoded. I don't know about aac++ if you have that option. Never tested it.

Anyway, if you really just want to hear sound coming from your surround system you can create artificial 5.1 or sorts by upmixing like so if you are on linux:

ffmpeg -I input.mpg -filter_complex "[0:a]pan=5.1(side)|FL=FL|FR=FR|FC=FL+FR|LFE=LFE|SL=FL-FR|SR=FR-FL[a]" -map 0 -map -0:a -map "[a]" -c copy -c:a ac3 output.mkv 

For me, even with those settings for Haystack, it just comes up showing the YoutubeTV home screen.

2 Likes

Hmm.. Are you using a FireTV device? If so, it looks like that version of the app isn't setup for any http:// URLs, but you can use haystacktv:// as the URL. That seems to work.

FireTV:

adb shell dumpsys package com.haystack.android

Activity Resolver Table:
  Schemes:
      fbconnect:
        aeb6576 com.haystack.android/com.facebook.CustomTabActivity filter 511b948
          Action: "android.intent.action.VIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: "fbconnect"
          Authority: "cct.com.haystack.android": -1
      haystacktv:
        e685777 com.haystack.android/.tv.ui.activities.LoadingActivity filter 17a6665
          Action: "android.intent.action.VIEW"
          Category: "android.intent.category.DEFAULT"
          Scheme: "haystacktv"

Chromecast:

adb shell dumpsys package com.haystack.android

Activity Resolver Table:
  Schemes:
      intent:
        e1ac0a3 com.haystack.android/.tv.ui.activities.LoadingActivity filter 927dfa0
          Action: "android.intent.action.VIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: "intent"
          Authority: "com.haystack.android": -1
          AutoVerify=true
      http:
        e1ac0a3 com.haystack.android/.tv.ui.activities.LoadingActivity filter 1dd2759
          Action: "android.intent.action.VIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: "http"
          Scheme: "https"
          Authority: "www.haystack.tv": -1
          Authority: "haystack.tv": -1
          AutoVerify=true
      https:
        e1ac0a3 com.haystack.android/.tv.ui.activities.LoadingActivity filter 1dd2759
          Action: "android.intent.action.VIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: "http"
          Scheme: "https"
          Authority: "www.haystack.tv": -1
          Authority: "haystack.tv": -1
          AutoVerify=true
      fbconnect:
        466ff2a com.haystack.android/com.facebook.CustomTabActivity filter 615a11b
          Action: "android.intent.action.VIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: "fbconnect"
          Authority: "cct.com.haystack.android": -1

Sadly it doesn't. Just shows the YoutubeTV home screen. Onn device.

It works fine with the origional HDMI turner on my PC with using this...

c:\platform-tools\adb -s %ip% shell am start -a android.intent.action.VIEW -n com.haystack.android/.tv.ui.activities.LoadingActivity

I'm happy to just devote the 4th encoder on my URayCoder to the more manual loading of unsupported apps. As long as ADBTuner only knows about the first 3 encoders, and the PC HDMI4C only knows about the 4th there shouldn't be any conflicts. I am going to have to do that with the Weather Channel app anyway to bypass an annoying prompt that comes up when there is a special weather event going on.

Hmm. That's really odd. Is this the newer Onn 4k device? Android 12?

Out of curiosity, can you run the following connected to the Onn device?

adb -s <device ip> shell dumpsys package com.haystack.android

and share the content from the "Activity Resolver Table" section?

This actually works perfectly on my Onn 4k box.

This is from my onn box:

      https:
        63e8c49 com.haystack.android/.tv.ui.activities.LoadingActivity filter c198a6f
          Action: "android.intent.action.VIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: "http"
          Scheme: "https"
          Authority: "www.haystack.tv": -1
          Authority: "haystack.tv": -1
          AutoVerify=true

com.haystack.android/.tv.ui.activities.LoadingActivity is associated with the https://haystack.tv so it should work as it did when specifying com.haystack.android/.tv.ui.activities.LoadingActivity manually.

Overall I'm trying to find a compromise between ease-of-use and flexibility which has me trying to have less form fields instead of more. I do appreciate the interest in expanding beyond the "standard" apps, but at least for now I want to make sure the "standard" apps are working as well as they can first.

Sure... Here it is

Activity Resolver Table:
Schemes:
intent:
a8750a7 com.haystack.android/.tv.ui.activities.LoadingActivity filter e5a6954
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "intent"
Authority: "com.haystack.android": -1
AutoVerify=true
http:
a8750a7 com.haystack.android/.tv.ui.activities.LoadingActivity filter 38ea0fd
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "http"
Scheme: "https"
Authority: "www.haystack.tv": -1
Authority: "haystack.tv": -1
AutoVerify=true
https:
a8750a7 com.haystack.android/.tv.ui.activities.LoadingActivity filter 38ea0fd
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "http"
Scheme: "https"
Authority: "www.haystack.tv": -1
Authority: "haystack.tv": -1
AutoVerify=true
fbconnect:
20b1b3e com.haystack.android/com.facebook.CustomTabActivity filter fbad9f
Action: "android.intent.action.VIEW"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.BROWSABLE"
Scheme: "fbconnect"
Authority: "cct.com.haystack.android": -1

Which HDMI encoder device are you using?

1 Like

Thank you!

Thank you!

I pushed an update this morning that should fix the small stutters when tuning or closing one stream while watching another. Please let me know if you continue to see this issue after updating. Thanks!

1 Like

For those that are running Docker in Ubuntu (possibley other Linux as well), here is how I have updated the images over the last couple times.

sudo docker ps

Make note of the CONTAINER ID for the turtletank99/adbtuner IMAGE.

If you are running as a service on Ubuntu:

sudo systemctl stop ADBTuner.service

run the following:

sudo docker rm <CONTAINER ID>
sudo docker run -d --init -p 5592:5592 --name adbtuner -v adbtuner_config:/app/.config turtletank99/adbtuner

Then make sure it is running:

sudo docker ps

Restart the service (if required):

sudo systemctl start ADBTuner.service

There may be other ways to update the image, but this has worked for me without losing any data.

1 Like

URayCoder 4K 4 Channels H.265 H.264

Thanks for digging into this! I no longer get the stutter, at least in limited testing. But I do get the "tuner lost" message with the second device. In testing, I kept the first encoder/streamer on NBC on an Onn device, and then used my iPhone, selecting a few different channels (one at a time) from the guide (from the second encoder/streamer, I presume). The first time, it worked flawlessly. But then, exiting out to the guide on the second device and selecting a new channel, the next three or so times I did this had the channel come in momentarily before going to the "tuner lost" screen. But the first channel stayed steady and didn't stutter, even after hitting the "Play" button to reload the channel on the second device.

Installed the latest update.

Hulu no longer works.

Or NBC...

is it just me?

1 Like