久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

HTML5 音頻顯示“直播"在 iOS 中,當它是靜態文

HTML5 audio says quot;live broadcastquot; in iOS when it#39;s a static file(HTML5 音頻顯示“直播在 iOS 中,當它是靜態文件時)
本文介紹了HTML5 音頻顯示“直播"在 iOS 中,當它是靜態文件時的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

對于 Windows Chrome(可能還有許多其他瀏覽器),此代碼適用于在 audio 元素中提供 mp3:

For Windows Chrome (and probably many other browsers), this code works for serving an mp3 in an audio element:

/**
 * 
 * @param string $filename
 * @return IlluminateHttpResponse|IlluminateContractsRoutingResponseFactory
 */
public function getMp3($filename) {
    $fileContents = Storage::disk(AppHelpersCoachingCallsHelper::DISK)->get($filename);
    $fileSize = Storage::disk(AppHelpersCoachingCallsHelper::DISK)->size($filename);
    $shortlen = $fileSize - 1;
    $headers = [
        'Accept-Ranges' => 'bytes',
        'Content-Range' => 'bytes 0-' . $shortlen . '/' . $fileSize,
        'Content-Type' => "audio/mpeg"
    ];
    Log::debug('$headers=' . json_encode($headers));
    $response = response($fileContents, 200, $headers);
    return $response;
}

但是當我用iPhone瀏覽同一頁面時,mp3文件沒有顯示總時長,播放時顯示直播".

But when I use an iPhone to browse to the same page, the mp3 file does not show the total duration, and when I play it, it says "Live broadcast".

我試圖遵循這個問題的各種答案的建議 (HTML5<audio> Safari live broadcast vs not) 和我讀過的其他文章,但似乎都沒有效果.

I've tried to follow suggestions from various answers of this question (HTML5 <audio> Safari live broadcast vs not) and other articles I've read, but none seem to have an effect.

無論我如何更改標題,mp3 似乎在 Windows 上都能正常運行,而在 iOS 上不能運行.

No matter how I change the headers, the mp3 seems to function as desired on Windows and does not work on iOS.

如何調試我做錯的地方?

How can I debug what I'm doing wrong?

這是 HTML:

<audio controls preload="auto">
    <source src="{{$coachingCall->getMp3Url()}}" type="audio/mpeg"/>
    <p>Your browser doesnt support embedded HTML5 audio. Here is a <a href="{{$coachingCall->getMp3Url()}}">link to the audio</a> instead.</p>
</audio>

推薦答案

哇,這是一個很難解決的問題.(我花了幾天時間.)

Whoa, that was a very difficult problem to solve. (It took me days.)

而且我了解到不僅僅是 iOS 出現問題:Mac 上的 Safari 也無法正常工作.

And I learned that it wasn't just iOS that was having problems: Safari on Mac hadn't been working either.

現在我認為一切都適用于我測試過的每個瀏覽器.

Now I think everything works on every browser I've tested.

我真的很高興我找到了這個例子來效仿.

I'm really glad I found this example to follow.

這是我的答案:

/**
 * 
 * @param string $disk
 * @param string $filename
 * @return IlluminateHttpResponse|IlluminateContractsRoutingResponseFactory|SymfonyComponentHttpFoundationStreamedResponse
 */
public static function getMediaFile($disk, $filename) {
    $rangeHeader = request()->header('Range');
    $fileContents = Storage::disk($disk)->get($filename);
    $fullFilePath = Storage::disk($disk)->path($filename); //https://stackoverflow.com/a/49532280/470749
    $headers = ['Content-Type' => Storage::disk($disk)->mimeType($fullFilePath)];
    if ($rangeHeader) {
        return self::getResponseStream($disk, $fullFilePath, $fileContents, $rangeHeader, $headers);
    } else {
        $httpStatusCode = 200;
        return response($fileContents, $httpStatusCode, $headers);
    }
}

/**
 * 
 * @param string $disk
 * @param string $fullFilePath
 * @param string $fileContents
 * @param string $rangeRequestHeader
 * @param array  $responseHeaders
 * @return SymfonyComponentHttpFoundationStreamedResponse
 */
public static function getResponseStream($disk, $fullFilePath, $fileContents, $rangeRequestHeader, $responseHeaders) {
    $stream = Storage::disk($disk)->readStream($fullFilePath);
    $fileSize = strlen($fileContents);
    $fileSizeMinusOneByte = $fileSize - 1; //because it is 0-indexed. https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16
    list($param, $rangeHeader) = explode('=', $rangeRequestHeader);
    if (strtolower(trim($param)) !== 'bytes') {
        abort(400, "Invalid byte range request"); //Note, this is not how https://stackoverflow.com/a/29997555/470749 did it
    }
    list($from, $to) = explode('-', $rangeHeader);
    if ($from === '') {
        $end = $fileSizeMinusOneByte;
        $start = $end - intval($from);
    } elseif ($to === '') {
        $start = intval($from);
        $end = $fileSizeMinusOneByte;
    } else {
        $start = intval($from);
        $end = intval($to);
    }
    $length = $end - $start + 1;
    $httpStatusCode = 206;
    $responseHeaders['Content-Range'] = sprintf('bytes %d-%d/%d', $start, $end, $fileSize);
    $responseStream = response()->stream(function() use ($stream, $start, $length) {
        fseek($stream, $start, SEEK_SET);
        echo fread($stream, $length);
        fclose($stream);
    }, $httpStatusCode, $responseHeaders);
    return $responseStream;
}

這篇關于HTML5 音頻顯示“直播"在 iOS 中,當它是靜態文件時的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Joining 2 tables in SELECT(MYSQL/PHP)(在 SELECT(MYSQL/PHP) 中加入 2 個表)
How to make lt;option selected=quot;selectedquot;gt; set by MySQL and PHP?(如何使lt;option selected=“selectedgt;由 MySQL 和 PHP 設置?)
Auto populate a select box using an array in PHP(使用 PHP 中的數組自動填充選擇框)
PHP SQL SELECT where like search item with multiple words(PHP SQL SELECT where like search item with multiple words)
json_encode produce JSON_ERROR_UTF8 from MSSQL-SELECT(json_encode 從 MSSQL-SELECT 產生 JSON_ERROR_UTF8)
MySQL ORDER BY rand(), name ASC(MySQL ORDER BY rand(),名稱 ASC)
主站蜘蛛池模板: 亚洲精品4 | 亚洲婷婷六月天 | 欧美激情视频一区二区三区在线播放 | 久久伊人精品 | 91看片网址| 亚洲美女视频 | 青青草视频网站 | 中文字幕99| 天天操天天摸天天干 | 中文字幕亚洲区一区二 | 国产欧美一区二区三区国产幕精品 | 国产福利一区二区 | 久久精品 | 成人免费精品视频 | 精品久久久久久久久久久久 | 国产伊人久久久 | 久久一区二区视频 | 性精品 | 精品9999| 亚洲视频免费在线看 | 欧美一区二区三区视频 | 国产人成精品一区二区三 | 一区二区在线观看av | 亚洲精品区 | 中日韩av | 欧美亚洲另类丝袜综合网动图 | 日韩一区在线播放 | 日韩在线一区二区三区 | 久久久久亚洲av毛片大全 | 婷婷在线网站 | 久久精品青青大伊人av | 一级做a爰片久久毛片 | 免费成人高清在线视频 | 日本黄色一级片视频 | 午夜精品一区二区三区在线播放 | 色偷偷888欧美精品久久久 | 成人影 | 国产二区三区 | 国产一级免费在线观看 | 国产区在线观看 | 久久精品毛片 |