最近要搞一个直播服务,车机本身是个前后双路的Dvr,前路1080P 25fps,后路720P 50fps,现在要连接手机app预览实时画面,且支持前后摄像头画面切换。

如果要做直播,这个分辨率和帧率是非常艰难的,必须降低,经过考量之后先设定为480P 25fps,编码码率为512k看看效果再做优化。

研究了一段时间的live555,里面有很多demo可以参考,但是我这个需求和里面demo的效果有比较大的差异

因为要做实时直播,必须是实时的摄像头数据,所以没法用rtspServe播放视频文件的方式来实现,。

换一个思路可以在rtspServe里面自己去打开摄像头获取数据,移植x264进行编解码再直播,但是因为Dvr占据了两个摄像头进行录像,无法腾出来,所以其他用户无权再开启摄像头。

rtspServe需要摄像头数据只能从Dvr获取,如此则需要一套进程间通信机制,而且要能承载大数据量的通信。可以考虑用有名管道或者共享内存。

基于此模式,我又有两个不同的直播编码方式,

方式一 独立编码直播流

rtspServe只从Dvr获取YUV原始数据,自己采用X264对每一帧进行编码,然后推流。

优点:

1、独立性,可以独立于Dvr的数据,自己单独设置编码参数,同时直播过程可控性强,比如遇到网络阻塞可以自由丢原始数据帧。

2、灵活性,直播服务器自由控制。

缺点:

1、YUV原始数据很大,通信压力大。

2、需要使用x264进行软编码,软编码时效未知。

方案二、采用录像编码数据分流

Dvr是一直在编码录像的,但是是一段一段的录制,可以从Dvr编好的数据流在保存文件的同事开一个分支共享给直播

优点:

1、失效高,录像编码采用硬件编码的,一直用来录像编码,已经经过长期的验证。

2、共享数据量小,共享数据是编码好的相比于YUV原始数据会小很多。

缺点:

1、编码的各项参数必须是和录像一样的,没法独立调节。

2、直播过程受录像影响,比如开始录像停止录像,意味着编码数据的开关。

以上两个方案个人更倾向于第一个,但是我最担心的就是x264的软编码时效是否能跟上,于是单独先移植了x264弄了个demo验证,果然x264乱编码的时效性太低了,码率设置在200k也没法跟上这么大分辨率这么高帧率的数据编码,一秒钟的视频数据需要编码两三秒,所以只能走第二个方案。

走方案二需要解决的只剩下rtspServer了,我需要实现一个自己的rtspServer,从管道获取编码数据然后推流

参考live555里面的testProgs

我们需要实现自己的几个文件类

1、实现自己的FrameSource:

FrameSource主要完成从哪里获取数据流(文件或者其他地方),怎么获取数据流等。

2、实现自己的MediaSubsession

这个类主要是根据自己的source数据类型,建立不同的RTPSink和FrameSource

3、实现自己的rtspServer主函数

可以参考testOnDemandRTSPServer实现,把不要的各种类型的rtsp删除掉(mp3、mp4、wav、vob),只保留自己的。

经过几天的倒腾测试基本把rtspServer的通路打通了,app能正常播放,效果后续优化。

基于live555开发嵌入式linux系统的rtsp直播服务的更多相关文章

  1. 基于ARM9和嵌入式Linux系统的多功能综合通信控制系统的框架

    基于ARM9硬件平台和嵌入式Linux系统的多功能综合通信控制系统的框架设计及各模块的功能.系统采用符合POSIX.1标准的C语言编写,实现了对下位机传送数据帧的采集.分析和存储,并能根据上位机的配置 ...

  2. 基于s5pv210嵌入式linux系统sqlite3数据库移植

    基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...

  3. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  4. 嵌入式linux系统应用开发

    关于嵌入式系统   平时大家说的嵌入式其实范围比较广的,是一种软硬件可裁剪,以应用为中心开发的专用系统,硬件平台可以是单片机,或者以ARM系列的处理器.单片机一般直接裸奔程序,不过现在有了好多基于单片 ...

  5. ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

    本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件 我想如果要从PC ...

  6. 4种用于构建嵌入式linux系统的工具_转

    转自:4种用于构建嵌入式linux系统的工具 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备.令人震惊的支持了各种芯片,使得Linux 可以应用于大大小小 ...

  7. CH02基于ZYNQ的嵌入式LINUX移植

    CH02基于ZYNQ的嵌入式LINUX移植 1.1概述 实验环境: Windows 10 专业版 Vmware workstation 14.1.1 Ubuntu 16.04.3 Xilinx SDx ...

  8. 浅析嵌入式Linux系统的构成和启动过程

    在我们的周围,大量的嵌入式设备都是基于Linux系统来构建的,嵌入式Linux与主机Linux相比有着自己的一些特点,本文就嵌入式Linux系统的构成和启动过程做一些总结. 一.嵌入式Linux系统构 ...

  9. 嵌入式linux系统的构建

    前期工作:a.配置好tftp服务器:在嵌入式的童年中有介绍 b.开发板可以pc,linux 三者可以互相ping通 c.配置好nfs服务器:同样在嵌入式的童年中有介绍 一.嵌入式linux内核的制作( ...

随机推荐

  1. 图的遍历BFS广度优先搜索

    图的遍历BFS广度优先搜索 1. 简介 BFS(Breadth First Search,广度优先搜索,又名宽度优先搜索),与深度优先算法在一个结点"死磕到底"的思维不同,广度优先 ...

  2. 学习PHP中国际化地数字格式处理

    不知道大家有没有了解过,对于数字格式来说,西方国家会以三位为一个进位,使用逗号来分隔.比如,12345678,用标准的格式来表示的话就是 12,345,678 .不过我们中文其实并不会有这样的分隔符, ...

  3. 全面分析 Vue 的 computed 和 watch 的区别

    一.computed介绍 computed 用来监控自己定义的变量,该变量在 data 内没有声明,直接在 computed 里面定义,页面上可直接使用. //基础使用 {{msg}} <inp ...

  4. JDK1.8源码(四)——java.util.Arrays类

    一.概述 1.介绍 Arrays 类是 JDK1.2 提供的一个工具类,提供处理数组的各种方法,基本上都是静态方法,能直接通过类名Arrays调用. 二.类源码 1.asList()方法 将一个泛型数 ...

  5. 最推荐的抓包工具charles

    Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一个开发者查看所有连接互联 ...

  6. php环境 安装

    php 相关 wget https://www.php.net/distributions/php-7.2.16.tar.gz //你可以官网获取最新的包        tar解压    //一般目录 ...

  7. P4922-[MtOI2018]崩坏3?非酋之战!【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4922 题目大意 题目好长直接放了 在崩坏 3 中有一个叫做天命基地的地方,女武神们将在基地中开派对与敌人们厮杀. ...

  8. 使用node-gyp编写简单的node原生模块

    通过样例,让我们了解如何编写一个node的原生模块.当然,这篇文章还有一个目的,是为了方便以后编写关于node-gyp的文章,搭建初始环境. 基于node-addon-api 基于node-addon ...

  9. Conda 命令

    Conda 命令 1 检验当前conda的版本 conda -V 2 conda常用的命令 查看已有的虚拟环境 conda env list 创建虚拟环境和删除虚拟环境 anaconda命令创建pyt ...

  10. pta天梯训练赛补题

    7-1谁先倒 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒.两人 ...