的一個 實施例中,重放動作請求是到代理106內的直接API調用。在圖5B中示出的另一個實施例 中,在客戶端110中應對重放動作,并且客戶端110生成目標掛鐘時戳,其對應于重放動作 (即,暫停后播放、倒帶或快進)的目標重放位置。在一個實施例中,暫停后播放目標掛鐘時 戳計算為對應于上個重放動作(即,開始、暫停、倒帶、快進)的視頻位置的掛鐘時間加上自 上個重放動作以來重放的持續時間(例如,以自由運行計時器為基礎或使用與媒體播放器 的呈現時戳差異)。在一個實施例中,倒帶目標掛鐘時戳計算為對應于上個重放動作(即,開 始、暫停、倒帶、快進)的視頻位置的掛鐘時間加上自上個重放動作以來重放的持續時間(例 如,以自由運行計時器為基礎或使用與媒體播放器的呈現時戳差異)減去用戶希望倒帶的 秒數。在一個實施例中,快進目標掛鐘時戳計算為對應于上個重放動作(即,開始、暫停、倒 帶、快進)的視頻位置的掛鐘時間加上自上個重放動作以來重放的持續時間(例如,以自由 運行計時器為基礎或使用與媒體播放器的呈現時戳差異)加上用戶希望快進的秒數。如本 領域內技術人員應已知的,存在跟蹤重放位置和進度的許多方法,應理解用于確定重放位 置(即,對應于上個重放動作的掛鐘時間)的任何方法應適合于本發明,以供在計算目標掛 鐘時戳中使用。
[0050] 過程500A以步驟502開始,在這里代理106從客戶端110接收時移請求(S卩,暫停、 快進或倒帶)。處理然后持續到步驟508,在這里代理106檢查來看看時移請求是否是暫停 請求。如果請求是暫停請求,處理持續到步驟510,在這里代理106標注服務于客戶端110 的最新段(和段的關聯掛鐘時戳)并且然后行進到步驟526。在一個實施例中,代理106維 持關于客戶端110當前是否在查看實時流播內容(由設置為真的實時流播標志指示)或客戶 端110是否時移(由設置為假的實時流播標志指示)的會話狀態。當出現暫停操作時,實時 流播標志設置為假。
[0051] 如果請求不是暫停請求,處理持續到步驟512,在這里代理106檢查來看看時移請 求是否是倒帶請求。如果請求是倒帶請求,處理持續到步驟514,在這里代理106標注服務 于客戶端110的最新段的掛鐘時戳、通過從最新段的關聯掛鐘時戳扣除倒帶距離來計算對 于服務于客戶端110的下一個段的倒帶目標掛鐘時間、在當前npvr清單中向后搜索對應于 倒帶目標時戳的段(在必要時下載額外npvr清單文件來對于跨越節目邊界的倒帶請求搜 索額外npvr清單),并且標注倒帶目標段連同倒帶目標時戳,然后行進到步驟526。在一個 實施例中,如果倒帶目標掛鐘時間未駐存在當前npvr清單中,代理106使用之前的npvr指 針以通過使npvr清單鏈指針走動直到找到包含倒帶目標掛鐘時間的npvr清單來找到包含 目標段(其對應于倒帶目標掛鐘時間)的npvr清單。在另一個實施例中,代理106使用由 WFM102提供的信息來確定與倒帶目標掛鐘時戳關聯的npvr清單。在一個實施例中,代理 106定期使來自WFM102的npvr清單信息同步(例如,使用流播數據庫復制)。在另一個實 施例中,代理106從由WFM102管理和更新的共享分布式數據庫檢索npvr清單信息。在一 個實施例中,代理106維持關于客戶端110當前是否在查看實時流播內容(由設置為真的實 時流播標志指示)或客戶端110是否時移(由設置為假的實時流播標志指示)的會話狀態。 當出現倒帶操作時,實時流播標志設置為假。
[0052] 如果請求不是倒帶請求,處理持續到步驟516,在這里代理106檢查來看看時移請 求是否是快進請求。如果請求不是快進請求,處理持續到步驟524,在這里生成"未知動作" 錯誤。在圖示的實施例中,因為僅支持暫停、快進和倒帶,可以推斷錯誤。在備選實施例中 可采用其他錯誤檢測邏輯,尤其是具有額外有效、非錯誤請求類型的那些。如果在516處請 求是快進請求,處理持續到步驟518,在這里代理106標注服務于客戶端110的最新段的掛 鐘時戳、通過將快進距離添加到最新段的關聯掛鐘時戳來計算對于服務于客戶端110的下 一個段的快進掛鐘目標時間并且檢查來看看快進目標掛鐘時間是否在將來,即超出由包裝 器104生成的最新實時段的時戳。如果快進目標時間在將來(S卩,超出由包裝器104生成的 最新實時段的時戳),處理持續到步驟522,在這里代理106使用最新的N個段從由包裝器 104生成的最新npvr清單來生成實時流播變體清單。在一個實施例中,代理106維持關于 客戶端110當前是否在查看實時流播內容(由設置為真的實時流播標志指示)的會話狀態。 如果實時流播標志已經在步驟522中設置,不需要做什么。如果實時流播標志還未在步驟 522中設置,設置實時流播標志使得可忽略后續快進請求。
[0053] 如果在518處快進目標時間仍然在已經處理的段的范圍內,處理持續到步驟520, 在這里代理106在當前npvr清單中向前搜索對應于快進目標時戳的段(在必要時下載額外 npvr清單文件來對于跨越節目邊界的快進請求搜索額外npvr清單),并且然后行進到步驟 526。在一個實施例中,如果快進目標掛鐘時間未駐存在當前npvr清單中,代理106使用下 一個npvr清單指針以通過使npvr清單鏈指針走動直到找到包含快進目標掛鐘時間的npvr 清單來找到包含目標段(其對應于快進目標掛鐘時間)的npvr清單。在另一個實施例中, 代理106使用由WFM102提供的信息來確定與快進目標掛鐘時戳關聯的npvr清單。在一 個實施例中,代理106定期使來自WFM102的npvr清單信息同步(例如,使用流播數據庫復 制)。在另一個實施例中,代理106從由WFM102管理和更新的共享分布式數據庫檢索npvr 清單信息。在一個實施例中,代理106維持關于客戶端110當前是否在查看實時流播內容 (由設置為真的實時流播標志指示)或客戶端110是否時移(由設置為假的實時流播標志指 示)的會話狀態。當出現未導致恢復實時流的快進操作時,實時流播標志應已設置為假,但 另外可重設為假。
[0054] 在步驟526中,代理106從客戶端110接收對于特定比特率的變體清單請求。在一 個實施例中,代理106選擇⑶N108,客戶端110應從其檢索段。在一個實施例中,⑶N108 基于由WFM102提供的嚴格優先級排定而選擇。在另一個實施例中,⑶N108基于輪詢或 加權輪詢方案而選擇,其中權重由WFM102提供。在另一個實施例中,⑶N108基于對于清 單的聚集延遲測量和/或由代理106在指定時間窗口(例如,最后30秒)內執行的段檢索而 選擇。在另一個實施例中,CDN108基于對于清單的聚集帶寬測量和/或由代理106在指 定時間窗口(例如,最后30秒)內執行的段檢索而選擇。在一個實施例中,代理106選擇比 特率以服務于客戶端110,其中比特率可低于客戶端110所請求的比特率。在一個實施例 中,比特率基于由WFM102為客戶端110配置的用戶限制而確定。在另一個實施例中,比特 率基于由WFM102提供的網絡限制而確定。在另一個實施例中,比特率基于由代理106基 于清單請求的聚集數量和在指定時間窗口(例如,最后30秒)內看到的它們的對應比特率而 估計的當前網絡負載來確定。在另一個實施例中,比特率基于對于清單的聚集延遲測量和 /或由代理106在指定時間窗口(例如,最后30秒)內執行的從CDN108的段檢索而選擇。 在另一個實施例中,比特率基于對于清單的聚集帶寬測量和/或由代理106在指定時間窗 口(例如,最后30秒)內執行的從⑶N108的段檢索而選擇。
[0055] 代理106對從在步驟510、514或520中確定的目標段向后運作的所選比特率和 ⑶N108生成滑動窗口清單。代理106向客戶端110返回滑動窗口清單并且等待新的請求。 對于后續變體清單請求,處理行進回到步驟526,在這里代理106使目標段遞增(對于跨越 節目邊界的增量跟隨下一個npvr清單指針)并且生成更新的滑動窗口變體清單以返回給 客戶端110。在一個實施例中,如果對應于目標時間的滑動窗口清單包含廣告段,當在步驟 526中生成滑動窗口清單時,代理106用備選廣告段替換在npvr清單中規定的段。在一個 實施例中,代理106基于npvr清單中的注釋來檢測即將到來的廣告。在一個實施例中,代 理向ADM114發出請求來確定向客戶端110呈現哪個備選廣告。在一個實施例中,在步驟 526中接收變體清單請求之前,如果目標段是廣告段,代理106通過檢索對于目標段的npvr 清單、確定是否需要廣告段以及在步驟510、514或520中向ADM114發出請求來優化對ADM 114的請求。在另一個實施例中,代理106對于由ADM114規定的備選廣告從WFM102檢索 備選廣告段位點。
[0056] 應注意觸發步驟502中的過程的重放動作API調用可獨立于步驟526中的應對變 體清單請求并且與之異步。盡管它作為單個過程在圖5A中繪制,步驟502-524代表用于改 變由在步驟526中描述的清單生成任務使用的狀態(S卩,目標段)的過程。在一個實施例中, 步驟502-524中的過程迫使重啟或重新初始化步驟526中的清單生成任務,這有效地使步 驟526在過程500A中變成相關步驟。在另一個實施例中,步驟502-524中的過程簡單地更 新步驟526中的獨立清單生成任務(例如,獨立操作系統線程或操作系統進程)的當前段和 當前npvr清單變量。
[0057] 現在轉向圖5B,過程500B以步驟550開始,在這里客戶端110從用戶接收時移請 求(即,暫停、快進或倒帶)。處理然后持續到步驟558,在這里客戶端110檢查來看看時移請 求是否是暫停請求。如果請求是暫停請求,處理持續到步驟560,在這里代理106標注當前 重放掛鐘時戳并且然后行進到步驟576。在一個實施例中,當前重放掛鐘時戳計算為對應 于上個重放動作(即,開始、暫停、倒帶、快進)的視頻位置的掛鐘時間加上自上個重放動作 以來重放的持續時間(例如,以自由運行計時器為基礎或使用與媒體播放器的呈現時戳差 異)。如本領域內技術人員應已知的,存在跟蹤重放位置和進度的許多方法,應理解用于確 定重放位置(即,對應于上個重放動作的掛鐘時間)的任何方法應適合于本發明,以供在計 算當前重放掛鐘時戳中使用。在一個實施例中,客戶端110維持關于用戶當前是否在查看 實時流播內容(由設置為真的實時流播標志指示)或用戶是否時移(由設置為假的實時流播 標志指示)的會話狀態。當出現暫停操作時,實時流播標志應設置為假。
[0058] 如果在558處請求不是暫停請求,處理持續到步驟562,在這里客戶端110檢查來 看看時移請求是否是倒帶請求。如果請求是倒帶請求,處理持續到步驟564,在這里客戶 端110通過從當前重放掛鐘時戳扣除倒帶距離來計算倒帶目標掛鐘時間,然后行進到步驟 576。在一個實施例中,當前重放掛鐘時戳計算為對應于上個重放動作(S卩,開始、暫停、倒 帶、快進)的視頻位置的掛鐘時間加上自上個重放動作以來重放的持續時間(例如,以自由 運行計時器為基礎或使用與媒體播放器的呈現時戳差異)。如本領域內技術人員應已知的, 存在跟蹤重放位置和進度的許多方法,應理解用于確定重放位置(即,對應于上個重放動作 的掛鐘時間)的任何方法應適合于本發明,以供在計算當前重放掛鐘時戳中使用。在一個實 施例中,客戶端110維持關于用戶當前是否在查看實時流播內容(由設置為真的實時流播 標志指示)或客戶端110是否時移(由設置為假的實時流播標志指示)的會話狀態。當出現 倒帶操作時,實時流播標志應設置為假。
[0059] 如果在562處請求不是倒帶請求,處理持續到步驟566,在這里代理106檢查來看 看時移請求是否是快進請求。如果請求不是快進請求,處理持續到步驟574,在這里因為在 圖示的實施例中僅支持暫停、快進和倒帶而生成"未知動作"錯誤。至于過程500A,在支持 額外有效的非錯誤請求類型的實施例中可采用其他錯誤邏輯。如果在566處請求是快進請 求,處理持續到步驟568,在這里客戶端110通過將快進距離添加到當前重放掛鐘時戳來計 算快進掛鐘目標時間。在一個實施例中,當前重放掛鐘時戳計算為上個重放動作(即,開始、 暫停、倒帶、快進)的視頻位置的掛鐘時間加上自上個重放動