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();

Thursday, 31 January 2019

Hulu announces a new ad unit that appears when you pause

Just to get this out of the way: Yes, Hulu is introducing an ad unit that will show up when you pause a video. But no, it won’t be a video ad.

Hulu says it has 25 million subscribers, the majority of them on an ad-supported plan — so they’re used to seeing TV-style commercial breaks before and during their viewing experience. However, Vice President and Head of Advertising Platforms Jeremy Helfand said the company realizes that having a video ad pop up as soon as you hit pause could be bad for both viewers and advertisers.

For the viewer, “It can be jarring — you think you’ve paused the content, but you’re still seeing sight, sound and motion.” As for the advertiser, they don’t want to create a 30-second ad that the viewer doesn’t see because they left for the kitchen or the bathroom, or because the viewer unpauses the show 10 seconds later.

Conversely, Helfand said that in during user testing, Hulu found that viewers accepted the format “if the ad is subtle and relevant.” So the Hulu Pause Ad is more like a translucent banner ad that appears on the right side of the screen. (“It’s like a car billboard on the side of the road.”) This makes for a better viewing experience, since it’s less distracting than video and you can still see your TV show underneath. And Helfand argued that it’s also better for the brand, because it allows them to get their message across in a quick and simple way.

Also, Pause Ads won’t appear until several seconds after you pause. That’s in case you’ve paused to rewind or otherwise adjust the video (which isn’t really an ideal time to show an ad). So if you start fiddling with the controls, the Pause Ad either won’t appear at all, or it will immediately disappear if it’s already on-screen. Similarly, it should disappear as soon as you hit play again.

Hulu Pause Ad Charmin

When asked if this might give advertisers who are sensitive to where their ads appear something else to worry about — say if their banner shows up next to a risquĂ© sex scene or a gory death scene — Helfand noted that Pause Ads won’t be appearing on episodes that have been rated TV-MA, and that Hulu allows advertisers to target or “anti-target” (explicitly avoid) based on genre, and it sounds like these capabilities will be further refined.

Hulu plans to launch the first Pause Ads in the second quarter of this year, and it’s already announcing two advertisers — Coca-Cola and Charmin. Helfand will appear in select on-demand content in the Hulu library.

The unit will probably continue evolving over time — the exact size and placement could change. Also, Hulu is still figuring out the exact pricing model, but Helfand said it’s envisioned as part of a larger package for advertisers.

And while it’s understandable for viewers to be annoyed when they see ads in new palces, Helfand suggested this is part of a broader push towards “non-disruptive formats,” where ads don’t interrupt your viewing experience. In fact, the goal is to make these new formats account for 50 percent of Hulu’s advertising within the next three years.



from TechCrunch https://tcrn.ch/2TkDNgp
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support