1. 程式人生 > >前段播放 流媒體(RTMP,RTSP,HLS)

前段播放 流媒體(RTMP,RTSP,HLS)

前言

最近專案需要流媒體的播放,後端一共提供了 三種流資料(RTSP,RTMP,HLS),在不同的場景可能會使用到不同方式播放,就需要做到適配, 支援所有的流資料播放。花了一段時間研究,在這裡和大家分享一下,還有些遺留問題,看大家有沒有好的方法。

RTSP

簡介

這種協議流資料前段播放,沒有特別好的解決方法,需要在本機裝一個vlc 外掛,依靠這個外掛才能讓 RTSP 協議 在網頁上能播放,但是目前高版本的 Chrome 瀏覽器不支援 NPAPI 外掛,也就是說高版本的 Chrome 瀏覽器還是不能播放(46 以上的版本都不行)。

html code
  <object type='application/x-vlc-plugin' id='vlc' width="200" height="500" events='True' pluginspage="http://www.videolan.org" codebase="http://downloads.videolan.org/pub/videolan/vlc-webplugins/2.0.6/npapi-vlc-2.0.6.tar.xz">
     <param name='mrl' value='rtsp://***********************/Streaming/Channels/1' />
     <param name='volume' value='50' />
     <param name='autoplay' value='true' />
     <param name='loop' value='false' />
     <param value="transparent" name="wmode">
     <embed id='vlc' wmode="transparent" type="application/x-vlc-plugin" width="200" height="500" pluginspage="http://www.videolan.org" allownetworking="internal" allowscriptaccess="always" quality="high" src="rtsp://***********************/Streaming/Channels/1">
  </object>

程式碼很簡單,更播放 flash 差別不是很大,需要改幾個點,
1.object 標籤的 type , codebase 屬性
2.param 標籤 <param name='mrl' value='rtsp://***********************/Streaming/Channels/1' />

js code
     //獲取 VLC js 隊形 
     function getVLC(name) {
            if (window.document[name]) {
                return window.document[name];
            }
            if (navigator.appName.indexOf("Microsoft Internet") == -1) {
                if (document.embeds && document.embeds[name])
                    return document.embeds[name];
            } else {
                return document.getElementById(name);
            }
        }
    
     // 根據地址切換視訊
        function doGo(mrl) {
            try {
                var vlc = getVLC("vlc"),
                    itemId = vlc.playlist.add(mrl);
                vlc.playlist.playItem(itemId);

            } catch (e) {
                console.log(e);
            }
        }
       //呼叫
     doGo(mrl)

我們用js 程式碼主要是用來切換地址,達到如果流資料 地址變化, 內容跟著變化。

VlC 給我們提供了豐富的API ,請檢視 VLC API

HLS

簡介

Http Live Streaming (簡稱HLS) ,它在移動 Web 瀏覽器支援挺好,所以現在好多移動端直播都在用此協議。但在 PC Chrome,Firefox 上不支援,所以還需要藉助flash 。在研究的過程中發現了 video.js 這個外掛,程式碼託管 在 github 上,開源。但是它不直接支援播放 HLS 協議的播放. 需要藉助 videojs-contrib-hls 但是我怎麼測試都沒成功,播放不了。大家有測試通的可以聯絡我。 經過一番的查詢,github 上一頓搜尋,黃天不負有心人,找見了這個庫

FZ-live 我看他也是基於 video.js 的。

html code
<video id="video" class="video-js vjs-default-skin" controls  preload="none" data-setup='{}'>
    <source src="./src/z.m3u8" type="application/x-mpegURL">
</video>

直接寫video 標籤, 在 source 的 src 給上路徑就可以,還有個要求,就是資源 不能跨域,需要在同一域下。

js code
//切換地址播放
var player = videojs('video');
 player.ready(function() {
     var myPlayer = this;
     myPlayer.src(url);
     myPlayer.load(url);
     myPlayer.play();
   });

我們用js實現了切換地址播放。 video.js 這個外掛 提供了好多api 我們有需要可以檢視,可以做出好多功能

RTMP

簡介

Real Time Messaging Protocol(簡稱 RTMP)是 Macromedia 開發的一套視訊直播協議,現在屬於 Adobe。所以我們就只能藉助 flash 了 。 在研究 video.js 外掛的時候, 看它也能提供 RTMP 的播放,這下我們就省事多了。

html code
<video id="vlc" class="video-js vjs-default-skin" controls  preload="none" data-setup='{}'></video>

看到我沒有寫 source 標籤,我們直接用js 來操作,做到播放 RTMP 和 HLS 的適配 .

js code
player.ready(function() {
    var myPlayer = this;
    myPlayer.reset();
    if (scope.type == 'hls') {
        console.log('hls');
        myPlayer.src({ type: "application/x-mpegURL", src: scope.url });
    } else {
        myPlayer.src({ type: "rtmp/flv", src: scope.url });
        console.log('rtmp');
    }
    myPlayer.load(scope.url);
    myPlayer.play();
});

我們藉助 player.src() 方法就是實現,根據不同的型別設定 src 的type 就可以。但是每次我們更改地址的時候,記得呼叫一下 player.reset() 方法會重置播放器 。要不會有問題,切換不了。

結束語

以上我是我在解決前段播放 流媒體資料的過程。其中還有幾個問題,需要研究改進。

  1. RTSP 在 chrome 的高版本瀏覽器播放
    2.videojs-contrib-hls 這個庫播放 hls (猜測,是不是後端給的資料流有問題)

相關推薦

前段播放 媒體(RTMP,RTSP,HLS)

前言 最近專案需要流媒體的播放,後端一共提供了 三種流資料(RTSP,RTMP,HLS),在不同的場景可能會使用到不同方式播放,就需要做到適配, 支援所有的流資料播放。花了一段時間研究,在這裡和大家分享一下,還有些遺留問題,看大家有沒有好的方法。 RTSP 簡介 這種協議流資料前段播放,沒有特別好的解決方法,

前端播放媒體(RTMP,RTSP,HLS)

前言 最近專案需要流媒體的播放,後端一共提供了 三種流資料(RTSP,RTMP,HLS),在不同的場景可能會使用到不同方式播放,就需要做到適配, 支援所有的流資料播放。花了一段時間研究,在這裡和大家分享一下,還有些遺留問題,看大家有沒有好的方法。 RTSP 簡介 這種協議流資料前段播放,沒有特別好

前端播放媒體RTSP

目標:在你的瀏覽器(瀏覽器)上播放的RTSP視訊流   問題:然而,H5的標籤<視訊>不支援這樣的播放   方案: 1,這裡利用我們的流媒體在你的服務端開啟一個websocket代理(代理),負責接收rtsp流,並轉播給你的瀏覽器客戶端,流媒體在客戶端利

媒體協議(HLS/RTSP/RTMP)比較

HLS協議: 如果要開發一套準實時的手機音視訊直播系統,需要支援iphone,Android,windows phone等多款手機,這個協議真心不錯。為什麼是準實時呢,因為客戶端播放的是最新切割的ts檔案,它的延遲取決於切片的大小。 其思路步驟: 1

android使用MediaPlayer類播放媒體RTSP(實時協議)

實時流協議RTSP(Real-Time Streaming Protocol)是IETF提出的協議,對應的RFC文件為RFC2362。 RTSP地址,如:rtsp://www.www.com/aaaa/file.sdp 在android下使用 MediaPlayer播放,支

媒體開發之--HLS--M3U8解析(2): HLS草案

目錄 1 簡介 2 2 概述 2 3 播放列表檔案 3 3.1 介紹 3 3.2新標籤 4 3.2.1 EXT-X-TARGETDURATION 4 3.2.2 EXT-X-MEDIA-SEQUENCE 4 3.2.3 EXT-X-KEY 4 3.2.4 EXT-X-PR

媒體rtsp

rtsp協議簡介 老規矩,百科下咯。 RTSP(Real Time Streaming Protocol),RFC2326,實時流傳輸協議,是TCP/IP協議體系中的一個應用層協議,由哥倫比亞大學、網景和RealNetworks公司提交的IETF RFC標準

rtmp/rtsp/hls公網測試地址

相信大家在除錯播放器的時候,都有這樣的困惑,很難找到合適的公有測試源,以下是大牛直播SDK整理的真正可用的直播地址源。 hls的地址,用vlc驗證通過。 1. RTMP協議直播源 香港衛視:rtmp://live.hkstv.hk.lxdns.com/live/hk

RTMP,RTSP,HLS比較與分析

         考慮做一個手機直播系統,首先需要指定一個合理的技術方案。由於自己以前不是搞多媒體這塊,對流媒體開發不熟悉,自己的理解思維總習慣用java web開發的慣性走,先指定一個大體的框架。不管對還是錯,先考慮其技術可行性。          框架的指定,首先取決於

最簡單的基於Flash的媒體示例:網頁播放器(HTTP,RTMPHLS

                =====================================================Flash流媒體文章列表:=====================================================本文繼續上一篇文章,記錄一些基於Flas

媒體協議介紹(rtp/rtcp/rtsp/rtmp/mms/hls

RTP           參考文件 RFC3550/RFC3551          Real-time Transport Protocol)是用於Internet上針對多媒體資料流的一種傳輸層協議。RTP協議詳細說明了在網際網路上傳遞音訊和視訊的標準資料包格式。RTP

EasyPlayer開源流媒體移動端播放器推出RTSP-RTMP-HTTP-HLS全功能Pro版

EasyPlayerPro介紹 Android EasyPlayerPro專業版全功能播放器,是由EasyDarwin開源團隊維護的一款支援RTSP、RTMP、HTTP、HLS多種流媒體協議的播放器版本。Android上同時保留原來RTSP專用播放器,功能精煉

網路媒體協議的聯絡與區別(RTP RTCP RTSP RTMP HLS)

# 網路流媒體協議的聯絡與區別(RTP RTCP RTSP RTMP HLS) [toc] --- # 三句話簡結 ## RTP RTCP RTSP RTMP HLS區別與聯絡 **`RTP傳輸流媒體資料、RTCP對RTP進行控制,同步、RTSP發起/終止流媒體`** **`RTP和RTCP互為姐妹關

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

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

廣電電視信號如何生成RTMP進入媒體系統網絡分發實現手機APP播放

廣電電視信號 rtmp 手機app 流媒體直播 隨著網絡寬帶業務和數字電視的普及,家家戶戶都已經在用IPTV/OTT-TV的方式來看電視節目。但是從音視頻的畫面質量來看,廣電系統的電視信號質量最佳,可以真正實現1080P網絡電視畫面質量甚至是H.265 HEVC的4K超高清。 隨著技術的越來越

EasyNVR、EasyDSS二次開發---RTMPHLS在web頁面進行無外掛播放(demo)

不管是基於EasyNVR還是EasyDSS,都是支援無外掛直播,這也是未來視訊直播的一個趨勢。對於傳統的瀏覽器外掛播放誰用誰知道; 以上是軟體自帶播放展示 背景需求 對於EasyNVR和EasyDSS的使用方式大概分為兩大類,一

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

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

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

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

CentOS7下搭建基於Nginx的HLS,RTMP媒體直播伺服器

CentOS7下搭建基於Nginx的HLS,RTMP流媒體直播伺服器 安裝wget 更改yum源 安裝依賴庫 複製nginx-1.6.2.tar.gz、nginx-rtmp-module 安裝、編譯Nginx 編輯修改nginx.conf

媒體壓力測試rtmp&hls(含推和拉

[[email protected] ~]# yum install git unzip patch gcc gcc-c++ make [[email protected] ~]# git clone https://github.com/rzrobe