Install the Local Proxy Server app which is available here. The current version name is "kraker-1c".
CORS Unblocker:
(
Alleycat Player supports playback of HLS/m3u8 and DASH/mpd videos via these two modules (whitelist accordingly):
reference.dashif.org/dash.js/v2.9.3/dist/dash.all.min.js
Release notes for v3d (April 11, 2020):
Youtube fixed the bug with signed videos which was patched in v2f. The extra step 4 is no longer needed.
I am still not getting any feedback on Alleycat Player. Nobody is checking my home page on archive.org to find that I do have a place where you can offer feedback. The address is now available at the top of this page. As I have mentioned before, I only have a minimal Win10 system available to me for testing. No bad-ass video card. No widescreen monitor. Just a really basic system. I have been doing my best to guess how Alleycat Player will perform on other systems but I can only go so far without feedback.
On my list of things-to-do: keyboard video controls and ability to save m3u8 videos as mp4. The former is low priority. I really want to get that second feature working as soon as possible. I know it can be done but I'm not sure how yet. I am not planning to do the same for DASH videos.
It is important to use your browser's zoom feature to fit Alleycat Player to your browser window. This works pretty well (as far as I can tell) but the faux speaker grill on the right-hand side might still be visible because you don't have exact control over the zoom factor. I have added a feature to "snap" the grill out of view when it reaches a certain minimum width. Hope this works as intended.
Release notes for v3c (April 6, 2020):
Previous iteration of v3c was revoked. This is the correct version.
The US Internet TV sources changed again. This fix will hopefully be stable for a while. A remote proxy will no longer work for these channels but a CORS unblocker will (see the v3b release notes regarding Firefox 74.0). At the time of this writing, OAN is down.
Release notes for v3c (April 5, 2020):
The sources for most of the Internet TV channels in the US (ustv247.tv, ustvgo.tv, watchnewslive.tv) have undergone another update after having been down for three days. The Local Proxy Server is required to access these channels due to the need to handle cookies and also a Referer Lock. The actual channel feed (new domain: ustv24h.live) is not restricted in any way.
My previous comments regarding pixel misalignment in the viewers might have struck some people as odd because it is likely that the "half-pixel error" test link did not work for you. Well, it turns out that the error factor varies depending on screen resolution and zoom factor. The test actually works but the correct error factor for your system can be anything from 0.1 to 0.9. At normal zoom and 1024x768 resolution, the error factor of 0.5 works perfectly for me across different browsers but does not work if I change either the zoom or the resolution. Weird. Very weird. I have no solution to this problem. On the bright side, I am no longer seeing any misalignment errors with the video controls. Knock on wood?
Release notes for v3b (March 29, 2020):
At some point, I will have to remove the old release notes. For now, I am leaving them since they contain some valuable information.
Mozilla Firefox 74.0 has broken the CORS bypass extensions. However, this is only true if Alleycat Player is loaded from the local drive. The extensions still work if Alleycat is loaded from "archive.org". This security advisory appears to be the relevant justification (which I don't understand). Perhaps this will happen to Chrome as well or maybe Mozilla will wise up to a better solution. The developer of "CORS Everywhere" has stated that this breakage appears to be unfixable. That is unfortunate since I use that extension for testing Internet TV links.
I should write some words about how the Kraker Local Proxy Server deals with CORS blockage and other accessibility issues. Let's start with this working example of an Internet TV channel blocked by CORS:
The channel will work just fine without Kraker on VLC or SMPlayer or if you use a browser extension for m3u8 playback. The CORS issue appears ONLY if you try to run the channel in Alleycat Player. The browser will load the file alright but it will disallow access by Alleycat because the server has not set the HTTP header "access-control-allow-origin" to "*". Kraker will set the header to "*" so that the browser will allow access. The tilde (~) simply informs Kraker that it should handle the request in "passthrough" mode so that the console does not get clogged with messages. That is, a message is printed to the console only every 30 seconds rather than for every request.
Some channels do not work quite so easily. The segment URLs contained in the m3u8 will work just fine if they are relative URLs, meaning that the domain serving the video segments is the same as the one serving the m3u8. If absolute URLs are used in the m3u8 (whether or not they are in a different domain) then the video player will try to load the segments directly without going through Kraker. For this reason, Kraker has an option to "fix" the m3u8. The option is activated in this manner:
There is more to the double-comma syntax but that is not relevant here. The asterisks delineate a "referer" URL (see the release notes for v2d). Though this particular example is not referer-locked, the default referer string would be "http://video.blivenyc.com/". If a different referer is needed, then the URL would look like this:
There is a shortcut if you want to play a channel without the need to type in the "localhost" part:
Some really weird shit going on with HTML/CSS rendering
You may have noticed this. Some versions of Alleycat Player or Youtube Player don't seem to have the problem but the problem does exist with Alleycat v3a. If you click between the Info Viewer and the News Viewer, the two viewers do not line up. The symptoms can vary. Buttons or text may appear to move up or down a pixel. The entire viewer may move. It is bizarre and has caused me a lot of frustration. I have finally nailed it down. First of all, the CSS for the buttons had to be revised to balance these four attributes: height, line-height, font-size and padding. There was nothing wrong with my CSS. The browsers have some bugs. I think what is happening is that browsers create the page in multiple layers: background, borders and text. The layers may not align exactly due to half-pixel errors so elements may be drawn out of alignment when the layers are combined.
This caused me much grief with the updated video controls. The text was not being drawn precisely between the borders but this error was occurring in only one or two of the viewers and never in all three. So the issue was impossible to resolve by just tweaking the CSS. To make a long story short, the solution involved introducing a half-pixel error in between the Info Viewer and the News Viewer. Don't believe me? Click the link below. The Javascript will revoke the half-pixel error and bring you to the Info Viewer. Switch between the viewers to see the result. In Firefox, the "Raw/Wrapper/Sandbox" text and the background for the "No Video" text will move. In the Chrome-based browsers, the entire viewer will move. Come back here and click the link again to see the problem get fixed.
I am testing this on Windows 10 with Firefox, Waterfox, Google Chrome, Brave and Opera. The fix works for all of them despite the fact that the symptoms are different. I do not have access to Linux or any other platform for testing so your mileage may vary. This is the HTML code containing the half-pixel error:
I have written several paragraphs of text here and it has not affected the viewers. This is beyond my comprehension and it has given me a colossal headache.
Major update today. The new video controls are done. Slick if I do say so myself (and I do). The main feature is the seek function with 6 presets (5s, 15s, 1m, 2m, 5m, 10m) and a freeform input which can accept either h:m:s format or just a plain number of seconds. Fractional values work too. Precede the number with a "+" or a "-" to seek from the current play time. For example, "+0.1" will allow you to seek ahead one tenth of a second for those times when you need to find the perfect spot to take a snapshot (of course, you need to pause the video but I don't really have to point that out, do I?).
You'll also find your viewing experience a bit more pleasant without that spinning icon popping up in the middle of your video every time there is a hiccup in the network feed. Instead, the control bar will show itself to signal the status of the feed after two seconds so you don't need to put up with annoying and constant feedback. After all, you do know that the video is not working without being told. It might help you to know that hitting the 5s seek preset will usually get a stalled video going again.
You can also adjust the brightness and saturation but the implementation is very basic. Use the main controls unless you are in fullscreen mode or in a window. Lastly, you can rotate the video. Watch your vids upside down for a new experience.
Quick tip: The status bar in the middle of the viewer is now clickable (where you see the "No Video" message). It will pop up the current stack if one is active (the "Allow Multiple" option is ignored). The reason why the whole viewer space is not clickable has to do with the nature of an iframe. There is, of course, some sort of solution but I haven't figured it out yet and I am fed up of trying.
Release notes for v2f (March 11, 2020):
The fixes made in v2e are holding up but now Youtube has an issue. More whack-a-mole. Never before have I had to deal with so much breakage in such rapid succession. Something changed with Youtube regarding signed videos. The signature creation algorithm broke, meaning that some videos stopped working. They won't play in embedded mode either and this has broken GenYoutube. For some reason, the same videos will play embedded on Hooktube. Da fuck? Invidious is not affected and I will explain what is happening. There are up to 5 remote-access steps involved in establishing a connection to a signed video. For example:
Step 1:
Step 2:
Step 3:
Step 4:
Step 5:
Step 2 is only needed if step 1 fails. If a video is signed then step 3 is needed to determine the URL from which the signature algorithm may be obtained. This is where it breaks. Currently, Youtube is delivering a URL that looks like this:
The next step is to load the file pointed to by the URL and search through it to collect the bits of the signature creation algorithm which is then executed in a Javascript eval statement. The above URL delivers a signature algorithm alright but it does not work. The Google server rejects the video URL composed with this algorithm. Step 4 is the fix for this issue. The correct signature algorithm is extracted in step 5.
Now, there is a problem with loading the URL shown in step 4. The size is over 400K while the URL in step 3 is less than 20K. That is why step 4 was not part of the original process. Invidious uses step 4, not step 3, and that is why it has not been broken by this Youtube change. In order to avoid unnecessary Internet access, Alleycat saves the results from steps 4 and 5 so you are not likely to see these more than once. Youtube cycles the signature creation algorithm once a day though I have seen it occassionally happen several times in a short period.
Additionally, GenYoutube has now been dropped from the list of Youtube sources and not just because of this recent change. The method for obtaining playable video links from GenYoutube has changed. It can be hacked but I'm not gonna bother. The site has never been a reliable source anyway. Previously, "y2meta.net" changed over to "cnclips.net" and I had that working but the site is now pretty broken so it has been dropped. We are now left with just two Invidious instances as backup sources for Youtube. Oh well.
Release notes for v2e (March 7, 2020):
A bunch of the US channels went down. That's 51 channels though 34 of those have a secondary feed. The sites which supply the "ustv.to" links have undergone yet another rebuild. The links are obfuscated now whereas they were in the clear before. That's fixed. Also, the sites have moved over to CloudFlare from Sucuri for the DDOS protection (bot blocker). That's fixed too. At this point, only "ustvgo.tv" appears to be using the bot blocker but that can change at any time. If a blocker is not in place, the sites are accessible with a remote proxy. Don't expect that to last. You should be using the Local Proxy Server.
VidNode has fixed the problem with the m3u8 feeds. Some of the mp4 links are not working but I haven't done more than a few spot checks.
Some of the Canadian channels have been replaced and they all require the local proxy. I don't have a replacement for TV Ontario but TVO Kids still works.
Release notes for v2d (March 3, 2020):
At this point, I need to talk about what I call the "Referer lock". Yes, the word "referer" is misspelled. It is an historical artifact. Simply put, the Referer is the domain (the URL) from which a page or a component was loaded. Elements of a page loaded from different servers are in different domains. This is only important in the case of iframe or script tags because these are active elements while images and text are passive. There are visibility rules which the browser enforces between elements or components in different domains. For example, a video embedded in one of the Alleycat viewers is invisible to Alleycat while the embedded video is blocked from opening windows (popup ads) outside of its "sandbox".
There are security protocols which govern communication between web browsers and web servers but it really consists of little more than a "gentleman's agreement" on the part of the browser that it will implement certain restrictions at the request of the server. Special HTTP headers are used to control this. While the visibility rules enforced by the browser within itself are difficult to overcome without exploiting security weaknesses, it is trivial to break security outside of the browser. This is accomplished with a proxy server. A proxy server sits between the browser and the destination server for the purpose of disguising one from the other and it can manipulate the messages passing back and forth. There are certain advantages to using a remote proxy over a local proxy and vice versa but those details are not important here.
Getting back to the main point, the HTTP Referer header is not accessible to any script running inside of the browser (though access is possible with an extension or add-on). Thus, Alleycat Player cannot pretend to be from "twitter.com" or any other domain in order to bypass security checks on the server. The Referer lock is actually a pretty powerful check on unauthorized access to server content. Though it is a trivial thing to change an HTTP header, it can only be done with a specialized tool. A video which is Referer-locked won't play on SMPlayer though I think there is a way to do this on VLC. Forget about Windows Media Player or any other player which does not specifically support a user-specified Referer. In some cases, the server will accept its own domain as Referer but video players do not take advantage of this. Without the user being able to control the Referer header, such videos are unplayable.
Up to this time, the only videos that I have found to be Referer-locked are some m3u8 live streams and the videos from VidNode (also m3u8). No mp4 videos have been found like this until XHamster went for it. I don't know if this was deliberate. Perhaps somebody flicked a switch at the server without intending to. Or maybe the management decided that too many people were downloading (you can easily find the mp4 links in the HTML source). In any case, if this sort of thing is gonna keep happening, I figure that it's time to give my users a better understanding of what this proxy thing is all about. This is a war that I'm waging with content providers. Hee hee.
This is a major interface upgrade. In the past, I was (grudgingly) satisfied with the user interface despite the obvious shortcomings. This is and was always a technical endeavour (hacking websites) and not an exercise in web page design. However, I have reached a point where I am pretty pleased with the standing of this project technically so it makes sense to pay closer attention to the user interface.
Two things warranted my attention: compatibility with both standard and wide-screen monitors and the generally inadequate look of the default select boxes, especially in Firefox with its long-standing issue with the double-spacing in dropdown lists. These issues have been fixed for good. The select boxes have been totally replaced using some tricky CSS and some Javascript. The video viewports, which were not zoomable before, will now zoom correctly along with the other interface elements. My original mistake was taking seriously some "expert" design advice. I am not so naive anymore.
For those who might be looking to this project for potential lessons in HTML/CSS and Javascript, I recommend that you study the minimal version of this application (alleycat-player.htm). The current complexity of the code is daunting for beginners. I apologize for the state of the HTML/CSS code but that's not my fault. I'm not the only developer who struggles mightily with this stuff. The specs have grown in complexity over the years and often work against the original intent of the World Wide Web as being primarily text-oriented. In other words, Alleycat Player is pushing the limits. This stuff would actually be better done as a desktop application and not a browser-based one. That said, I can't say that the end result is in any way disappointing (knock on wood).
Found two issues with YouTube. First, the signature creation algorithm was failing on some versions of "base.js". This may just be YouTube developers messing around (it has happened before). The second issue is the DASH player failing on some videos. This was fixed by changing the DASH player version from "3.0.1" to "2.9.3". I had to do the same thing previously for the HLS player (reverting from the latest version to version "0.12.0") because the player was failing on some videos sourced from Akamai. This game of whack-a-mole never ends.
I have noticed the occassional livestream YouTube video which does not work because the expected video information is absent. Instead, the YouTube file contains the URLs for both an mpd and an m3u8 file. This issue is fixable but I won't be addressing it until I see indications that it is more common than it currently appears. If you encounter such a video, it may be viewable via an Invidious instance.
A new video resolution indicator has been added to the viewers. This info comes from the video playback element (the video tag). For HLS/DASH playback, the indicator will update when the player switches the quality level. An important fact here is that the resolution info in the video element is never updated. For that reason, updates must be pulled directly from the HLS/DASH video player. In the case of HLS, the resolution info comes from the actual video stream (though I have noticed that it is sometimes wrong). In the case of DASH, the info comes from the manifest (the mpd file), not from the video stream. For this reason, it may not necessarily reflect the true resolution.
Big update for YouTube. Additional video formats are now available with the DASH player and the Kraker Local Proxy Server (version 1c is required). Now, Kraker is indispensable in this process since there are a number of issues involving not just the usual CORS limitations but also the behaviour of the Google video server. In order to access the video file, DASH needs to employ byte ranges. That would normally be fine BUT when the web browser sends an OPTIONS request to test whether byte ranges are permissible, Google answers NO. Bad Google. Byte ranges work fine but you just don't want to allow it. Alrighty then...Kraker will auto-complete the OPTIONS request and green light it.
The role of the Kraker server goes further than that. It also is responsible for creating the mpd file for the DASH player. It retrieves a blank template from the local disk, merges that with data from Alleycat and then makes the file accessible as a remote resource. The point here is that the video is playable with any video player that supports DASH/mpd playback (like SMPlayer or VLC). The video data is held only in the Kraker memory so it goes away if the proxy is shut down. Also, there is a limit of 16 videos available at one time. Note that VLC displays an incorrect progress bar for live streams while SMPlayer only plays the first few seconds. VOD works fine on both. This has to do with the fact that the DASH specs are a mess and nobody really knows how it is supposed to work. It cost me three days of trial and error to get the native DASH player to work correctly.
For most videos, all of these formats are available: 360/480/720p in both mp4 and webm. The thing here is that the audio and the video are separate files (which is why the DASH player is needed). For mp4, these are the YouTube tag numbers: #140 (audio), #134 (360p), #135 (480p), #136 (720p). For webm: #251 (audio), #243 (360p), #244 (480p); #247 (720p). Higher resolutions may be available for some videos but Alleycat does not access them (at least, not at this point in time). If the DASH formats are not available (rare), Alleycat will revert to the normal formats. Also, the audio and video are both available for download via the DLoad button.
At this point, there is hardly any need for the additional YouTube sources, which are decidedly unreliable at best. Still, they are sometimes useful for bypassing geo-blocks though that doesn't always work. Oh well.
Tips on using Alleycat Player -- these instructions are not meant to be complete. Alleycat Player is primarily designed as a hacking tool. Please experiment to determine the limits and capabilities of the tool.
The original purpose of this tool was to support backdoor access to videos on YouTube for the purpose of downloading or for transferring the URL of a video file to an external viewer for playback. The tool has expanded considerably since the first version and it now supports backdoor access to videos on almost 50 different sites.
There are two ways to play videos embedded in web sites. The first method is to get the ID number of the video if such is available. Enter the ID number in the line below the "Play ID" button and press. The second method is to use the DIG option. In this case, you would copy and paste the URL of a web page in the line beside the "DIG" button and press. For some sites, Alleycat will search the indicated page for the ID number of a video and then apply the ID lookup function. Some sites do not employ video ID numbers so the DIG option is the only way to get the video. Many web sites can be problematic due to small or major differences in page design so this may not always work. Also, sites may sometimes change the page format so that Alleycat can no longer find the video. For this reason, the code is continuously being tested and will be updated accordingly.
A complete URL may be entered as the ID number with the caveat that the ID must be the last part of the URL. If a slash (/) or a dot (.) appears within the last 5 characters (like ".html") then the string will be truncated. A character count is used to separate the ID from the rest of the URL. For YouTube, an ID is always exactly 11 characters. For some sites, there is a small range like from 6 to 8 characters. In the event that a known good ID number is rejected, you can force the ID to be accepted by preceding it with an asterisk (*). This is seldom necessary but might be needed for very old videos.
In many cases, you have the option of choosing the resolution of the video. The format/resolution selection box has an odd appearance due to Alleycat's original purpose of extracting YouTube videos. YouTube, unlike every other video storage site, uses its own special coding system for resolutions and formats (because it has so many). For example, #22 refers to mp4-720p and #43 refers to webm-360p. Note that the webm format is only available on YouTube. The checkbox called "Format" applies to m3u8 playback (not mp4 or mpd). If checked, the video track for the desired resolution will be extracted from the master m3u8. Note that this cannot be done if the master file contains an audio track separate from the video.
The button called DLoad is for m3u8 sites. Both the "No Play" and the "Format" options must be checked. The m3u8 format (similar to m3u used for mp3) consists of multiple segments, each about 10 seconds long. In order to convert to another format like mp4, each of these segments must be downloaded. The DLoad button will open a new window with the list of segments. This has limited functionality. You can change the list format to text by changing the value of the variable called "plain_text" inside the Alleycat Player code. At some point, I'll figure out what more I can do with this.
Viewer modes: Raw / Wrapper / Sandbox
Sandboxing (implemented via the HTML iframe tag) is employed by Alleycat Player to prevent Javascript embeds from opening windows or popups for advertising. Some pirate video download sites are unsafe when used without a good popup blocker. However, if you play the URL inside Alleycat Player, these popups are very effectively blocked. Any URL may be inserted, not just videos. The native viewers are sandboxed by default. However, if you employ a window option to open the URL, you need to indicate that you want the window to be sandboxed. Just check the Sandbox option. If you don't want a sandbox but you want to run a non-video URL then check the Raw option. In the default Wrapper mode, there are three selectable options: Wrapper for playing mp4/ogv/webm videos (or whatever video format your web browser supports), M3U8 for HLS/m3u8 files and DASH for DASH/mpd files.
Web browser compatibility notes
Microsoft Edge has native support for m3u8 and mpd. This does not conflict with Alleycat Player. Videos have a strong tendency to pixelate badly. Google Chrome and Brave also have issues with pixelation but to a much lesser extent. Firefox has no such issue. Opera, Maxthon and Vivaldi were briefly tested. They work but pop-up windows do not size correctly.
If the "Allow Multiple" option is not checked, windows are supposed to get re-used or closed as needed. However, I have found two cases where the web browser incorrectly blocks the window close function in Alleycat Player. Edge does not allow a window opened in Raw mode to be closed. Firefox (on Win10 but not on WinXP) blocks in Raw mode if the window is controlled by an extension (such as for m3u8/mpd playback).
Always keep in mind that browsers contain various "security" features that may interfere with Alleycat Player. Consider that Alleycat is able to extract video links from numerous different sites. Your browser has no idea what is trustworthy and what is not (even though the content is just a video). You may need to battle with the site blockers in the browser itself and in whatever add-ons or extensions you may have. Don't blame Alleycat. Your browser is just trying to "protect" you. Normally, a notice of some sort should appear to warn you about blockage. Sometimes not. If a video does not play, check the settings in your web browser or pop-up blocker. 'Nuff said. It isn't too bad overall.
Addendum: Microsoft Edge is hopelessly broken. Videos play with only sound because Edge does not support the CSS filters used for the brightness control. Also, Edge is not allowing connections to the local host (might be an option somewhere but I can't be bothered to find it). To repair the no-video problem, find and comment out this line of code:
vid.style.filter = "brightness(" + lvl + ") contrast(" + con + ") saturate(" + sat + ")";
Update: CSS filters are now being used for the radio buttons and checkboxes to get rid of the ugly gray background on Chrome-based browsers. This breaks on Edge as well. The offending two lines of code read as follows:
filter: contrast(1.2) brightness(1.4) opacity(85%);
Caveat: My version of Microsoft Edge is out of date since I have Windows 10 updates disabled.
Sites accessible with a Brightcove DIG:
- https://www.stuff.co.nz
- https://www.nzherald.co.nz
- https://www.miamiherald.com
- https://time.com
- https://www.itv.com/goodmorningbritain
- https://www.thesun.co.uk
- https://www.channel4.com/news
- http://webtv.un.org
- https://www.express.co.uk
Sites accessible with a Podcasts DIG:
- https://podcasts.apple.com
- https://itunes.apple.com
- https://www.stitcher.com
- https://radiopublic.com
- https://overcast.fm
- https://www.podbean.com
- https://www.spreaker.com
There are three symbols used to indicate the options available for a particular site. [#] means no DIG option because the video ID is always exposed. [?] means that video ID numbers are not available (you have to DIG). [+] means that both ID numbers and the DIG option are supported.
Here is a rundown of each site, the available video formats and the site URL (link will open a new tab or window):
YouTube | mp4/webm | * | [#] Proxy! | www.youtube.com | |
--- | [#] No Proxy | invidio.us | invidious.snopyta.org | ||
BitChute | mp4 | varies | [#] Proxy | www.bitchute.com | |
Vimeo | mp4 | * | [#] Proxy | vimeo.com | |
InfoWars | m3u8/mp4 | ? | [+] No Proxy | www.infowars.com | summit.news |
LiveLeak | mp4 | * | [#] No Proxy | www.liveleak.com | |
Brighteon | m3u8 | ? | [+] CORS! | www.brighteon.com | www.naturalnews.com |
DailyMotion | m3u8 | * | [#] CORS! | www.dailymotion.com | |
PragerU | mp4 | * | [?] Proxy | www.prageru.com | |
TEDTalks | mp4 | * | [?] Proxy | www.ted.com | |
Nat. Film Board | m3u8 | * | [+] No Proxy | www.nfb.ca | |
m3u8 | varies | [+] KRAK | twitter.com | threadreaderapp.com | |
mp4 | varies | [?] Proxy | www.facebook.com | www.instagram.com | |
Periscope | m3u8 | ? | [#] KRAK | www.pscp.tv | |
SoundCloud | mp3 | [+] Proxy | soundcloud.com | ||
iHeartRadio | mp3 | [#] No Proxy | www.iheart.com/podcast | ||
Fox | mp4/m3u8 | 432p | [+] Proxy (DIG) | www.foxnews.com | www.foxbusiness.com |
ABC | mp4 | 360p | [+] Proxy | abcnews.go.com | |
CBS | m3u8 | * | [?] Proxy | www.cbsnews.com | |
CNBC | mp4 | * | [+] Proxy (DIG) | www.cnbc.com | |
CNN | mp4/m3u8 | * | [?] No Proxy | www.cnn.com | edition.cnn.com |
C-SPAN | m3u8 | * | [?] Proxy | www.c-span.org | |
MS/NBC | mp4 | * | [+] Proxy | www.msnbc.com | www.nbcnews.com |
PBS | m3u8 | * | [+] Proxy | www.pbs.org | |
CBC | mp4 | * | [+] Proxy (DIG) | www.cbc.ca | |
CTV | mpd | ? | [+] Proxy (DIG) | www.ctvnews.ca | |
Global | mp4 | 540p | [+] Proxy | globalnews.ca | |
TVO | mp4 | 360p | [+] Proxy (DIG) | www.tvo.org | |
BBC | mpd | ? | [+] Proxy | www.bbc.com | www.bbc.co.uk/sounds |
Press TV | m3u8 | * | [?] Proxy | www.presstv.com | presstvdoc.com (mp4) |
Al Jazeera | mp4 | * | [+] Proxy (DIG) | www.aljazeera.com | |
Bloomberg | mp4 | * | [+] KRAK | www.bloomberg.com |
? = unknown or auto-select (m3u8/mpd)
* = user selectable (via format box)
! = use the Sandbox option to embed the video.
KRAK = only accessible with the Local Proxy Server (Kraker)
CORS = only accessible with a CORS unblocker (or Kraker)
TubiTV | m3u8 | * | [+] CORS | tubitv.com | |
VidNode | m3u8/mp4 | * | [+] KRAK! | vidcloud9.com ! | vidnode.net ! |
123Movies | mp4 | * | [?] Proxy | w2.d123movies.com ! | 0123moviesback.com ! |
UniqueStream | mp4 | * | [?] KRAK | uniquestream.net | |
PagalMovies | mp4 | ? | [?] Proxy | www.pagalmovies.monster | |
XHamster | mp4/webm | * | [#] KRAK! | xhamster.com | |
ClipWatching | mp4 | ? | [#] Proxy! | clipwatching.com ! | |
CloudVideo | m3u8 | * | [#] CORS! | cloudvideo.tv ! | |
GoUnlimited | mp4 | ? | [#] Proxy! | gounlimited.to ! | |
MixDrop | mp4 | ? | [#] CORS! | mixdrop.co ! | |
StreamVid | m3u8 | ? | [#] KRAK! | streamvid.co ! | |
UpStream | m3u8/mp4 | ? | [#] Proxy! | upstream.to ! | |
VideoBin | mp4 | ? | [#] Proxy! | videobin.co ! | |
VidLox | mp4 | ? | [#] Proxy! | vidlox.me ! | |
Vidoza | mp4 | ? | [#] CORS! | vidoza.net ! | |
XStream | mp4 | * | [#] CORS! | xstreamcdn.com ! | www.fembed.com ! |
AudioRealm | mp3 | [+] Proxy | audiorealm.com |
! on a site url = use caution on these sites due to popup ads
! on Proxy or CORS or KRAK = use the Sandbox option to embed the video.
Note that quality level (example: [720]) may not be the same as resolution.
These sites are supported under XStream:
www.fembed.com
streamhoe.online
myvidis.top
These sites are supported under "General DIG":
www.lunchflix.com (GoUnlimited)
watchmoviesfree.org (XStream)
www.criticbay.com (MixDrop)
Some search sites to get video links from:
ololo.to
crocovid.com
www1.swatchseries.to
www.downloads-anymovies.com
www2.project-free-tv.ag
www.watchepisodes4.com
streamdreams.org
www.primewire.li
If you want to play embedded videos, make sure that you use the proper embed URL.
For example:
Page: https://openload.co/f/{vid-id} | Embed: https://openload.co/embed/{vid-id} |
Page: https://streamango.com/f/{vid-id} | Embed: https://streamango.com/embed/{vid-id} |
Page: https://xstreamcdn.com/f/{vid-id} | Embed: https://xstreamcdn.com/v/{vid-id} |
In order to facilitate channel surfing, a new feature has been added. Check the option "Allow Multiple" to activate. This will present the stack as buttons displayed on top of the viewer. Along with that are 12 buttons for previously selected channels. The "Copy" button will show and hide the popup. Also, pausing the video (not in full-screen) will show the popup. You can click a blank entry to hide. All viewers have this feature.
Some channels have two stream sources. This is indicated with a plus sign (+) after the channel name. A double plus indicates that the streams are from different local stations. Select "webm" in the format panel to access the secondary channel.
http://ustv247.tv http://ustvgo.tv http://watchnewslive.tv http://www.giniko.com http://tvtolive.com https://github.com/exodiver/IPTV https://publicdomainradio.blogspot.com/p/blog-page.html |
https://www.rt.com/on-air https://www.presstv.com https://www.aljazeera.com/live https://www.trtworld.com https://www.france24.com https://www3.nhk.or.jp http://ntv.ca/web-tv |
https://yournewsnet.com https://www.newsmaxtv.com https://freespeech.org https://www.redbull.com http://tbd.com http://tvart.info |
https://www.nasa.gov/nasalive https://www.c-span.org http://www.cpac.ca http://webtv.un.org |
You can input your own URL for either an mp4 or an mp3 or whatever your browser supports. To play a YouTube video in audio-only mode, just enter the 11-character video id.
To find some radio station URLs, you can use the AudioRealm DIG tool supplied with the Movie viewer. Also supplied is a stack with links to iHeartRadio and Virtual DJ. These will pop up a window with an embedded web site.
Format (m3u8) Use Proxy |
No Video |
Format (m3u8) Use Proxy |
No Video |
Format (m3u8) Use Proxy |
No Video |
Talk Radio | Cool Music | Funky Music | Just Garbage | More Garbage |
---|---|---|---|---|
Fox News Talk
Talk Radio UK Conservative Radio Republic Broadcasting American Family Radio Good Talk Radio InfoWars Radio The Blaze Radio Red State Talk The Fringe FM Truth Frequency Radio Dark Matter Digital Devil's Advocates Radio Voice America BBS Talk Radio 1 BBS Talk Radio 2 |
Star FM Rock Classics
Rock Radio Beograd Lynx Classic Rock Jam FM Radio Gem Radio New Wave Retro Hits Dance Wave Salsa Mexico Hot Mix Dance Lounge Radio 1Mix Radio Trance Starlite Radio |
Virtual DJ: ClubZone
Virtual DJ: TheGrind Virtual DJ: Hypnotica Virtual DJ: PowerBase Radio Free Americana Smooth Jazz Expressions Venice Classic Radio Italia Tropicalisma FM Rockabilly Radio Dandelion Radio Entranced FM Spexx FM |
BBC Radio 1
BBC Radio 1-Extra BBC Radio 2 BBC Radio 3 BBC Radio 4 BBC Radio 4-Extra BBC Radio 5-Live BBC Radio 6-Music Nashville FM Country Power Station Hot Mix Hip-hop Wu World Radio |
Radio El Dorado
COOL fahrenheit Asia Dream Radio Streaming Sound Tracks Radio Africa Online Radio Mi Amigo Int'l Nagaswara FM BeMyRadio Schlager iRie Rockers Tune Disney Radio SRC FM Rahva Radio |
"; var win = document.getElementById ("mov" + frame); var doc = win.contentDocument; doc.open(); doc.write (s); doc.close(); p = doc.getElementsByTagName ("form")[0]; q = p.getElementsByTagName ("input"); for (n = 0; n < q.length; n++) form += "&" + q[n].name + "=" + encodeURIComponent (q[n].value); form = src + p.action.substr (7) + "<>" + form.substr (1); } catch (err) { console.log (err); form = ""; } return (form); } //////////////////// ////////////////////////// ///// INTERNET RADIO ///// ////////////////////////// var radio = function (url) { document.getElementById ("ir_url").value = url; ir_action (0); if (url) ir_action (2); } //////////////////// var ir_action = function (mode) { var win = document.getElementById ("internet_radio"); var pop = document.getElementById ("ir_popup"); var sts = document.getElementById ("ir_status"); var vol = document.getElementById ("ir_volume"); var url = document.getElementById ("ir_url").value; var src_ok = (win.src && win.src != "file:///"); var volume = vol.value * 1; if (mode == 3) { sts = pop.checked; pop.checked = !sts; pop.className = (sts ? "is_off" : "is_on"); return; } if (mode == 2 && url.length == 11 && url.search (":") < 0) { var src = document.getElementById ("ctr7z").value; if (src > 9) src = 0; url = invidious_site [src] + "/latest_version?local=true&itag=251&id=" + url; document.getElementById ("ir_url").value = url; } if (mode == 2 && pop.checked && url) { loadwindow (url, -volume, "Internet Radio"); return; } if (mode == 2 && !src_ok) if (url) { if (last_time > get_time() - 2) mode = 0; else win.src = url; last_time = the_time; } else { url = document.getElementsByName ("ir"); for (var i = 0; i < url.length; i++) if (url[i].checked) url[i].onclick(); return; } if (mode == 0 || (mode == -2 && src_ok)) { sts.value = (mode ? "ERROR" : "Stopped"); win.pause(); win.src = "file:///"; } if (mode == 2 || (mode == -1 && src_ok)) { sts.value = "Playing"; win.play(); } if (mode == 1 && src_ok) { sts.value = "Paused"; win.pause(); } if (mode == 4 && volume > 0) volume -= volume > 40 ? 10 : 5; if (mode == 5 && volume < 100) volume += volume < 40 ? 5 : 10; win.muted = true; win.volume = volume / 100; win.muted = false; vol.value = volume; } //////////////////// var popper = function (frame, mode) { var i, j, k, val = txt = ""; var win = document.getElementById ("pop" + frame); var index = win.style.zIndex; if (!index) index = -1; var multi = document.getElementById ("mov" + frame + "m").checked; if (busy) return; if (mode.length != undefined) { txt = mode.substr (mode.search ("<>") + 2); val = mode.substr (0, mode.search ("<>")); txt = txt.substr (txt.search (" ") + 1); if (val == "") mode = multi = 1; } if (mode && mode.length == undefined) { if (mode == 1) win.style.zIndex = -index; if (mode == 2) win.style.zIndex = multi ? -index : index; if (mode == 3) win.style.zIndex = -1; if (mode == 4) win.style.zIndex = multi ? 1 : -1; return; } var box = document.getElementById ("stk" + frame).children; var doc = win.getElementsByTagName ("table"); if (doc.length < 2 || !(doc = doc [1])) doc = null; if (doc) doc = doc.getElementsByTagName ("button"); if (!doc || doc.length < 2) doc = null; if (mode) { if (doc) { for (i = 0; i < doc.length - 1; i++) if (txt == doc[i].innerText) break; for (; i > 0; i--) { doc[i].value = doc[i-1].value; doc[i].innerText = doc[i-1].innerText; } doc[0].value = mode; doc[0].innerText = txt; } error = val; if (frame == 5) loadid (frame, 2); if (frame == 6) loadnews (frame, 2); if (frame == 7) loadmovie (frame, 2); return; } var start = '