当前位置: 首页 > news >正文

02-Media-6-rtsp_server.py 使用RTSP服务器流式传输H264和H265编码视频和音频的示例程序 - 详解

rtsp_server.py 是使用k230的板载摄像头和WIFI联网功能,使用RTSP服务器流式传输视频和音频的程序示例。程序核心是创建了一个RtspServer类,该类用于初始化、启动、停止RTSP服务器,并进行视频和音频的流传输。

一、首先,程序导入必要的模块,包括视频编码、传感器、媒体处理等相关模块,以及时间、操作系统、线程等标准模块。

from media.vencoder import *      # 视频编码相关
from media.sensor import *        # 摄像头传感器控制
from media.media import *         # 媒体处理核心功能
import time, os                   # 系统功能
import _thread                    # 多线程支持
import multimedia as mm           # 多媒体功能
from time import *                # 时间相关功能

二、RtspServer类

初始化方法接受以下参数:会话名称、端口号、视频类型和是否启用音频。

默认情况下参数设置如下:会话名称为"test",端口为8554,视频类型为H264,不启用音频。

class RtspServer:
def __init__(self,session_name="test",port=8554,video_type = mm.multi_media_type.media_h264,enable_audio=False):
self.session_name = session_name # session name
self.video_type = video_type  # 视频类型264/265
self.enable_audio = enable_audio # 是否启用音频
self.port = port   #rtsp 端口号
self.rtspserver = mm.rtsp_server() # 实例化rtsp server
self.venc_chn = VENC_CHN_ID_0 #venc通道
self.start_stream = False #是否启动推流线程
self.runthread_over = False #推流线程是否结束

start方法用于启动RTSP服务器。它首先初始化流(_init_stream),然后初始化RTSP服务器并设置端口,创建会话,启动RTSP服务器,启动流(_start_stream),最后启动一个线程来执行实际的流传输(_do_rtsp_stream)。

def start(self):
# 初始化推流
self._init_stream()
self.rtspserver.rtspserver_init(self.port)
# 创建session
self.rtspserver.rtspserver_createsession(self.session_name,self.video_type,self.enable_audio)
# 启动rtsp server
self.rtspserver.rtspserver_start()
self._start_stream()
# 启动推流线程
self.start_stream = True
_thread.start_new_thread(self._do_rtsp_stream,())

stop方法用于停止RTSP服务器。它首先停止流传输线程,然后等待线程结束,接着停止流(_stop_stream),停止RTSP服务器,并释放资源。

def stop(self):
if (self.start_stream == False):
return
# 等待推流线程退出
self.start_stream = False
while not self.runthread_over:
s
http://www.jsqmd.com/news/934/

相关文章:

  • 深入解析:敏捷开发-Scrum(下)
  • RTX4090双卡本地布署QwenImage模型并生成OpenAI API - yi
  • Visual Studio 报错:“9_自定义命令”名称在默认命名空间“9_自定义命令”中无效。请更正项目文件中的 RootNamespace 标记值。
  • ubuntu22.04下搭建iRedMail邮件服务器 - 实践
  • 图解23:datetime和timestamp的区别
  • 深入解析:SQL语句优化的步骤详解
  • 在Java中识别泛型信息
  • Kali Linux 光标与快捷键全攻略
  • 图解22:扩展系统的最佳8种策略
  • Winform项目添加WPF
  • 本地免费使用网页表格控件websheet
  • 图解21:Redis为什么这么快
  • 图解20:API接口12种安全措施
  • Docker - ZZH Ubuntu Image - Desktop
  • C#文件操作入门
  • Java课前问题列表-面向对象入门2与类的识别
  • ES——(一)基本概念 - 指南
  • 意义感是完全主观的
  • python2.7+pandas
  • SAP集成HTTP接口(x-www-form-urlencoded格式)
  • iText与OpenPDF使用差异及中文处理完全指南 - 实践
  • 图解17:5中网络IO模型
  • 【session反序列化】 - 指南
  • Fmt库在CentOS 7的应用指南
  • 在k8s集群中解决master节点与node通信
  • 在Go中构建应用级IP防火墙机制
  • PCIe 8.0 v0.3草案公布:SSD硬盘能飙1TB/s速度
  • 用 R 语言实现验证码识别
  • 用 Lua 实现验证码识别
  • 完整教程:【RabbitMQ】-----详解RabbitMQ高级特性之消息确认机制