iOS视频直播学习
iOS視頻直播學習
字數(shù)1512閱讀572評論2喜歡7整個流媒體播放系統(tǒng)主要分為視頻服務器端和iOS視頻播放器客戶端。
服務器端主要負責為播放器端提供直播,點播等視頻流;
播放器端負責接收服務器發(fā)送的數(shù)據(jù)流,進行解碼和播放。
一、流媒體技術(shù)的含義
流媒體并不是一種新型的媒體,而是一種新的技術(shù)。廣義上的流媒體指的是使音頻和視頻形成穩(wěn)定和連續(xù)的傳輸流和回放流的一系列技術(shù)、方法和協(xié)議的總稱,即流媒體技術(shù);狹義上的流媒體是相對于傳統(tǒng)的下載-回放方式而言的,指的是一種從 Internet 上獲取音頻和視頻等多媒體數(shù)據(jù)的新方法,它能夠支持多媒體數(shù)據(jù)流的實時傳輸和實時播放。通過運用流媒體技術(shù),服務器能夠向客戶機發(fā)送穩(wěn)定和連續(xù)的多媒體數(shù)據(jù)流,客戶機在接收數(shù)據(jù)的同時以一個穩(wěn)定的速率回放,而不用等數(shù)據(jù)全部下載完之后再進行回放。
二、HLS協(xié)議
HLS是HTTP Live Streaming的縮寫。它是蘋果公司實現(xiàn)的基于HTTP的流媒體傳輸協(xié)議,可以實現(xiàn)流媒體的直播和點播,也就是我們常說的Live和VOD。最先開始主要應用于iOS系統(tǒng),為iOS設備提供視頻直播和點播方案,現(xiàn)在在大多數(shù)的移動設備也實現(xiàn)了這個功能。HLS的點播,是將常見的分段HTTP點播,不同的是,他的分段非常小。實現(xiàn)的重點在于對媒體文件的分割,目前有很多開源工具。
相對于其他的流媒體直播協(xié)議,HLS最大的不同在于,客戶端獲取到的,并不是一個完整的數(shù)據(jù)流,而是一段一段的切片TS(MPEG-TS格式)。HLS協(xié)議在服務端將直播數(shù)據(jù)存儲為連續(xù)的,一定時長的媒體文件,codec為MPEG-TS,客戶端再按照playlist去在下載并播放這些文件,從而達到直播或者點播功能。HLS由于采取HTTP協(xié)議傳輸文件,所以不用考慮防火墻或者代理的問題,因為一般的主機80端口應該是開放的。還有一個優(yōu)點在于,客戶端可以很快的選擇和切換碼率,以適應不同帶寬條件下的播放。
HLS協(xié)議的實現(xiàn)過程:
首先對視頻數(shù)據(jù)進行錄入、編碼,然后服務器軟件的流分段程序?qū)⒚襟w視頻流分解成一系列簡短的.ts媒體文件,這些.ts文件被放置在web服務器上。這個流分段程序同時還創(chuàng)建一個索引文件,該索引文件包含元數(shù)據(jù)以及一個.m3u8媒體文件的列表,且索引文件的URL發(fā)布到服務器上,客戶端軟件即可讀取索引,請求媒體文件,并將其在客戶端播放器中顯示出來。
根據(jù)以上的了解,想要實現(xiàn)HLS直播,需要研究并實現(xiàn)以下技術(shù)關(guān)鍵點:
采集視頻源和音頻源的數(shù)據(jù)
對原始數(shù)據(jù)進行H.264編碼和AAC編碼
視頻和音頻數(shù)據(jù)封裝為MPEG-TS包
HLS分段生成策略及m3u8索引文件
HTTP傳輸協(xié)議
三、RTSP協(xié)議
與負責傳送數(shù)據(jù)的 RTP/RTCP不同,RTSP 主要負責在服務器和客戶端之間建立連接,并響應用戶的操作請求,如暫停,快進、快退、音量加減等。與HLS相比,RTSP傳輸?shù)难舆t更低。最常見的模式如下圖所示。
四、播放器端解碼
FFmpeg簡介
FFmpeg 是一個跨平臺的開源視頻框架,能實現(xiàn)如視頻編碼、解碼、轉(zhuǎn)碼、串流、濾波、播放等豐富的功能。其支持的視頻格式以及播放協(xié)議非常豐富,幾乎包含了所有音視頻編解碼、封裝格式以及播放協(xié)議。而實時視頻直播一般使用的協(xié)議,如 RSTP,在 FFmpeg 中得到了很好的支持。 在手機直播軟件中,可以調(diào)用FFmpeg編寫一個播放器。
五、主要使用的協(xié)議:
HLS 協(xié)議 : >5M會被AppStore拒絕 服務器要求低 延遲高 多平臺
RTMP 協(xié)議: 電視直播 PC端使用 配合flash插件 及時性好
需要轉(zhuǎn)碼ffmpeg 延遲200ms
RTSP 協(xié)議: 攝像頭功能
軟解碼: ffmpeg
硬解碼:ios8之后 VideoToolBox 框架
直播過程大概為5步
數(shù)據(jù)采集-->數(shù)據(jù)編碼--->數(shù)據(jù)傳輸-->數(shù)據(jù)解碼-->顯示到屏幕
數(shù)據(jù)采集:采集視頻及音頻數(shù)據(jù)。 原始數(shù)據(jù)。
數(shù)據(jù)編碼:編碼成(flv)
數(shù)據(jù)傳輸:
(推流)把你本地得到編碼數(shù)據(jù)。上傳到流媒體服務器。rtmp hls (rtmp協(xié)議)
(拉流) 把你的數(shù)據(jù)從流媒體服務器上拉下來。
數(shù)據(jù)解碼: 流。。音頻流(),視頻流。。
播放顯示:openGLES:渲染。。GPUImage
直播聊天室: 融云(5000+) 視頻+聊天室、
主播開播、、 (在開播同時,需要申請。推流地址。+后臺創(chuàng)建融云聊天室)。。黑名單。。(通知。)。。全直播(通知)
送禮物,:扣款
三方提供商: 七牛。 YY 和斗魚 騰訊。。now。。網(wǎng)易云信、
總結(jié)
- 上一篇: iOS流媒体直播整个框架介绍(HLS、R
- 下一篇: 流媒体视频直播方案