rtsp流浏览器播放方案

Python020

rtsp流浏览器播放方案,第1张

rtsp流在主流浏览器并不支持直接播放。比如大华的视频流:rtsp://admin:123456@

192.168.10.129/cam/realmonitor?channel=1&subtype=0,用vlc可以直接播放。但在浏览器会报ERR_UNKNOWN_URL_SCHEME。那如何在浏览器中播放呢。

以下列出几种方案。

1、安装插件(chrome最新版基本都不支持)

类如:kurento,vlc插件(谷歌浏览器版本41以下),vgx插件(不支持高版本,chrome72.0版本可用)等。

2、安装软件(中间件,基本都付费)

类如:Appemit(调用vlc插件播放rtsp),可以免安装的,目前只能windows,免费版会有提示。

猿大师中间件(底层调用VLC的ActiveX控件,实现在主流浏览器网页中内嵌播放多路RTSP的实时视频流),中间件收费的。

PluginOK(牛插)中间件。底层调用ActiveX控件VlcOcx.dll。(商业用途需付费使用)

3、服务器拉流转发及协议转换

示意图如下所示:

推流--------------服务器转发--------------拉流

方法一览:

a,vlc软件串流到http协议 ,网页显示几个视频需启动几个vlc,只适合应急场景。

b,html5 + websocket_rtsp_proxy 实现视频流直播 ,基于MSE(Media Source Extensions,W3C),扩展H5的功能。

步骤:服务器安装streamedian服务器,客户端通过video标签播放。

原型图:

价格:

c.基于nginx的rsmp转发

基于nginx实现rtmp转化,用flash实现播放。由于flash目前大多浏览器默认禁用,不推荐此方式。

步骤:安装ffmpeg工具,安装nginx。

另外nginx-rtmp-module也支持HLS协议,可以搭建基于hls的直播服务器。

d.rtsp转hls播放,通过ffmpeg转码

步骤:安装ffmpeg工具,ffmpeg转码。

形如:

ffmpeg -i "rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=0" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "D:/hls/test.m3u8"

缺点是直播流延时很大,对实时要求比较高的不满足要求。

案例:基于EasyDarwin拾建转码服务器。参考地址:https://blog.csdn.net/jyt0551/article/details/84189498

通过存储的m3u8去读取。

e.websocket代理推送,FFMPEG转码

此方法与a,b类似。但更实用。

以下提供两种方案:

(1)Gin+WebSocket+FFMPEG实现rtsp转码,参考:https://juejin.cn/post/6844904024072798216

通过FFMPEG把rstp转成http,ginrtsp作为转发服务器,但需要自己写相应接口,需要了解go语言。

(2)node + ffmpeg + websocket + flv.js,参考:https://juejin.cn/post/6908641550046068744

步骤:在node服务中建立websocket;通过fluent-ffmpeg转码,将RTSP 流转为flv格式;通过flv.js连接websocket,并对获取的flv格式视频数据进行渲染播放。

import WebSocket from 'ws'import webSocketStream from 'websocket-stream/stream'import ffmpeg from 'fluent-ffmpeg'// 建立WebSocket服务const wss = new WebSocket.Server({ port: 8888, perMessageDeflate: false })// 监听连接wss.on('connection', handleConnection)// 连接时触发事件function handleConnection (ws, req) {  // 获取前端请求的流地址(前端websocket连接时后面带上流地址)  const url = req.url.slice(1)  // 传入连接的ws客户端 实例化一个流  const stream = webSocketStream(ws, { binary: true })  // 通过ffmpeg命令 对实时流进行格式转换 输出flv格式  const ffmpegCommand = ffmpeg(url)    .addInputOption('-analyzeduration', '100000', '-max_delay', '1000000')    .on('start', function () { console.log('Stream started.') })    .on('codecData', function () { console.log('Stream codecData.') })    .on('error', function (err) {      console.log('An error occured: ', err.message)      stream.end()    })    .on('end', function () {      console.log('Stream end!')      stream.end()    })    .outputFormat('flv').videoCodec('copy').noAudio()  stream.on('close', function () {    ffmpegCommand.kill('SIGKILL')  })  try {    // 执行命令 传输到实例流中返回给客户端    ffmpegCommand.pipe(stream)  } catch (error) {    console.log(error)  }}

优点全部基于js。前端即可搞定。

参考:https://www.zhihu.com/question/29973696

面向底层,或高效率 用C:如单片机, 操作系统, 数据库实现

面向上层应用面向对象编程 C++ 高效率 : VC/ QT / GTK编程, 现在WPSlinux版是QT实现的

面向对象编程JAVA, Android, 网页脚本, 也能编写PC机应用比如freemind, 也有嵌入式方面的应用.

再就是网络动态语言, jsp/php/asp , jsp一般用于大型网站, php是开源较多,主要一般网站规模不大的在用, asp 好像不温不火,

比较流行的:go python 还要懂shell脚本编程,

面向硬件的有: VHDL/verilog

matlab:算法仿真

无论选哪种语言,商业开发基本上都会涉及到数据库, db2、oracle mysql好像比较出名

小型数据库sqlite,Android 就是用的这个

总之, 各有各的用处, 看你对哪方面感兴趣, 要学的有很多.

我是学嵌入式的,看一下我收集的嵌入式方面需要掌握的知识与技能:

=================================================================

Altium Designer 原理图和PCB制作

STM32处理器

需求分析、设计方案

嵌入式软硬件系统的设计、测试;

技术文档;

生产工艺技术支持。

-------------------------------------------------------------------

Linux平台下进行软件开发

音视频编解码SDK的进行封装

音视频流存储、传输模块,设计、实现、优化及测试

编写相关开发文档、技术支持文档、使用说明

=====

C/C++ 良好的编程习惯与文档规范;

Linux 下进程间通信及内存管理机制

熟悉H.264,G.7xx,AMR,AAC等音视频编码

熟悉MP4,avi等文件格式

熟悉rtsp/rtp、rtmp、http

海思或者amberalla平台

通和协调能力

----------------------------------------------------------------------------

熟悉1种以上数据库

--------------------------------------------------------------

机器人开发经历或参加机器人相关研究

熟悉Android framework,以及Linux驱动开发,调试,有QT程经验

熟练阅读电路原理图,以及PCB layout;

有效地对新人或普通开发工程师进行辅导

---------------------------------------------------------------------------

悉嵌入式环境下的 C/C++ 语言程序设计和汇编语言程序设计

精通个域网通信协议,如无线网络(Wi-Fi、BlueTooth、Zigbee等)等协议,具有智能家居产品相关经验

RM环境下的系统开发环境与工具,包括平台移植、驱动开发及调试,等等;

数字电路模拟电路基础,熟悉uCOS,Linux,RThread,FreeRTOS等嵌入式操作系统内核程序设计

深入掌握一种或几种嵌入式处理器系统(熟悉Arm、X86、PPC、MIPS)

---------------------------------------------------------------------------

WIFI模块

----------------------------------------

懂日语、32岁以下

-------------------------------------------------------------------------------------

bootloader、内核板级移植、集成。

海思或者amberalla平台开发经验

外设接口和通信协议,包括USB,CAN,LIN,TCP/IP等多种汽车和工业总线技术

无线通讯模块、蓝牙、GPRS、有线及无线通讯

物联网电子消费品产品开发经验

电气电子产品开发和项目管理经验

--------------------------------------------------------------------------------------

精通如下串行总线协议:USB/I2C/SPI/I2S/UART

悉Boot Loader,

具有Linux BSP经验者

具备良好沟通、协作、学习能力,能够主动在项目中承担起责任

写和移植内核设备驱动

裁剪和优化的Linux内核

----------------------------------------------------------------------------------

团队管理经验

硬件基本原理,能看懂原理图和PCB

精通linux内核架构,熟悉多线程编程

精通多种常用传输总线协议,如IIC、SPI、CAN、IIS;

对无线网络数据传输有较深了解;使用过无线传输模块,GPRS、3G等

WIFI驱动、WIFI应用、蓝牙驱动、蓝牙应用有较深的了解

对USB驱动有较深了解,做过USB设备驱动、对SD卡和TF卡

车载电子设备

熟悉视频、音频处理,熟悉视频、音频编解码处理;

熟悉安卓架构,能编写安卓中间件

ARM或DSP嵌入式软件开发经验

-----------------------------------------------------------------------------------------------

入式Linux系统体系结构设计,系统内核维护;

根据需求制定系统整体软件方案,划分软件模块;

优化uboot、Linux内核相关模块

深入了解ARM(Cortex-A8以上)体系结构

常用驱动程序及相关协议,如:Framebuffer、以太网、USB、CAN总线、I2C、SPI等。可以对驱动程序进行深度的优化;

对视频/图像有较深刻认识,了解视频/图像编解码相关知识;

使用OPenGL完成图像渲染;

负责研究和开发3D引擎到Opengl的标准化接口;

深入理解QT底层实现机制。熟悉QT在不同平台之间的移植

Ti/Freescale ARM开发经验

认真对待每一项工作,同事之间团结互助;

良好的英文交流能力

--------------------------------------------------------------------------------------------

熟悉wifi,nrf2401,camera,audio 等外围模组及相关协议

熟悉ucos—2

智能家居方面的实际开发经验

----------------------------------------------------------------------------------

单片机、ARM、Cotrex-M3/M4等处理器

掌握网络、UART、LCD、SPI、I2C、RS485

搭建嵌入式Linux软硬件系统

熟悉Linux内核机制

熟练完成嵌入式下linux的驱动开发与应用开发。

熟悉TCP/IP协议栈,Socket通信编程

熟悉HTTP、SNMP、DHCP等应用层协议。

CAN总线、WIFI、Zigbee等相关产品开发经验

良好的语言表达沟通能力和团队合作精神

------------------------------------------------------------------------------------

broad expertise

-----------------------------------------------------------------------------------------

具有linux,freeRTOS等主流嵌入式系统开发经验

熟悉TCP/IP、WIFI、蓝牙BLE、I2C等协议

有音频、Andorid开发、Java虚拟机、云端数据同步、智能家居产品等开发经验

嵌入软件, 驱动,协议栈,协议开发经验

精通TCP/IP协议

用网络协议,了解防火墙, 路由交换技术

无线协议802.11,802.1X

熟悉Wi-Fi、ZigBee、蓝牙,模拟信号、UART、RS232、RS485、各种现场总线、HART-IP、TCP/IP、OPC、OPC UA、BACNet等协议

立志于一起打造互联网+工业。

---------------------------------------------------------------------------------------------

熟悉8583、EMV、PBOC等相关行业知识

3年以上 嵌入式 Linux 驱动开发经验

读懂硬件图纸

熟练掌握 i2c、i2s、spi、gpio、uart、usb、lcd/framebuffer 等常用 Linux 驱动

Linux 中断程序开发;

电机控制驱动、Linux系统管理、系统版本升级 等开发经验

---------------------------------------------------------------------------------------------

雷达、超声项目相关的研发

扎实全面的硬件电路设计、调试能力,熟悉模拟、数字及混合电路;

拥有DSP(TI TMS系列为佳),ARM, FPGA/CPLD 设计经验;

解决并优化整体系统的信噪比、电磁屏蔽、能耗管理和热耗散管理

熟悉PCB 布线,制版和调试

有担任规模量产项目技术研发经历

掌握交叉编译环境、熟练典型Linux系统调用和应用程序开发

熟练掌握至少一种版本管理工具(如:SVN、GIT等);

对Linux系统内核及驱动程序有深入理解

对Linux内核进行深度定制和修改

------------------------------------------------------------------------------------------------

熟悉uC/OS下Camera,LCD、WIFI、RIL、IIC、SPI、UART、2G、各类型Sensor等各种外设驱动驱动模型

做过传统单片机 pos 机 或类似stm32 pos机项目经验

熟悉PBOC协议

能够使用示波器和逻辑分析仪等

--------------------------------------------------------------------

C/C++ 网络及多线程编程

熟悉OpenWrt开发,移植

悉Qualcomm SDK者优先,有一定的算法基础,

----------------------------------------------------------------

用有电子工具软件PROTEL\PADS等

网关产品,协议转换类产品编程经验

精通TCP/IP,ZIGBEE,MQTT协议,了解至少一种工业总线;

能独立承担产品的设计规划,周边接口硬件电路设计,功能软件设计;

---------------------------------------------------------------------

熟悉C/C++/JAVA/J2ME语言编程

入式Linux操作系统,Linux驱动开发

精通Android开发平台及Framework框架原理

熟悉基本无线协议;

责任心和进取心

团队协作

善于沟通和表达

独立设计优化和移植HAL层外设模块,如Camera、WiFi、蓝牙、触摸屏等模块;

将Android系统移植到特定硬件平台上

给上层app及UI开发提供支持

--------------------------------------------------------------------------

移植和底层驱动

熟悉Linux内核架构

Makefile、shell等脚本语言

熟悉RTP,RTCP,RTSP等流媒体协议

熟练使用Ethereal、Wireshark和Tcpdump等网络协议分析工具

DVR、MDVR、DVS等监控产品开发经验

-------------------------------------------------------------------------

产品的规划设计、安卓等平台的底层驱动程序编写调试

主板调试及外设调试,确保项目中驱动部分的质量和进度

独立完成各业务模块的驱动开发工作以及技术难题攻关、技术评估;

模块的需求分析、详细设计、编码实现、和单元自测,参与产品需求分析并制定技术实施方案,根据产品功能需求设计并完成软件实现,了解项目需求和业务流程。

2年以上单片机系统软件开发经验,2年以上的Android系统软件驱动开发经验(有成熟产品移植开发经验),有WINCE平台开发经验更佳;

uboot、kenel Driver开发以及HAL层等开发、调试和集成工作

熟悉ARM系列处理器架构,包括简单的ARM处理器(Cortex-M3/M0)和复杂的多核ARM处理器的应用设计经验;

无线网络数据传输有较深了解;使用过无线传输模块,GPRS、3G等;

对USB驱动有较深了解,做过USB设备驱动、对SD卡和TF卡等实际应用上有独到的心得体会或做过车载电子设备

够独立解决各类底层疑难问题,能够同硬件和软件应用工程师一起合作解决复杂问题;

责任心,主动学习,团队沟通协作,文档输出, 英语读写

---------------------------------------------------------------------------------

精通Wifi协议及应用开发,熟悉博通与MTK系列wifi芯片;

熟悉TCPIP协议,熟悉HTTP、FTP等网络协议应用和开发

熟悉Wifi、射频产品的生产和测试

必须有broadcom、Atheros或MTK的一种wifi方案经验

自我驱动的学习和工作习惯

对未知技术和领域能快速掌握并实践

沟通、协调, 项目管理、团队管理

---------------------------------------------------------------------------------------

Socket编程,多线程编程,进程间通信

熟悉TCP/IP协议;熟悉HTTP,UDP/RTP/RTCP/RTS等流媒体传输与控制协议;

熟悉音视频压缩技术

------------------------------------------------------------

悉实时操作系统如ThreadX,FreeRTOS

熟悉串口,TCPIP协议,WIFI,GPIO,JTAG等底层编程

家电无线模块软件开发

不同硬件平台选型开发

撰写并维护相关技术文档

-----------------------------------------------------------------------

通32 bit ARM单片机系统开发,熟悉Atmel芯片

精通uCOSII系统,有相关开发经验

OS(uCOSII与Linux)移植、驱动编写与应用软件开发

------------------------------------------------------------------------

主流单片机、ARM、FPGA硬件平台

熟悉VHDL/Verilog语言进行FPGA开发;

有效实现板级系统间数据通讯,

了解卫星通讯协议

熟悉使用LabView进行数据采集和系统测试

独立进行PCB开发并联系相关厂家进行生产

熟悉中国电子信息产业链,不仅懂得怎样设计, 还要知道怎样利用现有市场产品, 经济快速有效地实现自己的设计

了解电子产品国际市场, 能够从市场角度去开发产品;

英语能力可以应付国际化工作环境, 能够熟练使用法语德语更好。

在本专业领域内有丰富人脉,能够在全世界范围内为具体问题找到合适的人;