diff options
Diffstat (limited to 'dist/seattle')
-rw-r--r-- | dist/seattle/index.html | 50 | ||||
-rw-r--r-- | dist/seattle/script.js | 229 | ||||
-rw-r--r-- | dist/seattle/sources.js | 1618 |
3 files changed, 1897 insertions, 0 deletions
diff --git a/dist/seattle/index.html b/dist/seattle/index.html new file mode 100644 index 0000000..50aa0a8 --- /dev/null +++ b/dist/seattle/index.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="description" content="Traffic cameras in Seattle"> + + <title>Seattle traffic cameras</title> + + <link rel="stylesheet" href="/style.css"> + </head> + <body> + <h1>Seattle traffic cams <small>(donate to <a href="https://www.nwcombailfund.org/">bail fund</a>)</small></h1> + + <header id="controls"> + Use checkboxes below to add/remove, drag and drop names to rearrange (if it works), URL stores layout, controls here: + <button type="button" id="playall"> + Play All & Skip to Current + </button> + <label> + Video Width + <input type="range" min="0" max="100" value="30" id="vidwidth"> + </label> + </header> + + <main> + </main> + + <aside> + <label>Search cameras: <input type="search" id="filter"></label> + <nav> + + </nav> + </aside> + + <footer> + <p> + data comes from <a href="https://web6.seattle.gov/Travelers/">Seattle DOT</a>. + developed by <a href="https://www.boringcactus.com">boringcactus</a>, poke hir if something breaks or sucks. + more places at <a href="/">pig.observer</a>. + </p> + </footer> + + <script src="sources.js"></script> + <script src="script.js" defer></script> + <script src="/hls.min.js"></script> + <script src="/dragula.min.js" integrity="sha256-ug4bHfqHFAj2B5MESRxbLd3R3wdVMQzug2KHZqFEmFI=" crossorigin="anonymous"></script> + </body> +</html> diff --git a/dist/seattle/script.js b/dist/seattle/script.js new file mode 100644 index 0000000..63415da --- /dev/null +++ b/dist/seattle/script.js @@ -0,0 +1,229 @@ +/* global Hls, dragula, CAMERAS */ + +const STATE = loadState(); + +let HLSInstances = {}; + +function loadState() { + let hash = document.location.hash; + if (hash.length === 0) { + const DEFAULTS = ["CMR-0039", "CMR-0176", "CMR-0223", "CMR-0088", "CMR-0089", "CMR-0309", "CMR-0257"]; + history.replaceState(null, "", "#" + DEFAULTS.join(",")); + return DEFAULTS; + } + hash = hash.replace(/^#/, ""); + if (hash.length === 0) { + return []; + } + return hash.split(","); +} + +function handleCheckbox(evt) { + if (evt.target.checked) { + if (!STATE.includes(evt.target.dataset.id)) { + appendCamera(evt.target.dataset.id); + } + } else { + if (STATE.includes(evt.target.dataset.id)) { + removeCamera(evt.target.dataset.id); + } + } +} + +function findCamera(id) { + for (let cameras of Object.values(CAMERAS)) { + let found = cameras.find(x => x.id === id); + if (found !== undefined) { + return found; + } + } +} + +function loadData() { + const nav = document.querySelector("nav"); + for (let neighborhood of Object.keys(CAMERAS)) { + const section = document.createElement("section"); + const h2 = document.createElement("h2"); + h2.innerText = neighborhood; + section.append(h2); + + const boxes = document.createElement("ul"); + section.append(boxes); + for (let { id, stream, name } of CAMERAS[neighborhood]) { + const label = document.createElement("label"); + const checkbox = document.createElement("input"); + checkbox.type = "checkbox"; + checkbox.dataset.id = id; + checkbox.addEventListener("input", handleCheckbox); + checkbox.checked = STATE.includes(id); + label.append(checkbox); + const text = document.createTextNode(name); + label.append(text); + + const li = document.createElement("li"); + li.append(label); + boxes.append(li); + } + + nav.append(section); + } + + for (let id of STATE) { + let { stream, name } = findCamera(id); + document.querySelector("main").append(makeCameraStream(id, stream, name)); + } +} + +function makeCameraStream(id, stream, title) { + var section = document.createElement("section"); + section.dataset.id = id; + var header = document.createElement("h2"); + header.innerText = title; + var close = document.createElement("button"); + close.className = 'close'; + close.type = "button"; + close.innerText = "X"; + header.append(close); + close.addEventListener('click', evt => { + removeCamera(evt.target.parentNode.parentNode.dataset.id); + }); + section.append(header); + var video = document.createElement("video"); + video.controls = true; + section.append(video); + if (Hls.isSupported()) { + var hls = new Hls({manifestLoadingTimeOut: 60000}); + hls.loadSource(stream); + hls.attachMedia(video); + hls.on(Hls.Events.MANIFEST_PARSED, function() { + video.play(); + }); + hls.on(Hls.Events.ERROR, function(event, data) { + if (data.fatal) { + switch (data.type) { + case Hls.ErrorTypes.NETWORK_ERROR: + // try to recover network error + if (data.response.code === 404) { + hls.destroy(); + let errorMessage = document.createTextNode("Stream not found (probably doesn't exist after all)"); + video.parentNode.append(errorMessage); + video.remove(); + break; + } + console.log("fatal network error encountered, try to recover"); + console.log(data); + hls.startLoad(); + break; + case Hls.ErrorTypes.MEDIA_ERROR: + console.log("fatal media error encountered, try to recover"); + hls.recoverMediaError(); + break; + default: + // cannot recover + hls.destroy(); + let errorMessage = document.createTextNode( + "Error: " + JSON.stringify([event, data]) + ); + video.parentNode.append(errorMessage); + video.remove(); + break; + } + } + }); + HLSInstances[id] = hls; + } + // hls.js is not supported on platforms that do not have Media Source + // Extensions (MSE) enabled. + // + // When the browser has built-in HLS support (check using `canPlayType`), + // we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video + // element through the `src` property. This is using the built-in support + // of the plain video element, without using hls.js. + // + // Note: it would be more normal to wait on the 'canplay' event below however + // on Safari (where you are most likely to find built-in HLS support) the + // video.src URL must be on the user-driven white-list before a 'canplay' + // event will be emitted; the last video event that can be reliably + // listened-for when the URL is not on the white-list is 'loadedmetadata'. + else if (video.canPlayType("application/vnd.apple.mpegurl")) { + video.src = stream; + video.addEventListener("loadedmetadata", function() { + video.play(); + }); + } + return section; +} + +function appendCamera(id) { + STATE.push(id); + history.replaceState(null, "", "#" + STATE.join(",")); + let { stream, name } = findCamera(id); + document.querySelector("main").append(makeCameraStream(id, stream, name)); +} +function removeCamera(id) { + const oldIndex = STATE.indexOf(id); + if (oldIndex > -1) { + STATE.splice(oldIndex, 1); + } + history.replaceState(null, "", "#" + STATE.join(",")); + for (let video of document.querySelectorAll("main section")) { + if (video.dataset.id === id) { + video.remove(); + } + } + for (let checkbox of document.querySelectorAll('nav input')) { + if (checkbox.dataset.id === id) { + checkbox.checked = false; + } + } + if (HLSInstances[id] !== undefined) { + HLSInstances[id].destroy(); + HLSInstances[id] = undefined; + } +} + +document.getElementById("playall").addEventListener("click", e => { + for (let k of document.querySelectorAll("video")) { + k.play(); + k.currentTime += 10000; + } +}); +document.getElementById("vidwidth").addEventListener("input", e => { + document.body.style.setProperty("--video-width", e.target.value + "vw"); +}); +document.getElementById("filter").addEventListener("input", e => { + let filter = e.target.value; + for (let neighborhood of document.querySelectorAll("nav section")) { + neighborhood.hidden = true; + for (let box of neighborhood.querySelectorAll("li")) { + const matches = box.innerText + .toLowerCase() + .includes(filter.toLowerCase()); + box.hidden = !matches; + neighborhood.hidden = neighborhood.hidden && !matches; + } + } +}); + +loadData(); + +const dragHandler = dragula([document.querySelector("main")], { + moves(el, container, handle) { + return handle.tagName.toLowerCase() === "h2"; + } +}); +dragHandler.on("drop", (el, target, source, sibling) => { + const myID = el.dataset.id; + const neighborID = sibling.dataset.id; + const oldIndex = STATE.indexOf(myID); + if (oldIndex > -1) { + STATE.splice(oldIndex, 1); + } + const newIndex = STATE.indexOf(neighborID); + if (newIndex > -1) { + STATE.splice(newIndex, 0, myID); + } else { + console.log("uhhhhh fuck"); + } + history.replaceState(null, "", "#" + STATE.join(",")); +}); diff --git a/dist/seattle/sources.js b/dist/seattle/sources.js new file mode 100644 index 0000000..a7d77f5 --- /dev/null +++ b/dist/seattle/sources.js @@ -0,0 +1,1618 @@ +const CAMERAS = { + Ballard: [ + { + id: "CMR-0006", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NW_65_EW.stream/playlist.m3u8", + name: "15th Ave NW & NW 65th St EW" + }, + { + id: "CMR-0007", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NW_65_NS.stream/playlist.m3u8", + name: "15th Ave NW & NW 65th St NS" + }, + { + id: "CMR-0008", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NW_85_NS.stream/playlist.m3u8", + name: "15th Ave NW & NW 85th St" + }, + { + id: "CMR-0009", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NW_Leary_EW.stream/playlist.m3u8", + name: "15th Ave NW & NW Leary Way" + }, + { + id: "CMR-0010", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NW_Market_EW.stream/playlist.m3u8", + name: "15th Ave NW & NW Market St EW" + }, + { + id: "CMR-0011", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NW_Market_NS.stream/playlist.m3u8", + name: "15th Ave NW & NW Market St NS" + } + ], + Central: [ + { + id: "CMR-0004", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/14_S_Jackson_EW.stream/playlist.m3u8", + name: "14th Ave S & S Jackson St" + }, + { + id: "CMR-0014", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/16_E_Madison_EW.stream/playlist.m3u8", + name: "16th Ave E & E Madison St" + }, + { + id: "CMR-0242", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_Alder_NS.stream/playlist.m3u8", + name: "23rd Ave & E Alder St" + }, + { + id: "CMR-0023", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_E_Cherry_EW.stream/playlist.m3u8", + name: "23rd Ave E & E Cherry St EW" + }, + { + id: "CMR-0024", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_E_Cherry_NS.stream/playlist.m3u8", + name: "23rd Ave E & E Cherry St NS" + }, + { + id: "CMR-0299", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_S_Dearborn_NS.stream/playlist.m3u8", + name: "23rd Ave S & S Dearborn St" + }, + { + id: "CMR-0027", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_S_Jackson_EW.stream/playlist.m3u8", + name: "23rd Ave S & S Jackson St" + }, + { + id: "CMR-0028", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_S_Jackson_NS.stream/playlist.m3u8", + name: "23rd Ave S & S Jackson St NS" + }, + { + id: "CMR-0300", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_S_Judkins_NS.stream/playlist.m3u8", + name: "23rd Ave S & S Judkins St" + }, + { + id: "CMR-0268", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_E_Cherry_NS.stream/playlist.m3u8", + name: "MLK Jr Way & E Cherry St" + }, + { + id: "CMR-0269", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_E_Yesler_NS.stream/playlist.m3u8", + name: "MLK Jr Way & E Yesler Way" + }, + { + id: "CMR-0270", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Jackson_NS.stream/playlist.m3u8", + name: "MLK Jr Way S & S Jackson St" + } + ], + Delridge: [ + { + id: "CMR-0328", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_SW_Roxbury_NS.stream/playlist.m3u8", + name: "15th Ave SW & SW Roxbury St" + }, + { + id: "CMR-0327", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/16_SW_Roxbury_EW.stream/playlist.m3u8", + name: "16th Ave SW & SW Roxbury St" + }, + { + id: "CMR-0323", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/35_SW_Morgan_NS.stream/playlist.m3u8", + name: "35th Ave SW & SW Morgan St" + } + ], + Downtown: [ + { + id: "CMR-0193", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/12_S_Jackson_EW.stream/playlist.m3u8", + name: "12th Ave S & S Jackson St" + }, + { + id: "CMR-0171", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Broad_NS.stream/playlist.m3u8", + name: "1st Ave & Broad St" + }, + { + id: "CMR-0256", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Madison_NS.stream/playlist.m3u8", + name: "1st Ave & Madison St" + }, + { + id: "CMR-0217", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Seneca_EW.stream/playlist.m3u8", + name: "1st Ave & Seneca St" + }, + { + id: "CMR-0016", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Stewart_NS.stream/playlist.m3u8", + name: "1st Ave & Stewart St" + }, + { + id: "CMR-0178", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Union_NS.stream/playlist.m3u8", + name: "1st Ave & Union St" + }, + { + id: "CMR-0167", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Wall_EW.stream/playlist.m3u8", + name: "1st Ave & Wall St EW" + }, + { + id: "CMR-0168", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Wall_NS.stream/playlist.m3u8", + name: "1st Ave & Wall St NS" + }, + { + id: "CMR-0310", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_Yesler_EW.stream/playlist.m3u8", + name: "1st Ave & Yesler Way" + }, + { + id: "CMR-0189", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_Jackson_EW.stream/playlist.m3u8", + name: "1st Ave S & Jackson St" + }, + { + id: "CMR-0185", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_Battery_NS.stream/playlist.m3u8", + name: "2nd Ave & Battery St" + }, + { + id: "CMR-0264", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_Blanchard_NS.stream/playlist.m3u8", + name: "2nd Ave & Blanchard St" + }, + { + id: "CMR-0265", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_James_EW.stream/playlist.m3u8", + name: "2nd Ave & James St" + }, + { + id: "CMR-0218", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_Marion_NS.stream/playlist.m3u8", + name: "2nd Ave & Marion St" + }, + { + id: "CMR-0302", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_Pike_NS.stream/playlist.m3u8", + name: "2nd Ave & Pike St NS" + }, + { + id: "CMR-0030", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_Stewart_NS.stream/playlist.m3u8", + name: "2nd Ave & Stewart St" + }, + { + id: "CMR-0069", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_University_NS.stream/playlist.m3u8", + name: "2nd Ave & University St" + }, + { + id: "CMR-0320", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/2_Ext_Main_NS.stream/playlist.m3u8", + name: "2nd Ave Ext S & S Main St" + }, + { + id: "CMR-0033", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_Columbia_EW.stream/playlist.m3u8", + name: "3rd Ave & Columbia St" + }, + { + id: "CMR-0191", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_Seneca_EW.stream/playlist.m3u8", + name: "3rd Ave & Seneca St" + }, + { + id: "CMR-0305", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_Spring_EW.stream/playlist.m3u8", + name: "3rd Ave & Spring St" + }, + { + id: "CMR-0034", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_Stewart_NS.stream/playlist.m3u8", + name: "3rd Ave & Stewart st" + }, + { + id: "CMR-0304", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_Union_EW.stream/playlist.m3u8", + name: "3rd Ave & Union St" + }, + { + id: "CMR-0035", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_University_NS.stream/playlist.m3u8", + name: "3rd Ave & University St" + }, + { + id: "CMR-0169", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_Wall_NS.stream/playlist.m3u8", + name: "3rd Ave & Wall St" + }, + { + id: "CMR-0036", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/3_Yesler_NS.stream/playlist.m3u8", + name: "3rd Ave & Yesler Way" + }, + { + id: "CMR-0040", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Battery_EW.stream/playlist.m3u8", + name: "4th Ave & Battery St" + }, + { + id: "CMR-0155", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Cherry_EW.stream/playlist.m3u8", + name: "4th Ave & Cherry St EW" + }, + { + id: "CMR-0156", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Cherry_NS.stream/playlist.m3u8", + name: "4th Ave & Cherry St NS" + }, + { + id: "CMR-0308", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_James_NS.stream/playlist.m3u8", + name: "4th Ave & James St" + }, + { + id: "CMR-0180", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Madison_NS.stream/playlist.m3u8", + name: "4th Ave & Madison St" + }, + { + id: "CMR-0039", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Olive_NS.stream/playlist.m3u8", + name: "4th Ave & Olive St" + }, + { + id: "CMR-0257", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Pine_NS.stream/playlist.m3u8", + name: "4th Ave & Pine St" + }, + { + id: "CMR-0174", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Virginia_EW.stream/playlist.m3u8", + name: "4th Ave & Virginia St" + }, + { + id: "CMR-0043", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_Jackson_NS.stream/playlist.m3u8", + name: "4th Ave S & S Jackson St" + }, + { + id: "CMR-0311", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_Washington_NS.stream/playlist.m3u8", + name: "4th Ave S & S Washington St" + }, + { + id: "CMR-0047", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Battery_East.stream/playlist.m3u8", + name: "5th Ave & Battery St East Side" + }, + { + id: "CMR-0048", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Battery_West.stream/playlist.m3u8", + name: "5th Ave & Battery St West Side" + }, + { + id: "CMR-0049", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_James_EW.stream/playlist.m3u8", + name: "5th Ave & James St" + }, + { + id: "CMR-0181", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Madison_EW.stream/playlist.m3u8", + name: "5th Ave & Madison St EW" + }, + { + id: "CMR-0194", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Marion_EW.stream/playlist.m3u8", + name: "5th Ave & Marion St" + }, + { + id: "CMR-0309", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Pike_NS.stream/playlist.m3u8", + name: "5th Ave & Pike St" + }, + { + id: "CMR-0176", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Pine_EW.stream/playlist.m3u8", + name: "5th Ave & Pine St EW" + }, + { + id: "CMR-0223", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Pine_NS.stream/playlist.m3u8", + name: "5th Ave & Pine St NS" + }, + { + id: "CMR-0291", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Spring_EW.stream/playlist.m3u8", + name: "5th Ave & Spring St" + }, + { + id: "CMR-0255", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Union_EW.stream/playlist.m3u8", + name: "5th Ave & Union St" + }, + { + id: "CMR-0046", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Westlake_NS.stream/playlist.m3u8", + name: "5th Ave & Westlake Ave" + }, + { + id: "CMR-0053", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_S_Dearborn_NS.stream/playlist.m3u8", + name: "5th Ave S & S Dearborn St / Airport Way S" + }, + { + id: "CMR-0258", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_S_Washington_NS.stream/playlist.m3u8", + name: "5th Ave S & S Washington St" + }, + { + id: "CMR-0318", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_Cherry_NS.stream/playlist.m3u8", + name: "6th Ave & Cherry St" + }, + { + id: "CMR-0170", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_Lenora_NS.stream/playlist.m3u8", + name: "6th Ave & Lenora St" + }, + { + id: "CMR-0055", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_Pine_EW.stream/playlist.m3u8", + name: "6th Ave & Pine St" + }, + { + id: "CMR-0188", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_Seneca_NS.stream/playlist.m3u8", + name: "6th Ave & Seneca St" + }, + { + id: "CMR-0321", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_Stewart_EW.stream/playlist.m3u8", + name: "6th Ave & Stewart St" + }, + { + id: "CMR-0056", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_Wall_EW.stream/playlist.m3u8", + name: "6th Ave & Wall St" + }, + { + id: "CMR-0058", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/7_Pike_EW.stream/playlist.m3u8", + name: "7th Ave & Pike St" + }, + { + id: "CMR-0173", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/7_Virginia_EW.stream/playlist.m3u8", + name: "7th Ave & Virginia St" + }, + { + id: "CMR-0059", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/8_Howell_EW.stream/playlist.m3u8", + name: "8th Ave & Howell St" + }, + { + id: "CMR-0172", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/9_Pine_EW.stream/playlist.m3u8", + name: "9th Ave & Pine St" + }, + { + id: "CMR-0175", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/9_Stewart_EW.stream/playlist.m3u8", + name: "9th Ave & Stewart St" + }, + { + id: "CMR-0153", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Alaskan_Madison_NS.stream/playlist.m3u8", + name: "Alaskan Way & Madison St" + }, + { + id: "CMR-0204", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Alaskan_Marion_NS.stream/playlist.m3u8", + name: "Alaskan Way & Marion St" + }, + { + id: "CMR-0164", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Alaskan_Pike_NS.stream/playlist.m3u8", + name: "Alaskan Way & Pike St" + }, + { + id: "CMR-0165", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Alaskan_University_NS.stream/playlist.m3u8", + name: "Alaskan Way & University St" + }, + { + id: "CMR-0261", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Alaskan_Wall_NS.stream/playlist.m3u8", + name: "Alaskan Way & Wall St" + }, + { + id: "CMR-0065", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Alaskan_Yesler_NS.stream/playlist.m3u8", + name: "Alaskan Way & Yesler Way" + }, + { + id: "CMR-0294", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Alaskan_S_Dearborn_NS.stream/playlist.m3u8", + name: "Alaskan Way S & S Dearborn St" + }, + { + id: "CMR-0097", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Stewart_Denny_EW.stream/playlist.m3u8", + name: "Denny Way & Yale St / Stewart St" + }, + { + id: "CMR-0106", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Elliott_Broad_NS.stream/playlist.m3u8", + name: "Elliott Ave & Broad St" + }, + { + id: "CMR-0317", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fairview_Boren_NS.stream/playlist.m3u8", + name: "Fairview Ave & Boren Ave" + }, + { + id: "CMR-0316", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Minor_Howell_EW.stream/playlist.m3u8", + name: "Howell St & Minor Ave" + }, + { + id: "CMR-0136", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Dearborn_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Dearborn St" + }, + { + id: "CMR-0306", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Maynard_S_Jackson_EW.stream/playlist.m3u8", + name: "S Jackson St & Maynard Ave S" + }, + { + id: "CMR-0182", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Western_Broad_NS.stream/playlist.m3u8", + name: "Western Ave & Broad St" + }, + { + id: "CMR-0179", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Western_Spring_NS.stream/playlist.m3u8", + name: "Western Ave & Spring St" + }, + { + id: "CMR-0186", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Western_Wall_NS.stream/playlist.m3u8", + name: "Western Ave & Wall St" + } + ], + East: [ + { + id: "CMR-0002", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/12_S_Boren_NS.stream/playlist.m3u8", + name: "12th Ave S & Boren Ave S" + }, + { + id: "CMR-0025", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_E_Madison_EW.stream/playlist.m3u8", + name: "23rd Ave E & E Madison St EW" + }, + { + id: "CMR-0026", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/23_E_Madison_NS.stream/playlist.m3u8", + name: "23rd Ave E & E Madison St NS" + }, + { + id: "CMR-0319", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/7_James_EW.stream/playlist.m3u8", + name: "7th Ave & James St" + }, + { + id: "CMR-0060", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/9_James_EW.stream/playlist.m3u8", + name: "9th Ave & James St" + }, + { + id: "CMR-0088", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Boren_Madison_EW.stream/playlist.m3u8", + name: "Boren Ave & Madison St" + }, + { + id: "CMR-0312", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Boren_Pike_EW.stream/playlist.m3u8", + name: "Boren Ave & Pike St" + }, + { + id: "CMR-0089", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Boren_Seneca_NS.stream/playlist.m3u8", + name: "Boren Ave & Seneca St" + }, + { + id: "CMR-0313", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Broadway_E_John_NS.stream/playlist.m3u8", + name: "Broadway & E John St" + }, + { + id: "CMR-0090", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Broadway_E_Pike_EW.stream/playlist.m3u8", + name: "Broadway & E Pike St EW" + }, + { + id: "CMR-0091", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Broadway_E_Pike_NS.stream/playlist.m3u8", + name: "Broadway & E Pike St NS" + }, + { + id: "CMR-0092", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Broadway_E_Roy_NS.stream/playlist.m3u8", + name: "Broadway & E Roy St" + }, + { + id: "CMR-0307", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Broadway_E_James_EW.stream/playlist.m3u8", + name: "Broadway & James St" + }, + { + id: "CMR-0105", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Eastlake_E_Harvard_NS.stream/playlist.m3u8", + name: "Harvard Ave E & Eastlake Ave E" + }, + { + id: "CMR-0129", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Montlake_E_LakeWash_NS.stream/playlist.m3u8", + name: "Montlake Blvd NE & NE Lake Washington Blvd" + } + ], + "Greater Duwamish": [ + { + id: "CMR-0001", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/11_SW_Spokane_EW.stream/playlist.m3u8", + name: "11th Ave SW & SW Spokane St" + }, + { + id: "CMR-0003", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/14_S_Cloverdale_NS.stream/playlist.m3u8", + name: "14th Ave S & S Cloverdale St" + }, + { + id: "CMR-0019", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_EMarg_NS.stream/playlist.m3u8", + name: "1st Ave S & E Marginal Way S" + }, + { + id: "CMR-0020", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_Atlantic_NS.stream/playlist.m3u8", + name: "1st Ave S & S Atlantic St" + }, + { + id: "CMR-0021", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_Holgate_NS.stream/playlist.m3u8", + name: "1st Ave S & S Holgate St" + }, + { + id: "CMR-0243", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_Hudson_NS.stream/playlist.m3u8", + name: "1st Ave S & S Hudson St" + }, + { + id: "CMR-0022", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_RoyalB_EW.stream/playlist.m3u8", + name: "1st Ave S & S Royal Brougham Way" + }, + { + id: "CMR-0231", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_Spokane_NS.stream/playlist.m3u8", + name: "1st Ave S & S Spokane St NS" + }, + { + id: "CMR-0159", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_S_Spokane_EW.stream/playlist.m3u8", + name: "1st Ave S & Spokane Viaduct" + }, + { + id: "CMR-0044", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_Michigan_NS.stream/playlist.m3u8", + name: "4th Ave S & Michigan St" + }, + { + id: "CMR-0042", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_Atlantic_EW.stream/playlist.m3u8", + name: "4th Ave S & S Atlantic St" + }, + { + id: "CMR-0262", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_Holgate_NS.stream/playlist.m3u8", + name: "4th Ave S & S Holgate St" + }, + { + id: "CMR-0314", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_RoyalB_EW.stream/playlist.m3u8", + name: "4th Ave S & S Royal Brougham Way" + }, + { + id: "CMR-0232", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_Spokane_NS.stream/playlist.m3u8", + name: "4th Ave S & S Spokane St NS" + }, + { + id: "CMR-0160", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_Spokane_EW.stream/playlist.m3u8", + name: "4th Ave S & Spokane Viaduct" + }, + { + id: "CMR-0045", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_S_I90_NS.stream/playlist.m3u8", + name: "4th Ave S s/o I-90 TD" + }, + { + id: "CMR-0244", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_S_Michigan_EW.stream/playlist.m3u8", + name: "6th Ave S & S Michigan St" + }, + { + id: "CMR-0057", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_S_Spokane_EW.stream/playlist.m3u8", + name: "6th Ave S & S Spokane St" + }, + { + id: "CMR-0064", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Airport_S_Othello_NS.stream/playlist.m3u8", + name: "Airport Way S & King County Airport" + }, + { + id: "CMR-0061", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Airport_S_Industrial_NS.stream/playlist.m3u8", + name: "Airport Way S & S Industrial Way" + }, + { + id: "CMR-0062", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Airport_S_Lander_NS.stream/playlist.m3u8", + name: "Airport Way S & S Lander St" + }, + { + id: "CMR-0063", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Airport_S_Norfolk_NS.stream/playlist.m3u8", + name: "Airport Way S & S Norfolk St" + }, + { + id: "CMR-0158", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/EMarg_S_Atlantic_NS.stream/playlist.m3u8", + name: "Alaskan Way S & S Atlantic St" + }, + { + id: "CMR-0249", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Carleton_S_Bailey_NS.stream/playlist.m3u8", + name: "Carleton Ave S & S Bailey St" + }, + { + id: "CMR-0293", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Colorado_S_RoyalB_S_Portal.stream/playlist.m3u8", + name: "Colorado Ave S & S Royal Brougham Way" + }, + { + id: "CMR-0095", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Corson_S_Bailey_EW.stream/playlist.m3u8", + name: "Corson Ave S & S Bailey St / S Michigan St" + }, + { + id: "CMR-0099", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/EMarg_S_16_NS.stream/playlist.m3u8", + name: "E Marginal Way S & 16th Ave S" + }, + { + id: "CMR-0100", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/EMarg_S_Hanford_NS.stream/playlist.m3u8", + name: "E Marginal Way S & S Hanford St" + }, + { + id: "CMR-0102", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/EMarg_S_Idaho_NS.stream/playlist.m3u8", + name: "E Marginal Way S & S Idaho St" + }, + { + id: "CMR-0103", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/EMarg_S_Michigan_NS.stream/playlist.m3u8", + name: "E Marginal Way S & S Michigan St" + }, + { + id: "CMR-0233", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/EMarg_S_Spokane_EW.stream/playlist.m3u8", + name: "E Marginal Way S & S Spokane St" + }, + { + id: "CMR-0101", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/EMarg_S_Hudson_NS.stream/playlist.m3u8", + name: "E Marginal Way S @ Hudson St" + }, + { + id: "CMR-0271", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Dakota_NS.stream/playlist.m3u8", + name: "MLK Jr Way S & S Dakota St" + }, + { + id: "CMR-0276", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Norfolk_NS.stream/playlist.m3u8", + name: "MLK Jr Way S & S Norfolk St" + }, + { + id: "CMR-0213", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Hill_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Hill St" + }, + { + id: "CMR-0279", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Massachusetts_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Massachusetts St" + }, + { + id: "CMR-0124", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Rainier_EW.stream/playlist.m3u8", + name: "Rainier Ave S at MLK Way S" + }, + { + id: "CMR-0157", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/SR99_Atlantic_NS.stream/playlist.m3u8", + name: "SR-99 & S Atlantic St" + }, + { + id: "CMR-0066", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/SR99_Lander_NS.stream/playlist.m3u8", + name: "SR-99 @ S Lander St" + }, + { + id: "CMR-0142", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/WSB_Midspan_EW.stream/playlist.m3u8", + name: "W Seattle Bridge Mid-Span" + } + ], + "Lake Union": [ + { + id: "CMR-0096", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/4_Denny_EW.stream/playlist.m3u8", + name: "4th Ave N & Denny Way" + }, + { + id: "CMR-0154", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/9_N_Mercer_EW.stream/playlist.m3u8", + name: "9th Ave N & Mercer St" + }, + { + id: "CMR-0266", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/9_N_Thomas_NS.stream/playlist.m3u8", + name: "9th Ave N & Thomas St" + }, + { + id: "CMR-0236", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_Harrison_NS.stream/playlist.m3u8", + name: "Aurora Ave N & Harrison St" + }, + { + id: "CMR-0077", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_46_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N 46th St" + }, + { + id: "CMR-0098", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Dexter_Denny_EW.stream/playlist.m3u8", + name: "Dexter Ave & Denny Way" + }, + { + id: "CMR-0104", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Eastlake_E_Stewart_NS.stream/playlist.m3u8", + name: "Eastlake Ave E & E Stewart St" + }, + { + id: "CMR-0109", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Evanston_N_36_EW.stream/playlist.m3u8", + name: "Evanston Ave N & N 36th St" + }, + { + id: "CMR-0315", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fairview_Denny_NS.stream/playlist.m3u8", + name: "Fairview Ave & Denny Way" + }, + { + id: "CMR-0110", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fairview_Mercer_EW.stream/playlist.m3u8", + name: "Fairview Ave N & N Mercer St" + }, + { + id: "CMR-0259", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fairview_N_Republican_NS.stream/playlist.m3u8", + name: "Fairview Ave N & Republican St" + }, + { + id: "CMR-0111", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fairview_Valley_NS.stream/playlist.m3u8", + name: "Fairview Ave N @ Valley St" + }, + { + id: "CMR-2024", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fremont_N_34_NS.stream/playlist.m3u8", + name: "Fremont Ave N & N 34th St" + }, + { + id: "CMR-0114", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fremont_N_36_NS.stream/playlist.m3u8", + name: "Fremont Ave N & N 36th St" + }, + { + id: "CMR-2023", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Leary_NW_43_EW.stream/playlist.m3u8", + name: "Leary Way NW & NW 43rd St" + }, + { + id: "CMR-0202", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Terry_N_Mercer_EW.stream/playlist.m3u8", + name: "Terry Ave N & Mercer St" + }, + { + id: "CMR-0267", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Westlake_Denny_EW.stream/playlist.m3u8", + name: "Westlake Ave & Denny Way EW" + }, + { + id: "CMR-0260", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Westlake_N_Harrison_NS.stream/playlist.m3u8", + name: "Westlake Ave N & Harrison St" + } + ], + "Magnolia/Queen Anne": [ + { + id: "CMR-0292", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_W_Armory_NS.stream/playlist.m3u8", + name: "15th Ave W & W Armory Way" + }, + { + id: "CMR-0012", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_W_Dravus_NS.stream/playlist.m3u8", + name: "15th Ave W & W Dravus St" + }, + { + id: "CMR-0013", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_W_Emerson_NS.stream/playlist.m3u8", + name: "15th Ave W & W Emerson St" + }, + { + id: "CMR-0017", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_N_Denny_EW.stream/playlist.m3u8", + name: "1st Ave & Denny Way" + }, + { + id: "CMR-0041", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Westlake_N_Dexter_NS.stream/playlist.m3u8", + name: "4th Ave N & Dexter Ave N" + }, + { + id: "CMR-0162", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Mercer_EW.stream/playlist.m3u8", + name: "5th Ave & Mercer St EW" + }, + { + id: "CMR-0051", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Broad_NS.stream/playlist.m3u8", + name: "5th Ave N & Broad St" + }, + { + id: "CMR-0163", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_Mercer_NS.stream/playlist.m3u8", + name: "5th Ave N & Mercer St NS" + }, + { + id: "CMR-0235", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/6_N_SR99_NS.stream/playlist.m3u8", + name: "6th Ave N & SR 99" + }, + { + id: "CMR-0203", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/9_Broad_NS.stream/playlist.m3u8", + name: "9th Ave N & Roy St" + }, + { + id: "CMR-0068", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_Howe_NS.stream/playlist.m3u8", + name: "Aurora Ave N & Howe St" + }, + { + id: "CMR-0081", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_Ward_NS.stream/playlist.m3u8", + name: "Aurora Ave N & Ward St" + }, + { + id: "CMR-0211", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Dexter_N_Mercer_EW.stream/playlist.m3u8", + name: "Dexter Ave N & Mercer St" + }, + { + id: "CMR-0108", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Elliott_W_Mercer_NS.stream/playlist.m3u8", + name: "Elliott Ave W & W Mercer Pl" + }, + { + id: "CMR-0135", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/QAnne_N_Mercer_EW.stream/playlist.m3u8", + name: "Queen Anne Ave N & Mercer St" + }, + { + id: "CMR-0234", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/QAnne_N_Roy_NS.stream/playlist.m3u8", + name: "Queen Anne Ave N & Roy St" + }, + { + id: "CMR-0220", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Taylor_N_Mercer_EW.stream/playlist.m3u8", + name: "Taylor Ave & Mercer St" + }, + { + id: "CMR-0145", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Western_Elliott_NS.stream/playlist.m3u8", + name: "Western Ave & Elliott St" + }, + { + id: "CMR-0146", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Westlake_Broad_NS.stream/playlist.m3u8", + name: "Westlake Ave & Valley St" + } + ], + North: [ + { + id: "CMR-0227", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NE_Northgate_EW.stream/playlist.m3u8", + name: "15th Ave NE & NE Northgate Way" + }, + { + id: "CMR-0018", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/1_NE_Northgate_EW.stream/playlist.m3u8", + name: "1st Ave NE & NE Northgate Way" + }, + { + id: "CMR-0134", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_NE_Northgate_EW.stream/playlist.m3u8", + name: "5th Ave NE & NE Northgate Way EW" + }, + { + id: "CMR-0052", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_NE_Northgate_NS.stream/playlist.m3u8", + name: "5th Ave NE & NE Northgate Way NS" + }, + { + id: "CMR-0226", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/5_NE_Northgate2.stream/playlist.m3u8", + name: "5th Ave NE & Northgate Way 2" + }, + { + id: "CMR-0119", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/LCW_NE_125_NS.stream/playlist.m3u8", + name: "Lake City Way & NE 125th St NS" + }, + { + id: "CMR-0121", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/LCW_NE_137_NS.stream/playlist.m3u8", + name: "Lake City Way & NE 137th St" + }, + { + id: "CMR-0120", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/LCW_NE_125_EW.stream/playlist.m3u8", + name: "Lake City Way NE & NE 125th St EW" + } + ], + Northeast: [ + { + id: "CMR-0225", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/12_NE_50_EW.stream/playlist.m3u8", + name: "12th Ave NE & NE 50th St" + }, + { + id: "CMR-0216", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NE_45_EW.stream/playlist.m3u8", + name: "15th Ave NE & NE 45th St" + }, + { + id: "CMR-0005", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NE_75_NS.stream/playlist.m3u8", + name: "15th Ave NE & NE 75th St" + }, + { + id: "CMR-0118", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NE_80_NS.stream/playlist.m3u8", + name: "15th Ave NE & NE 80th St" + }, + { + id: "CMR-0215", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NE_Campus_NS.stream/playlist.m3u8", + name: "15th Ave NE & NE Campus Pkwy" + }, + { + id: "CMR-0214", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/15_NE_Pacific_NS.stream/playlist.m3u8", + name: "15th Ave NE & NE Pacific St" + }, + { + id: "CMR-0015", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/18_NE_65_EW.stream/playlist.m3u8", + name: "18th Ave NE & NE 65th St" + }, + { + id: "CMR-0029", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/25_NE_66_NS.stream/playlist.m3u8", + name: "25th Ave NE & NE 66th St" + }, + { + id: "CMR-0031", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/32_NE_65_EW.stream/playlist.m3u8", + name: "32nd Ave NE & NE 65th St" + }, + { + id: "CMR-0132", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Montlake_NE_Pacific_EW.stream/playlist.m3u8", + name: "Montlake Blvd E & Pacific St EW" + }, + { + id: "CMR-0130", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Montlake_NE_25_NS.stream/playlist.m3u8", + name: "Montlake Blvd NE & 25th Ave NE" + }, + { + id: "CMR-0131", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Montlake_NE_Pacific_NS.stream/playlist.m3u8", + name: "Montlake Blvd NE @ NE Pacific St" + }, + { + id: "CMR-0133", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/UnionBay_NE_45_EW.stream/playlist.m3u8", + name: "NE 45th St & Union Bay" + } + ], + Northwest: [ + { + id: "CMR-0070", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_103_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N 103rd St" + }, + { + id: "CMR-0071", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_105_EW.stream/playlist.m3u8", + name: "Aurora Ave N & N 105th St EW" + }, + { + id: "CMR-0072", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_117_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N 117th Pl" + }, + { + id: "CMR-0073", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_130_EW.stream/playlist.m3u8", + name: "Aurora Ave N & N 130th St EW" + }, + { + id: "CMR-0074", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_130_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N 130th St NS" + }, + { + id: "CMR-0075", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_145_EW.stream/playlist.m3u8", + name: "Aurora Ave N & N 145th St EW" + }, + { + id: "CMR-0076", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_145_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N 145th St NS" + }, + { + id: "CMR-0078", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_85_EW.stream/playlist.m3u8", + name: "Aurora Ave N & N 85th St EW" + }, + { + id: "CMR-0079", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_87_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N 87th St NS" + }, + { + id: "CMR-0080", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_90_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N 90th St" + }, + { + id: "CMR-0082", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Aurora_N_Winona_NS.stream/playlist.m3u8", + name: "Aurora Ave N & N Winona St" + }, + { + id: "CMR-0115", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Greenlake_N_50_NS.stream/playlist.m3u8", + name: "Greenlake Way N & N 50th St" + }, + { + id: "CMR-0206", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Greenwood_N_105_NS.stream/playlist.m3u8", + name: "Greenwood Ave N & N 105th St" + }, + { + id: "CMR-0245", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Greenwood_N_117_NS.stream/playlist.m3u8", + name: "Greenwood Ave N & N 117th St" + }, + { + id: "CMR-0246", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Greenwood_N_125_EW.stream/playlist.m3u8", + name: "Greenwood Ave N & N 125th St" + }, + { + id: "CMR-0247", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Greenwood_N_130_NS.stream/playlist.m3u8", + name: "Greenwood Ave N & N 130th St" + }, + { + id: "CMR-0116", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Latona_NE_50_EW.stream/playlist.m3u8", + name: "Latona Ave NE & NE 50th St" + }, + { + id: "CMR-0229", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Meridian_N_Northgate_EW.stream/playlist.m3u8", + name: "Meridian Ave N & N Northgate Way" + }, + { + id: "CMR-0228", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Northgate_N_105_EW.stream/playlist.m3u8", + name: "N 105th St & N Northgate Way" + } + ], + Southeast: [ + { + id: "CMR-0274", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Cloverdale_NS.stream/playlist.m3u8", + name: "MLK Jr Way S & S Cloverdale St" + }, + { + id: "CMR-0273", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Graham_NS.stream/playlist.m3u8", + name: "MLK Jr Way S & S Graham St" + }, + { + id: "CMR-0277", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Juniper_NS.stream/playlist.m3u8", + name: "MLK Jr Way S & S Juniper St" + }, + { + id: "CMR-0272", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Orcas_NS.stream/playlist.m3u8", + name: "MLK Jr Way S & S Orcas St" + }, + { + id: "CMR-0127", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Othello_EW.stream/playlist.m3u8", + name: "MLK Way & S Othello St EW" + }, + { + id: "CMR-0125", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Alaska_EW.stream/playlist.m3u8", + name: "MLK Way S & S Alaska St EW" + }, + { + id: "CMR-0126", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Alaska_NS.stream/playlist.m3u8", + name: "MLK Way S & S Alaska St NS" + }, + { + id: "CMR-0128", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Othello_NS.stream/playlist.m3u8", + name: "MLK Way S & S Othello St NS" + }, + { + id: "CMR-0123", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/MLK_S_Rainier_NS.stream/playlist.m3u8", + name: "MLK Way S at Rainier Ave S" + }, + { + id: "CMR-0289", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_51_EW.stream/playlist.m3u8", + name: "Rainier Ave S & 51st Ave S" + }, + { + id: "CMR-0290", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_57_NS.stream/playlist.m3u8", + name: "Rainier Ave S & 57th Ave S" + }, + { + id: "CMR-0284", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Alaska_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Alaska St" + }, + { + id: "CMR-0282", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Charlestown_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Charlestown St" + }, + { + id: "CMR-0283", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Genesee_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Genesee St" + }, + { + id: "CMR-0286", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Graham_EW.stream/playlist.m3u8", + name: "Rainier Ave S & S Graham St" + }, + { + id: "CMR-0137", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Henderson_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Henderson St" + }, + { + id: "CMR-0138", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Hudson_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Hudson St" + }, + { + id: "CMR-0280", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_McClellan_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S McClellan St" + }, + { + id: "CMR-0285", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Orcas_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Orcas St" + }, + { + id: "CMR-0287", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Othello_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Othello St" + }, + { + id: "CMR-0288", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Rose_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Rose St" + }, + { + id: "CMR-0281", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Rainier_S_Walden_NS.stream/playlist.m3u8", + name: "Rainier Ave S & S Walden St" + } + ], + Southwest: [ + { + id: "CMR-0325", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/35_SW_Barton_EW.stream/playlist.m3u8", + name: "35th Ave SW & SW Barton St" + }, + { + id: "CMR-0326", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/35_SW_Holden_NS.stream/playlist.m3u8", + name: "35th Ave SW & SW Holden St" + }, + { + id: "CMR-0324", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/35_SW_Roxbury_EW.stream/playlist.m3u8", + name: "35th Ave SW & SW Roxburty St" + }, + { + id: "CMR-0032", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/35_SW_Fauntleroy_NS.stream/playlist.m3u8", + name: "35th Ave SW @ Fauntleroy Way SW" + }, + { + id: "CMR-0250", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/41_SW_Admiral_EW.stream/playlist.m3u8", + name: "41st Ave SW & SW Admiral Way " + }, + { + id: "CMR-0038", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/42_SW_Alaska_EW.stream/playlist.m3u8", + name: "42nd Ave SW & SW Alaska St" + }, + { + id: "CMR-0251", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/California_SW_Admiral_NS.stream/playlist.m3u8", + name: "California Ave SW & SW Admiral Way" + }, + { + id: "CMR-0093", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/California_SW_Alaska_NS.stream/playlist.m3u8", + name: "California Ave SW & SW Alaska St" + }, + { + id: "CMR-0252", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/California_SW_Hanford_NS.stream/playlist.m3u8", + name: "California Ave SW & SW Hanford St" + }, + { + id: "CMR-0094", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Chelan_SW_WMarg_EW.stream/playlist.m3u8", + name: "Chelan Ave SW & W Marginal Way" + }, + { + id: "CMR-0113", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fauntleroy_SW_Alaska_NS.stream/playlist.m3u8", + name: "Fauntleroy Way SW & SW Alaska St" + }, + { + id: "CMR-0112", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Fauntleroy_SW_Cloverdale_NS.stream/playlist.m3u8", + name: "Fauntleroy Way SW & SW Cloverdale St" + }, + { + id: "CMR-0230", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/Harbor_SW_Spokane_EW.stream/playlist.m3u8", + name: "Harbor Ave SW & S Spokane St" + }, + { + id: "CMR-0144", + stream: + "https://58cc2dce193dd.streamlock.net:443/live/WSea_FwyPullOut_EW.stream/playlist.m3u8", + name: "W Seattle Bridge near SW Charlestown St" + } + ] +}; |