用Darwin和live555实现的直播框架

2024-02-22 03:58

本文主要是介绍用Darwin和live555实现的直播框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们在开发视频直播或者监控类项目的时候,如场馆监控、学校监控、车载监控等等,往往首先希望的是形成一个项目的雏形,然后再在这个框架的基础上进行不断的完善和扩展工作,那么我们今天要给大家介绍的就是,如何形成一个这样的框架:

采集本地音视频数据(Win) -->视频分发服务器-->客户端随意接入

大致流程:我们首先通过DShow采集Windows(XP、Win7经过测试)主机的视频设备(Camera)和音频设备(Mic)的音视频资源,经过live555的RTSP推送流程和RTP封包过程,将直播数据推送给Darwin分发服务器,Darwin分发服务器接收live555的推送数据并做相应的缓存(超过缓存时间的数据将会被移除),同时响应客户端的接入,将推送来的直播数据转发给客户端。

设备采集端:采集端是以live555为基础框架,以DarwinInjector做为与Darwin交互的接口,再在live555 Source端分别实现CamH264VideoStreamFramer(H264视频)和AudioInputMicDevice(AAC音频)的数据源。


当然,在采集和发送数据之前,我们需要进行的是与Darwin服务器之间的信令通道交互,这里我们采用的是RTSP标准的Announce(SDP payload)、Setup、Play过程,让Darwin服务器端建立转发类(主要是在QTSSReflectorModule中),等待RTP数据的推送。

设备采集端代码:http://pan.baidu.com/s/1y1E8s 

转发服务器:转发服务器是RTSP服务器Darwin Streaming Server,在之前的博客:基于DSS的推送式转发已经描述了RTSP标准推送流程,这里只说明一点小小的修改,就是在Darwin中,当设备端意外断线,也就是不经过标准的RTSP Teardown流程就与服务器断开的话,服务器端将会等待设备推送超时才会释放转发资源,那么对于这一点,我们做了一个小小的更改,这个在:Darwin推送端断开的处理问题中已经描述了。那么最新代码的下载可以到EasyDarwin开源项目中去获取:https://github.com/xiejiashu/EasyDarwin,后续对Darwin的扩展,如分布式RTSP服务器、RTSP直播服务器、服务器端录像、Hint模块等功能,都会在这个开源项目中加入,希望有兴趣的朋友加入到这个开源项目组中来。

客户端端:客户端当然不用太多描述,标准的RTSP流播放器都能播放Darwin视频,不过如果有想开发RTSP客户端的朋友,也可以加入到讨论群中(288214068)。


框架扩展:在上述的流程中,我们是在采集程序一开启时,就开始向Darwin服务器推送数据,那么在通常情况下,点播或者直播通常都是On Demand的形式,就是说,只有有需要的时候,我们才推送视频给服务器,没有需要的时候,设备处在空闲状态的,那么我们可不可以在上述的框架上做到这一点呢?当然可以!


如上图,我们可以先在设备端,开启一条tcp通道,连接到Darwin服务器,Darwin服务器中扩展一个管理模块,专门管理与设备的通信与接入,这样,在服务器不需要设备数据的时候,只与设备保持信令通道的连接和畅通就可以了,当有需要设备当前音视频数据的时候,就通过这条信令通道发送开启命令,采集设备收到命令(自定义命令),就开始本地采集、编码、打包和RTP传输流程,RTP通道可以与信令通道公用也可以单独建立,不过建议还是单独建立的好。当服务器端对此设备分发的客户端数量为0或者其他更高级的需求来到时,可以通过信令通道,发送停止命令到采集设备,这样采集设备就停止本地采集、编码等工作,进入最开始时候的空闲等待状态。如此,就实现了实时视频的点播效果。当然,图中的转发模块与管理模块可以在同一个程序里面开发,也可以分开,分为管理服务器和转发服务器。

这篇关于用Darwin和live555实现的直播框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734055

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont