EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒體服務器版本打包方法介紹

EasyDSS流媒體解決方案是一套集流媒體點播、轉碼、管理、直播、錄像、檢索、時移回看於一體的一套完整的商用流媒體解決方案。EasyDSS軟件以壓縮包的形式提供給客戶使用,同時支持Linux和 Windows兩個平臺。其中Linux平臺打成tar包, Windows平臺打成zip包。通過 Node.JS 運行打包腳本, 實現了打包過程的自動化。

本篇博文將從EasyDSS版本打包方式展開說明

1、打包核心庫 archiver

用到一個打包的核心庫 archiverjs, 這個 archiver 庫, 支持 glob 表達式, 可以非常方便的指定 需要打包哪些文件和目錄排除哪些文件和目錄. 關於 arhiver 對 glob 的支持, 可以點擊這裏查看. archiver 功能強大到可以指定工作目錄 cwd, 給壓縮包指定前綴目錄 prefix.

2、 字節大小格式化輸出

pretty-bytes 一個將字節大小格式化成 human-readable 的庫. 方便在壓縮過程中顯示進度信息.

3、 commander 命令行工具

commander 結合 tj 創作的這個命令行工具, 快速生成一個打包的命令, 並將打包的格式做成命令行選項.

以下是執行 node release.js -h 輸出

 Usage: release [options] [command]


 Options:

-V, --version           output the version number
-F, --format [tar,zip]  archive format [tar]
-h, --help              output usage information


 Commands:

clean

4、 完整的打包腳本

const archiver = require('archiver');
const prettyBytes = require('pretty-bytes');
const os = require('os');
const path = require('path');
const fs = require('fs');
const program = require('commander');

var dir = path.basename(__dirname);

function doArchive() {
    switch (program.format) {
        case 'zip':
            var output = fs.createWriteStream(`${__dirname}/${dir}.zip`);
            var archive = archiver('tar', { zlib: { level: 9 } })
            break;
        case 'tar':
            var output = fs.createWriteStream(`${__dirname}/${dir}.tar.gz`);
            var archive = archiver('tar', { gzip: true });
            break;
        default:
            console.log('unknow format');
            program.help();
            break;
    }
    output.on('close', function () {
        console.log(os.EOL + prettyBytes(archive.pointer()) + ' total bytes');
    });
    archive.on('warning', function (err) {
        if (err.code === 'ENOENT') {
            console.log(err);
        } else {
            throw err;
        }
    }).on('error', function (err) {
        throw err;
    }).on('progress', data => {
        process.stdout.clearLine();
        process.stdout.cursorTo(0);
        process.stdout.write(`${prettyBytes(data.fs.processedBytes)} / ${prettyBytes(data.fs.totalBytes)}`);
    })

    archive.pipe(output);
    archive.glob(`**`, {
        cwd: path.resolve(__dirname, "dist"),
        dot: true,
         ignore: ['logs/**/*', 'temp/**/*']
    },{
        prefix: dir
    })
    console.log(`do ${program.format} ...`);
    archive.finalize();
}

program.version(require('./package.json').version)
    .option('-F, --format [tar,zip]', 'archive format [tar]', 'tar')

program.command('clean').action(function () {
    if(fs.existsSync(path.resolve(__dirname, `${dir}.zip`))){
        fs.unlinkSync(path.resolve(__dirname, `${dir}.zip`));
    }
    if(fs.existsSync(path.resolve(__dirname, `${dir}.tar.gz`))){
        fs.unlinkSync(path.resolve(__dirname, `${dir}.tar.gz`));
    }
    console.log('clean done.');
    process.exit();
}) 

program.command('*', '', {
    noHelp: true
}).action(function () {
    program.help();
})

program.parse(process.argv);

doArchive();

適用場景

1、現場直播

攝像機或其它設備實時採集到的現場畫面,通過編碼器或編碼軟件推送到直播服務器分發,用戶即可通過PC、手機、平板電腦等多種終端實時觀看現場直播內容。常用於年會、發佈會、政企會議等的網絡直播。

EasyDSS
2、網絡電視

實現傳統電視臺的網絡播出,支持多平臺多終端的直播觀看及時移回看。

EasyDSS

3、遠程監控

配合網絡攝像頭可實現遠程視頻監控,終端用戶可以通過PC、手機、平板電腦等多種終端實時觀看遠程畫面,並可以把監控畫面錄製下來隨時回看或分享。廣泛應用於寶寶在線、家居安全、公共安防等方向。

EasyDSS

4、實時課堂

應用於遠程課堂直播,讓不在現場的人也能實時學習優質課程。支持時移,可以隨時回看任意時間的課程。
EasyDSS

5、科研方向

應用於農業、養殖業、科學實驗等跨區域場景研究。

EasyDSS

關於EasyDSS

EasyDSS流媒體解決方案採用業界優秀的流媒體框架模式設計,服務運行輕量、高效、穩定、可靠、易維護,支持RTMP直播、RTMP推送、HTTP點播、HTTP-FLV直播、HLS直播,並支持關鍵幀緩衝,畫面秒開等多種特性,能夠接入Web、Android、iOS、H5、微信等全平臺客戶端,是移動互聯網時代貼近企業點播/直播需求的一款接地氣的流媒體服務器,配套OBS、EasyRTMP等直播推流工具以及EasyPlayer等網絡播放器,可以形成一套完整的視頻直播、錄播解決方案,滿足用戶在各種行業場景的流媒體業務需求。

EasyDSS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章