1. 程式人生 > >小玩流媒體播放——HLS流媒體點播系統

小玩流媒體播放——HLS流媒體點播系統

背景:前一段時間幫助一個朋友研究了下流媒體播放方面的知識,感覺挺好玩的。現在把淺薄的嘗試和總結分享給大家。

.HLS流媒體點播系統概述

HTTP Live  Streaming最初是蘋果公司針對其iPhone、iPod、iTouch和iPad等移動裝置而開發的流媒體協議,後來在桌面QuickTime播放器中也得到了應用。HTTP  Live  Streaming允許內容提供者通過普通Web伺服器向上述客戶端提供接近實時的音視訊流媒體服務,包括直播和點播。HTTP  Live Streaming支援將同一節目編碼為不同位元速率的多個替換流,客戶端軟體可以根據網路頻寬的變化在這些不同位元速率的替換流之間進行智慧切換。此外,HTTP  Live  Streaming還支援通過媒體加密和使用者認證等方式來達到媒體版權保護。目前HTTP  Live  Streaming已被提交成為IETF的Internet-Draft。

一個典型的HTTP Live  Streaming流媒體系統由內容準備(流媒體服務)、內容分發(分發伺服器)和客戶端軟體三部分組成,如圖所示

wKiom1O7YN_iuxr9AAF2uhn1b-Y891.jpg

1.1 內容準備服務

內容準備服務(流媒體伺服器)負責將輸入的音視訊媒體內容轉換成為適合於內容分發服務進行傳輸的格式。對於視訊源獲取的或者上傳的視利用視訊編碼器轉化為MPEG-2系統層標準的傳輸流(TS)格式進行輸出。流分割器負責將編碼器輸出的MPEG-2 TS流分割為一系列連續的、長度均等的小TS檔案(字尾名為.ts),並依次傳送至內容分發元件中的Web伺服器進行儲存。與此同時,流分割器還需建立一個含有指向這些小TS檔案指標的索引檔案(字尾為m3u8),同樣放置於Web伺服器之中進行儲存。流分割器還可以對其生成的每個小TS檔案進行加密,並生成相應的金鑰檔案。

之所以採用MPEG-2 TS格式來對編碼後的媒體流進行統一封裝,是因為它能夠將音視訊媒體流嚴格按時序進行交織複用,任意擷取和分段後,每一個分段都可能不依賴於之前的分段而獨立進行解碼和播放

1.2內容分發服務

內容分發服務(分發伺服器)用於通過HTTP協議將分割後的小媒體檔案及其索引檔案遞送至客戶端播放器,可以採用一個普通的Web伺服器(nginx,Apache)來實現。

1.3 客戶端

通常情況下,客戶端軟體通過訪問Web網頁中的URL連結來獲取和下載一個流媒體會話的索引檔案。這個索引檔案進一步指定了伺服器上當前可用的TS格式媒體檔案、解密金鑰和其他替換流的位置。對於選定的媒體流,客戶端依次下載索引檔案中列出的每一個可用媒體檔案。當這些媒體檔案緩衝夠一定數量後,客戶端將它們按順序重新拼裝成一個連貫的

TS流,然後傳送至播放器進行解碼和呈現。對於加密的媒體檔案,客戶端還負責根據索引檔案的指引來獲取解密金鑰,提供使用者認證介面,並按需進行解密。

1.4 HTTP  Live Streaming協議介紹

索引檔案採用擴充套件的M3U播放列表格式,字尾名為.m3u8M3U播放列表是一個由若干文字行組成的文字檔案,其中每一行要麼是一個URI,一個空行,或者是一個以註釋符“#”起始的行。每個URI行指向一個分段的媒體檔案,或者一個衍生的索引(播放列表)檔案。除了以“#EXT”起始的行是標籤行外,其他以“#”起始的行是註釋,應予忽略。下面是一個簡單的.m3u8索引檔案例子,其所表示的媒體流由3個未加密的長度為10秒的TS檔案組成

1 2 3 4 5 6 7 8 9 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-TARGETDURATION:10 #EXTINF:10, http://media.example.com/segment1.ts #EXTINF:10, http://media.example.com/segment2.ts #EXTINF:10, http://media.example.com/segment3.ts #EXT-X-ENDLIST

對於視訊點播,直到客戶端碰到索引檔案中的#EXT-X-ENDLIST標籤便會停止播放。

二.HLS流媒體系統的優勢

部署方便,便於分發:一旦切分完成,之後的分發過程完全不需要額外使用任何專門軟體,普通的網路伺服器即可,大大降低了 CDN 邊緣伺服器的配置要求,可以使用任何現成的 CDN。分發使用的協議是最常見 HTTP,代理伺服器對這個協議的快取優化相當成熟。

時移特性好:如果你要在一段長達一小時的視訊中跳轉,如果使用單個 MP4 格式的視訊檔案,並且也是用 HTTP 協議,那麼需要代理伺服器支援 HTTP range request 以獲取大檔案中的一部分。不是所有的代理伺服器都對此有良好的支援。而 HTTP Live Streaming 則只需要根據列表檔案中的時間軸找出對應的 TS 片段下載即可,不需要 range request,對代理伺服器的要求小很多。所有代理伺服器都支援小檔案的高效快取。

自適應位元速率流播:效果就是客戶端會根據網路狀況自動選擇不同位元速率的視訊流,條件允許的情況下使用高位元速率,網路繁忙的時候使用低位元速率,並且自動在二者間隨意切換。這對移動裝置網路狀況不穩定的情況下保障流暢播放非常有幫助。實現方法是伺服器端提供多位元速率視訊流,並且在列表檔案中註明,播放器根據播放進度和下載速度自動調整。

對網路環境支援好HLS可以穿過任何允許HTTP資料通過的防火牆或者代理伺服器。

二.HLS流媒體系統的缺點

具有時延性:HTTP  Live  Streaming並不是一個真正實時的流媒體系統,這是因為對應於媒體分段的大小和持續時間有一定潛在的時間延遲。在客戶端中,至少在一個分段媒體檔案被完全下載之後才能夠開始播放,而通常要求下載完成兩個分段媒體檔案之後才開始播放以保證不同分段音視訊之間的無縫連線。

媒體資料位元速率相對較大:MPEG-TS流有比通常檔案更多的頭資訊,會導致檔案整體位元速率明顯上升。

三.技術選型

內容準備服務中的編碼器採用ffmpeg,流切片採用Segmenterweb伺服器採用Nginx客戶端:對flash支援客戶端的選用StrobeMedia Playbackios利用Safari瀏覽即可,Android正在研究中,對於支援html5的瀏覽器可採用html5技術進行播放。

四.流媒體伺服器的安裝配置

系統環境:

發行版本:CentOS release 6.3

核心版本:2.6.32-279.el6.x86_64

4.1 ffmpeg的安裝

  • 4.1.1安裝Yasm

Yasm是一個完全重寫的NASM彙編。目前,它支援x86和AMD64指令集,接受NASM和氣體彙編語法,產出二進位制, ELF32 , ELF64 ,COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64物件的格式,並生成STABS 除錯資訊的來源,DWARF 2 ,CodeView 8格式。

1 2 3 4 5 6 7 wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz tar zxvf yasm-1.2.0.tar.gz cd yasm-1.2.0 ./configure –prefix=/usr/local Make make install

相關推薦

媒體播放——HLS媒體點播系統

背景:前一段時間幫助一個朋友研究了下流媒體播放方面的知識,感覺挺好玩的。現在把淺薄的嘗試和總結分享給大家。 一.HLS流媒體點播系統概述 HTTP Live  Streaming最初是蘋果公司針對其iPhone、iPod、iTouch和iPad等移動裝置而開發的流媒體協議,

使用VLC傳送TS播放TS

一、如何使用VLC傳送TS流 1、新增一個檔案至VLC 2、選擇串流,繼續 3、選擇UDP,點選新增 4、輸入地址及埠 5、選擇h.264+mp3(TS) 6、next至播放。 二、如何播放TS流 開啟新的VLC,按如下格式輸入地址及埠,點選播放。

JMeter媒體線上播放HLS外掛BlazeMeter - HLS Plugin實現視訊線上播放壓測

一、前提 近日因工作需要,需對視訊線上播放功能進行壓測,視訊播放使用的是HLS協議,傳輸內容包括兩部分,一是用來控制播放的m3u8檔案,二是TS媒體檔案。(HLS協議和m3u8詳解可參考此連結:https://blog.csdn.net/aoshilang2249/article/details/820121

瀏覽器播放rtsp媒體解決方案

wid 格式 script mar max-width main view pro tmp 老板提了一個需求,想讓網頁上播放景區監控的畫面,估計是想讓遊客達到未臨其地,已知其境的狀態吧。 說這個之前,還是先說一下什麽是rtsp協議吧。 RTSP(Real Time S

在ubuntu16.04上搭建hls媒體服務器

nts ges 本地服務器 put tel sta .tar.gz 備份 reset 1.Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial 2

hls媒體視頻防盜實現

一個 系統設置 高級 cat 1.3 bin 2-2 controls video HLS流媒體視頻防盜實現 一、Windows安裝FFmpeg 1.1 安裝版本 1.1.1 網址:https://ffmpeg.org/ 1.1.2 選擇Windows版本:https:/

基於HLS媒體協議的視訊加密方案

本文只討論應用於瀏覽器環境的流媒體協議的加密。 背景 付費觀看視訊的模式是很多平臺的核心業務,如果視訊被錄製並非法傳播,付費業務將受到嚴重威脅。因此對視訊服務進行加密的技術變得尤為重要。 本文所指的視訊加密是為了讓要保護的視訊不能輕易被下載,即使下載到了也是加密後的內容,其它人解開加密後

搭建web媒體播放(基於ffmpeg+red5的xp系統

搭建web流媒體播放(基於ffmpeg+red5的xp系統) 專案採用HKvision攝像頭和xp系統(32位機),需要通過web頁面實現遠端監控。HKvision攝像頭是rtsp格式的視訊,無法通過HTML的video標籤播放。隨即採用ffmpeg進行格式轉換,red5作為視訊伺服器。(所有軟

MPlayer上支援RTSP媒體(live555作為媒體播放器)

    條件:在中天CK810的CPU上執行linux12.04作業系統以tft傳輸方式載入uImage; 考慮到針對性,一開始mplayer的編譯選項並不是mplayer官網上下載下來的configure,很多條件都是disable的,連結檔案和連結庫也是有自己的指定位置

媒體播放地址

MP4: http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4 http://218.200.69.66:8302/upload/Media/20150327/43bfda1b-

基於Nginx+nginx-rtmp-module+ffmpeg搭建rtmp、hls媒體伺服器

Nginx及nginx-rtmp-module安裝新建目錄mkdir /usr/local/mginx下載cd /usr/local/nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz wget https://c

android 媒體 播放器 專案 原始碼

我們先看一下多媒體框架在整個Android系統所處的位置 從框架圖可以看出Media Framework處於Libraries這一層,這層的Library不是用Java實現,一般是C/C++實現,它們通過Java的JNI方式呼叫。 多媒體架構: 基於第三方PacketVideo 公司的OpenCO

gstreamer播放教程一:playbin——獲取媒體資訊、切換

以下程式:獲取一個媒體檔案中流的數目以及流的資訊,並且可以切換音軌。 可以理解為:使用playbin播放媒體,然後從playbin中獲取以上資訊 #include "pch.h" #include<string.h> #include<stdio.h> #includ

nginx的媒體播放

實驗目的:讓Nginx支援flv和mp4格式檔案,同時支援Rtmp協議;同時開啟rtmp的hls功能 資料: HTTP Live Streaming(縮寫是 HLS)是一個由蘋果公司提出的基於HTTP的流媒體 網路傳輸協議。 HLS只請求基本的HTTP報文,與實時傳輸協議(

【視訊開發】Gstreamer框架中使用gst-launch進行媒體播放

Gstreamer框架中使用gst-launch進行流媒體播放 Gstreamer是一套開源的流媒體框架,用其也可以進行流媒體開發,Gstreamer是基於glib庫編寫的,需要將多個不同功能的元件(element)裝進一個箱櫃(bin)中,在進行程式編寫前,我們可以使

Qt+VLC 實現的網路串媒體播放

緣起 由於專案需要,監控相機需要在客戶端顯示,但是這個baslar相機BIP2-1300c-dn只支援網頁檢視,並沒有傳統工業相機一樣的c++ demo。沒辦法,還需要這個功能,就自己寫一個網路媒體播放器。 過程 工具為Qt + VLC,qt有較好的可控的

rtmp 和 http 協議在播放 flv 媒體的區別

rtmp 是專門為傳輸網路流媒體設計的,需要伺服器(如FMS,awaza等)的支援,對流媒體內容提供比較好的版權保護,另外它本身也需要向adobe支付版權費用。 首先兩者的工作方式不一樣: rtmp 資料需要專門的伺服器接收, 如FMS, awazal等,然後通過本地的

RTSP 媒體播放地址

線上流媒體播放地址,在windows上可以用VLC播放器直接開啟地址播放 浙江普通rtsp://58.248.254.8/rtpencoder/26-2-2.sdp高清rtsp://58.248.254.8/rtpencoder/26-2-1.sdp 四川衛視: rtsp

成功實現NAS家庭伺服器(媒體播放、檔案共享及下載機)

一、家庭伺服器實現的主要功能 1、流媒體播放服務:利用DLNA實現電視、手機、電腦播放其上面的媒體檔案。 2、檔案共享:利用samba實現手機、電腦等終端與伺服器的檔案共享。 3、自動下載:利用aria2c實現自動下載。 先上幾張效果圖: 用orico的包裝盒做了個

Videojs播放RTMP媒體

<!DOCTYPE html> <html> <head> <title>播放器</title> <link href="vi