html5_rtsp_player教程,GitHub - Streamedian/html5_rtsp_player: html5 player for rtsp stream

Overview

Streamedian is a Javascript library which implements RTSP client for watching live streams in your browser

that works directly on top of a standard HTML

4abe8412f747213559c66efbf6981193.png

It works by muxing RTP H264 and AAC payload into ISO BMFF (MP4) fragments.

Streamedian is written using ECMAScript 2015 standard.

Live test stream

Browser support (ES5 transpiled version):

Firefox v.42+

Chrome v.23+

OSX Safari v.8+

MS Edge v.13+

Opera v.15+

Android browser v.5.0+

IE Mobile v.11+

Not supported in iOS Safari and Internet Explorer

Install

npm install git://github.com/Streamedian/html5_rtsp_player.git

Usage

Browser side

Attach HTML Video with RTSP URL

or

You can ignore source by passing data-ignore="true":

If browser can play that source, player will not be initialized for this element.

Setup player in your js:

import * as streamedian from 'streamedian/player.js';

// import WebsocketTransport from 'wsp/transport/websocket';

// import RTSPClient from 'wsp/client/rtsp/client';

let mediaElement = rtsp.attach(document.getElementById('test_video'));

let player = new streamedian.WSPlayer(mediaElement, {

// url: `${STREAM_URL}`, // overrides mediaElement's sources

modules: [

{

// client module constructor. Should be subclass or BaseClient. RTSPClient by default

// client: RTSPClient,

transport: {

// client module constructor. Should be subclass or BaseTransport. WebsocketTransport by default

// constructor: WebsocketTransport,

options: {

// address of websocket proxy described below. ws${location.protocol=='https:'?'s':''}://${location.host}/ws/ by default

socket: "ws://websocket_proxy_address/ws",

// function called player exceptions

errorHandler (e) {

alert(`Failed to start player: ${e.message}`);

},

// function to get credentials for protected streams

queryCredentials() {

return new Promise((resolve, reject)=>{

let c = prompt('input credentials in format user:password');

if (c) {

this.setCredentials.apply(this, c.split(':'));

resolve();

} else {

reject();

}

});

}

}

}

},

]

});

ES6 Modules support is required. You can use rollup to build this script:

rollup.config.js

import buble from 'rollup-plugin-buble';

import alias from 'rollup-plugin-alias';

const path = require('path');

export default {

entry: path.join(__dirname, 'example.js'),

targets: [

{dest: path.join(__dirname, 'example/streamedian.js'), format: 'es'}

],

sourceMap: true,

plugins: [

// uncomment if you want to transpile into es5

//buble({

//exclude: 'node_modules/**'

//}),

alias({

bp_logger: path.join(__dirname,'node_modules/bp_logger/logger'),

bp_event: path.join(__dirname,'node_modules/bp_event/event'),

bp_statemachine: path.join(__dirname,'node_modules/bp_statemachine/statemachine'),

//jsencrypt: path.join(__dirname,'node_modules/jsencrypt/src/jsencrypt.js'),

streamedian: path.join(__dirname,'src')

})

]

}

> npm install bp_event bp_logger bp_statemachine

> rollup -c

Include compiled script into your HTML:

RTSP Authentication

Streamedian player support both basic and digest authentication. Authentication type is detected automatically

when you connect to the stream.

You can directly specify user/password in rtsp url in form rtsp://username@password:stream.url/resource/

or pass queryCredentials() function to streamedian.WSPlayer. This function in order

should return promise that call this.setCredentials(user, password).

Server side

Install websocket proxy

Sign up and install websocket proxy from http://streamedian.com

Register domain you want to use this player

Download license file to your server

Note that this package depends on systemd and gcc5+ runtime so it can be installed

only on recent distribution versions.

Configure port and license file path in /etc/ws_rtsp.ini

This port should be open in your firewall. Also you can pass request to this port from your proxy. (for example: http://nginx.org/en/docs/http/websocket.html)

Run it

> service ws_rtsp start

Player architecture

Player comprises three main modules: transport, client and remuxer.

Transport responsible for data delivery and data queuing. It should fire connected, disconnected and data events.

As soon data received, transport should push it into dataQueue and fire data event. Base class for transports can be found in core/base_transport.

As a default, WebsocketTransport that relies on websocket proxy is implemented.

Client listens for data events, parse it into elementary stream packets and enqueue parsed data into it's own queue. Client can

pass queued buffer to remuxer with samples event. To identify stream track client should fire tracks event. When ready, flush

event can be used to construct media fragment and pass it to video presenter. Base class for transports can be found in core/base_client.

Default client is RTSP client over websocket transport.

Remuxer prepares media fragment for video presenter and push it. There is only video presenter at the moment, based on media source extensions.

Remuxer collects data into mp4 media fragments (moof+mdat) and pass it into source buffer.

How RTSP proxy works?

RTSP player establish connection with proxy with following protocol:

Connect to RTSP channel by connecting websocket with "rtsp" protocol specified and get connection id

c>s:

WSP/1.1 INIT\r\n

seq:

host: \r\n

port: \r\n\r\n

s>c:

WSP/1.1 200 OK\r\n

seq:

channel: \r\n\r\n

Error codes >= 400 means error

Connect to RTP channel by connecting websocket with "rtp" protocol

c>s:

WSP/1.1 JOIN\r\n

seq: \r\n

channel: \r\n\r\n

s>c:

WSP/1.1 200 OK\r\n

seq: \r\n\r\n

Error codes >= 400 means error

Send RTSP commands wrapped into WSP protocol:

c>s:

WSP/1.1 WRAP\r\n

seq: \r\n

\r\n

s>c:

WSP/1.1 200 OK\r\n

channel: \r\n

\r\n

Error codes >= 400 means error

RTP channel should send interleaved data with 4 byte header ($). Separate RTP is not supported at this moment

Load balancing

RTSP proxy does not support load balancing itself but can be easily integrated with such load balancers like nginx.

You can start multiple instances of proxy on different sockets and configure nginx upstreams.

576e9f1637a84039c77a727bd381e5db.png

Have any suggestions to improve our player?

Feel free to leave comments or ideas streamedian.player@gmail.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值