国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ffmpeg本地TS和M3U8播放流程及調(diào)試過程

這篇具有很好參考價值的文章主要介紹了ffmpeg本地TS和M3U8播放流程及調(diào)試過程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?本地TS播放過程

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

本地M3U8播放過程

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

?http工作流程

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

?ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

?http分兩個步驟

1、獲取m3u8文件,這個是在哪里開始讀的?

2、獲取data數(shù)據(jù),這個是從http_read開始讀,可以通過修改這里實現(xiàn)buffer數(shù)據(jù)和引擎對接

3、s->user_agent,s->off,s->end_off,s->seekable這些是什么時候賦值的?

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

從 http_get_line獲取到

4、需要修改的幾個地方

1)http_get_line->ffurl_read

獲取header

這個就模擬,主要是拿到長度

2)http_buf_read->ffurl_read

獲取真正數(shù)據(jù)

調(diào)試過程

1、demo測試

通過URL傳m3u8索引文件夾,真正TS數(shù)據(jù)通過讀取本地文件來獲取

修改:

http_buf_read

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

?即可

2、m3u8通過buffer方式獲取

先拿到m3u8數(shù)據(jù)

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

hls以及能解析得到playlist,但是獲取第一個block數(shù)據(jù)后還會去獲取m3u8的數(shù)據(jù),也就是之前的m3u8的connect還沒斷開

通過log看到header少了Connection:?close,以及一個回車,通過添加Connection:?close解決了m3u8會多次連接的問題,但會出現(xiàn)

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

?導(dǎo)致這個原因是因為讀完第一個block后,沒繼續(xù)讀下個block?

去掉之前私有協(xié)議的seek邏輯,在ijk_mediasource_readAt函數(shù)里去掉if?(pointer_pos?!=?position?)

這么修改后,能播放了,看到希望咯

3、播放10左右,就把索引表的所有TS讀完了,啥情況?

ffmpeg本地TS和M3U8播放流程及調(diào)試過程,ffmpeg

是因為ffurl_read有阻塞?而ijk_mediasource_readAt沒有阻塞?

下面分析ffurl_read

int ffurl_read(URLContext *h, unsigned char *buf, int size)
{
    if (!(h->flags & AVIO_FLAG_READ))
        return AVERROR(EIO);
    return retry_transfer_wrapper(h, buf, size, 1, h->prot->url_read);
}

?ffurl_read() -> retry_transfer_wrapper()文章來源地址http://www.zghlxwxcb.cn/news/detail-820447.html

static inline int retry_transfer_wrapper(URLContext *h, uint8_t *buf,
                                         int size, int size_min,
                                         int (*transfer_func)(URLContext *h,
                                                              uint8_t *buf,
                                                              int size))
{
    int ret, len;
    int fast_retries = 5;
    int64_t wait_since = 0;

    len = 0;
    while (len < size_min) {//如果len小于size_min,則循環(huán),這里size_min=1
        if (ff_check_interrupt(&h->interrupt_callback))//檢查是否結(jié)束
            return AVERROR_EXIT;
        ret = transfer_func(h, buf + len, size - len);//拉取數(shù)據(jù)
        if (ret == AVERROR(EINTR))//出錯,繼續(xù)
            continue;
        if (h->flags & AVIO_FLAG_NONBLOCK)
            return ret;
        if (ret == AVERROR(EAGAIN)) {//從新再來
            ret = 0;
            if (fast_retries) {//初始值5,嘗試5次,5次后
                fast_retries--;
            } else {//睡眠方式嘗試
                if (h->rw_timeout) {
                    if (!wait_since)
                        wait_since = av_gettime_relative();
                    else if (av_gettime_relative() > wait_since + h->rw_timeout)
                        return AVERROR(EIO);
                }
                av_usleep(1000);//開始睡眠1000us
            }
        } else if (ret < 1)
            return (ret < 0 && ret != AVERROR_EOF) ? ret : len;
        if (ret) {
            fast_retries = FFMAX(fast_retries, 2);
            wait_since = 0;
        }
        len += ret;
    }
    return len;
}

到了這里,關(guān)于ffmpeg本地TS和M3U8播放流程及調(diào)試過程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • html5播放 m3u8

    注意:m3u8地址要為網(wǎng)絡(luò)地址,直接把代碼復(fù)制為html直接在本地打開,可能不行,需要放在nginx或者apache或者其他的web服務(wù)器上運行。

    2024年02月20日
    瀏覽(25)
  • ffmpeg 下載網(wǎng)上m3u8的視頻文件

    FFmpeg 是一個音視頻領(lǐng)域使用最廣泛的跨平臺開源庫。由C語言編寫,但廣泛的為 C/C++、C#、Java、Python 等主流編程語言所調(diào)用。它集合了幾乎所有的編碼解碼庫與流協(xié)議,幾乎能完美處理音視頻開發(fā)領(lǐng)域的所有需求。 方式一:源碼安裝 FFmpeg 通過編譯源碼安裝 FFmpeg 的優(yōu)點是可

    2023年04月09日
    瀏覽(15)
  • vue項目如何播放m3u8格式視頻

    vue項目如何播放m3u8格式視頻

    在node_modeols里面找到@easydarwin下的dist/compent/EasyPlayer-lib.min.js和EasyPlayer.wasm兩個文件復(fù)制到pubilc目錄下 引入 在components中 在模板中

    2024年02月15日
    瀏覽(24)
  • uniapp 直播拉流 播放m3u8 視頻

    在百度中找啦n多個方法 沒有解決啦 巨氣人 發(fā)現(xiàn)hls.js hls.js不需要任何播放器,它可以直接在標準HTML 元素上運行。 安裝第三方庫 在uniapp頁面顯示 如果想要應(yīng)用在自己的頁面中 直接c v 就ok啦 要是有人問推流為啥沒有 不要問 問就是不會?。?!

    2024年02月12日
    瀏覽(26)
  • 安卓實現(xiàn)M3U8文件的下載和播放

    安卓實現(xiàn)M3U8文件的下載和播放

    現(xiàn)如今網(wǎng)絡(luò)上的視頻大多數(shù)都是m3u8格式的,使用m3u8格式有以下好處 1. 方便切換碼率,例如從高清轉(zhuǎn)到藍光 2. 節(jié)約流量,m3u8實際切割成一段段的TS后綴視頻,傳統(tǒng)請求是把整個文件流返回去,網(wǎng)絡(luò)不好或者文件過大時,都會造成響應(yīng)緩慢,m3u8則是返回一個個的ts文件,當(dāng)前

    2023年04月20日
    瀏覽(22)
  • hls.js如何播放m3u8文件(實例)?

    hls.js如何播放m3u8文件(實例)?

    ?HLS(HTTP Live Streaming)是一種視頻流傳輸協(xié)議,是蘋果推出的適用于iOS與macOS平臺的流媒體傳輸協(xié)議。它將視頻分割成若干個小段,每個小段大小一般為2~10秒不等,并通過HTTP協(xié)議進行傳輸。通過在每個小段之間插入若干秒的間隔,可以提高視頻的傳輸穩(wěn)定性和用戶的觀看體驗

    2023年04月23日
    瀏覽(31)
  • Unity WebGL 播放視頻流m3u8

    Unity WebGL 播放視頻流m3u8

    目錄 介紹 步驟 1.導(dǎo)入AVProVideo插件,創(chuàng)建場景,創(chuàng)建空物體添加MediaPlayer組件設(shè)置m3u8視頻地址以及WebGL平臺設(shè)置 ?2.在Canvas下創(chuàng)建Avpro Video,為MediaPlayer賦值 ?3.可以現(xiàn)在編輯器模式下測試視頻地址是否可以播放,然后打包 ?4.打包完成后,將文件hls.min.js復(fù)制到Build文件夾下: 5

    2023年04月10日
    瀏覽(34)
  • video插件播放m3u8格式視頻(存原生)

    這里使用原生的javascript實現(xiàn)m3u8格式視頻播放。 使用了包括video.min.js庫和HLS插件。 在上面代碼中,首先引入了video.min.js庫和對應(yīng)的播放器樣式video-js.css,還引入了videojs-contrib-hls.min.js庫(引入順序考慮優(yōu)先放到頁面加載之前)。 之后,創(chuàng)建一個video標簽,并指定source的src屬性為

    2024年02月13日
    瀏覽(27)
  • vue3播放m3u8視頻(videoJS)

    需要同時導(dǎo)入videoJS以及相關(guān)的CSS 以下時項目使用中自己封裝的組件,用起來也很簡單,需要的可以對照自取 UI框架為 ant-design-vue

    2024年02月03日
    瀏覽(18)
  • 使用ffmpeg將視頻轉(zhuǎn)成HLS(m3u8)格式

    ??HLS (HTTP Live Streaming)是蘋果推出的視頻流協(xié)議,HLS格式的視頻包含一個m3u8文本文件,以及眾多的.ts的視頻片段,而m3u8文本文件的作用就是將這些ts片段索引起來。 因為HLS協(xié)議是將視頻切分成很多小的ts片段,這些小片段很適合放到cdn上,有很多視頻文章都使用了hls格式傳

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包