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

asp网站制作工具网站建设能给客户带来什么

asp网站制作工具,网站建设能给客户带来什么,旧宫做网站的公司,wordpress建站最低配置一、前言 项目中对摄像头的实时画面进行一些处理后,有需求将处理后的画面进行编码并推流,然后在其他设备上可以直接拉流播放,所以需要我们直接使用 C API 进行推流操作了。 由于我这边服务端的设备是 RK3588 的开发板,推荐是使用…

一、前言

项目中对摄像头的实时画面进行一些处理后,有需求将处理后的画面进行编码并推流,然后在其他设备上可以直接拉流播放,所以需要我们直接使用 C++ API 进行推流操作了。

由于我这边服务端的设备是 RK3588 的开发板,推荐是使用 MPP 库进行编码,它会直接使用 VPU 设备进行硬编码,性能会好很多。所以方案计划为:

  1. 使用 mpp 进行单独的硬编码,将YUV数据编码为H264数据;
  2. 使用 ffmpeg 把编码好的H264数据写入到服务端;
  3. 使用 mediamtx 作为服务端,管理写入的H264数据以及和客户端的连接等。

二、Mediamtx 下载和运行

1. 下载

官方仓库:https://github.com/bluenviron/mediamtx,里面有详细的使用文档介绍。

下载链接:https://github.com/bluenviron/mediamtx/releases

上述下载链接中有已经编译好的程序,稍微往下滑一下就可以看到下载链接了,在 Assets 标签下,直接下载解压就可以使用了,注意不要下载错就行,比如我的系统是 Linux arm64 位的系统,就应该下载 mediamtx_v1.13.1_linux_arm64.tar.gz

2. 运行

解压后有一个 mediamtx 的可执行文件和一个 mediamtx.yml 配置文件。直接运行可执行文件即可。

./mediamtx

这个服务就保持在后台常驻运行就好。

三、FFmpeg 代码编写

1. 下载

关于 ffmpeg 的下载、编译、安装文章比较多,这里不再过多介绍了。

2. 头文件

#pragma once#include <string>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}class FFmpegServer {public:// url是推流的目标地址FFmpegServer(const std::string& url, int width, int height, int fps);~FFmpegServer();bool initialize();// data是已经编译好的h264数据// is_key_frame标识是否是关键帧bool pushFrame(const uint8_t* data, size_t size, int frame_count, bool is_key_frame);private:std::string rtsp_url;int frame_width;int frame_height;int frame_rate;AVFormatContext* fmt_ctx = nullptr;AVStream* stream = nullptr;
};

3. 源代码

#include "FFmpegServer.hpp"#include "stdio.h"
extern "C" {
#include <libavutil/opt.h>
}FFmpegServer::FFmpegServer(const std::string& url, int width, int height, int fps): rtsp_url(url), frame_width(width), frame_height(height), frame_rate(fps) {avformat_network_init();
}FFmpegServer::~FFmpegServer() {if (fmt_ctx) {av_write_trailer(fmt_ctx);if (!(fmt_ctx->oformat->flags & AVFMT_NOFILE)) avio_closep(&fmt_ctx->pb);avformat_free_context(fmt_ctx);}avformat_network_deinit();
}bool FFmpegServer::initialize() {// 创建输出上下文avformat_alloc_output_context2(&fmt_ctx, NULL, "rtsp", rtsp_url.c_str());if (!fmt_ctx) {printf("Could not create output context\n");return false;}// 创建视频流stream = avformat_new_stream(fmt_ctx, NULL);if (!stream) {printf("Failed creating new stream\n");return false;}// 设置H264编码参数AVCodecParameters* codecpar = stream->codecpar;codecpar->codec_id = AV_CODEC_ID_H264;codecpar->codec_type = AVMEDIA_TYPE_VIDEO;codecpar->width = frame_width;codecpar->height = frame_height;codecpar->format = AV_PIX_FMT_YUV420P;// 打开输出if (!(fmt_ctx->oformat->flags & AVFMT_NOFILE)) {int ret = avio_open(&fmt_ctx->pb, fmt_ctx->filename, AVIO_FLAG_WRITE);if (ret < 0) {printf("Could not open output URL: %s, Err: %d\n", rtsp_url.c_str(), ret);return false;}}// 写文件头// 注意:如果 mediamtx 没有运行的话,这里写入就会报错了,会说连不上int ret = avformat_write_header(fmt_ctx, NULL);if (ret < 0) {printf("Error writing header: %d\n", ret);return false;}return true;
}bool FFmpegServer::pushFrame(const uint8_t* data, size_t size, int frame_count, bool is_key_frame) {AVPacket pkt;av_init_packet(&pkt);pkt.data = const_cast<uint8_t*>(data);pkt.size = size;pkt.stream_index = stream->index;int64_t pts_counter = (int64_t)frame_count * (90000 / frame_rate);pkt.pts = pts_counter;pkt.dts = pts_counter;pkt.flags = is_key_frame ? AV_PKT_FLAG_KEY : 0;// 写帧int ret = av_interleaved_write_frame(fmt_ctx, &pkt);if (ret < 0) {printf("Error writing frame: %d", ret);return false;}return true;
}

4. 调用示例

#include "FFmpegServer.hpp"int main(int argc, char* argv[]) {int width = 1920;int height = 1080;int fps = 30;// 192.168.20.200 为你的ip地址// 8554 是端口号,建议不要修改// video 字符串可以自定义为任一你喜欢的值std::string url = "rtsp://192.168.20.200:8554/video";FFmpegServer ffmpeg_server(url, width, height, fps);if (!ffmpeg_server.initialize()) {return;}int frame_count = 0;while (true) {// 模拟获取的编码数据unsigned char* h264_data = ...;size_t size = ...;bool is_key_frame = frame_count % fps == 0;ffmpeg_server.pushFrame(data, size, frame_count, is_key_frame);frame_count++;}
}

四、客户端播放

客户端的网络需要保证能连上服务端的地址,即可以 ping 通上述示例中 “192.168.20.200”。

客户端上安装任一可以播放 RTSP 流的播放器,或者安装 ffmpeg 后使用 ffplay 进行播放。

下面以 ffplay 命令播放为示例:

# 直接播放
ffplay rtsp://192.168.20.200:8554/video# 低延迟播放
ffplay -fflags nobuffer -flags low_delay -framedrop rtsp://192.168.20.200:8554/video
http://www.dtcms.com/a/607678.html

相关文章:

  • 绵阳微网站制作做系统的图标下载网站
  • 网站建设免费网站初中学历怎么提升大专学历
  • 五度易链大数据治理实战:从数据孤岛到智能决策
  • Java入门学习第三章
  • 好的网站具备wordpress移动端设置
  • 个人电脑建立网站会上海包装设计公司排名
  • 免费凡科网站国家建设执业注册中心网站
  • 电商网站建设如何河北通信网站建设
  • 诚信网站备案临沂市经济开发区建设局网站
  • TypeScript类型守卫与可辨识联合详解一
  • 闲鱼钓鱼网站怎么做天津网站开发工资水平
  • 1.3 SubShader
  • 中信建设有限责任公司内部网站做胃镜需那好天津津门网站A
  • 从裸机到RTOS:基于MCU硬件特性的架构演进与范式转移
  • 建设厅网站174号文打电话来说做网站_然后答应了
  • [科普] GNSS授时原理
  • 厦门做商城网站拖拽式建站wordpress
  • 杭州免费网站制作创建网站的流程是什么
  • 淄博做网站手游官网首页
  • wordpress多本小说站出售admin管理员登录
  • Ansible之Playbook简单应用
  • 美橙互联网站建设下载百度2023最新版
  • 上海浦东建筑建设网站污水处理工程网站备案 个人
  • 什么是网络营销策略福田企业网站优化排名
  • 网站设计中怎么显示链接内容网站短信通知
  • Stable_Diffusion使用EasyPhoto报错动态链接库(DLL)初始化例程失败解决
  • 公司做网站计入那个科目建筑行业信息平台
  • 文山专业网站建设苏州新闻今天最新消息新闻事件
  • 张家口职教中心计算机网站建设销售系统的整个流程
  • 兰考县红庙关东村做网站的建设久久建筑网站