Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Friday 30 April 2021

Developer-focused video platform Mux achieves unicorn status with $105M funding

Barely more than eight months after announcing a $37 million funding round, Mux has another $105 million.

The Series D was led by Coatue and values the company at more than $1 billion (Mux isn’t disclosing the specific valuation). Existing investors Accel, Andreessen Horowitz and Cobalt also participated, as did new investor Dragoneer.

Co-founder and CEO Jon Dahl told me that Mux didn’t need to raise more funding. But after last year’s Series C, the company’s leadership kept in touch with Coatue and other investors who’d expressed interest, and they ultimately decided that more money could help fuel faster growth during “this inflection moment in video.”

Building on the thesis popularized by A16Z co-founder Marc Andreessen, Dahl said, “I think video’s eating software, the same way software was eating the world 10 years ago.” In other words, where video was once something we watched at our desks and on our sofas, it’s now everywhere, whether we’re scrolling through our social media feeds or exercising on our Pelotons.

“We’re at the early days of a five- or 10-year major transition, where video is moving into being a first-class part of every software project,” he said.

Dahl argued that Mux is well-suited for this transition because it’s “a video platform for developers,” with an API-centric approach that results in faster publishing and reliable streaming for viewers. Its first product was a monitoring and analytics tool called Mux Data, followed by its streaming video product Mux Video.

“If you’re going to build a video platform and do it data-first, you need heavy data and monitoring and analytics,” Dahl explained. “We built the data layer [and then] we built the streaming platform.”

Customers include Robinhood, PBS, ViacomCBS, Equinox Media, and VSCO — Dahl said that while Mux works with digital media companies, “our core market is software.” He suggested that back when the company was founded in 2015, video was largely seen as a “niche,” or “something you needed if you were ESPN or Netflix.” But the last few years have illustrated that “video is a fundamental part of how we communicate” and that “every software company should have video as a core part of its products.”

Mux founders Adam Brown, Steven Heffernan, Matt McClure and Jon Dahl

Mux founders Adam Brown, Steven Heffernan, Matt McClure and Jon Dahl

Not surprisingly, demand increased dramatically during the pandemic. During the past year, on-demand streaming via the Mux platform growing by 300%, while live video streaming grew 3700% and revenue quadrupled.

“Which is a lot of work,” Dahl said with a laugh. “We definitely spent a lot of the last year ramping and scaling and investing in the platform.”

This new funding will allow Mux (which has now raised a total of $175 million) to continue that investment. Dahl said he plans to grow the team from 80 to 200 employees and to explore potential acquisitions.

“We were impressed by Mux’s laser focus on the developer community, and saw impressive customer retention and expansion indicative of the strong value their solutions provide,” said Coatue General Partner David Schneider in a statement. “This funding will enable Mux to continue to build on their customer-centric platform and we are proud to partner with Mux as it leads the way to this hybrid future.”



from TechCrunch https://ift.tt/3aSd9GK
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support