使用FFmpeg + nginx + flv.js 实现RTSP格式视频流在web网页进行播放

使用flv.js + websokect播放rtsp格式视频流 -----------------------------------------------------------------分割线,我又来了,还是视频的问题,这次优化了,提出了新的方案----------------------------------------------------------------------------------------------------------------------因为我是写成的一个组件,所以我的rtsp地址是传进来的。 阅读详情

近期,出于项目需要,要求支持web网页播放RTSP格式的监控视频。因之前并没有相关的项目经验及技术积累。并且H5中的video默认并不支持RTSP格式的视频播放,接下来花了一周时间,都在进行调研和实践网上搜到的方案。

1、vlc插件 + video标签

起初,找到的实现方式,是利用第三方插件,vlc播放器或者在谷歌浏览器上安装vlc视频插件的方案。在实践过程中发现,该方案,依赖于谷歌浏览器支持NPAPI插件。谷歌浏览器目前已经不知道该插件,即使后来费了很多时间在网上找谷歌浏览器40-44版本,尝试进行播放,页面也提示“该插件不支持”。同时,低版本谷歌浏览器基本是2015年之前的,对于ES6语法还有样式上的兼容,也多少存在一些问题,还有就是下载的版本居然连打开开发者工具都闪退,果断放弃了在低版本谷歌浏览器的开发计划。

之后有尝试谷歌浏览器能不能播放RTMP格式的视频流,结果依旧没有成功;究其原因,是由于2021年之后的谷歌浏览器版本已不再支持flash插件,且之前的任何浏览器版本都不再支持flash插件,即使在设置中打开的flash的控制,页面依然显示“adobe flash player 不再支持”的字样。。。

2、nginx + ffmpeg + flv.js

翻找了很多相关的技术文章,esayPlayer也安装过,加开发群咨询技术问题,反馈都说前端H5无法直接播放RTSP视频流,只能转格式,但是推荐的服务又是付费的,目前项目并不打算使用第三方服务,将视频放在公网环境进行存储播放,所以也就作罢了。

最终,选择了这个看上去技术实践并不是很困难的方式。该方式的实现原理,通过服务端将其 RTSP / RTMP 流实时转为 http-flv 流,从而浏览器可直接使用该流进行直播(使用bilibili提供的 flv.js )。

该实现方式的前提条件:
(1)nginx

(2)nginx-http-flv-module

(3)ffmpeg

  (4)  flv.js

2.1 配置流程

2.1.1 nginx 补充 nginx-http-flv-module模块

// 步骤:

// 1、下载 nginx-http-flv-module

下载 https://github.com/winshining/nginx-http-flv-module 项目


// 2、下载 nginx 安装包,解压后进入对应包文件夹中

cd /usr/local

tar -zxvf nginx-1.8.1.tar.gz

cd nginx-1.21.1 


// 3、在nginx安装文件夹中,执行以下命令,安装nginx-http-flv-module,--add-module后拼接的是nginx-http-flv-module 项目的存放路径

./configure --prefix=/usr/local/nginx  --add-module=/usr/local/nginx/nginx-http-flv-module


// 4、手动编译并重新安装nginx,此时nginx将被安装到 

make && make install


// 5、重启nginx

nginx -s reload 

遇到的问题:

(1)已有nginx,安装路径下,并没有 configure文件

我是在mac上直接进行配置操作的,但是进入nginx的安装路径 /usr/local/Cellar/nginx下(之前通过brew install nginx 进行安装的),并没有找到 congfigure文件。在网上找了nginx的安装压缩包,拷贝其中的 congfigure 进行了补充。但由于是第一次搞这个配置,怕又出什么幺蛾子,就先用 brew uninstall nginx 把之前的卸载了。重新按照上边的方式,一步步进行了操作;

(2)nginx补充模块时报openssl库缺失

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.


依照该报文提示,先检查是否已经安装openssl库

如果
使用flv.js和Jessibuca方式播放流媒体 rtmp/rtsp 使用flv.js播放流媒体 rtmp/rtsp,flvjs是一个H5播放器。FLV是一种协议。flvjs可以用于播放FLV格式的视频。 支持解码H.264视频(Baseline, Main, High Profile全支持,支持解码B帧视频) 支持解码H.265视频(flv id == 12) 支持解码AAC音频(LC,HE,HEv2 Profile全支持) 支持解码PCMA音频以及PCMU音频格式 可设置播放缓冲区时长,可设置0缓冲极限低延迟(网络抖动会造成卡顿现象) 支持WASM智能不花屏丢帧,长时间播 阅读详情

相关推荐

阿里云播放器直播rtsp、rtmp、flv流,flash播放直播流

1、安装vue-aliplayer-v2依赖 npm install vue-aliplayer-v2 2、在main.js中引入依赖 import VueAliplayerV2 from 'vue-aliplayer-v2'; Vue.use(VueAliplayerV2); 3、在需要创建播放器的vue页面粘贴如下代码。 阿里云播放器有两个版本,h5版本(支持动态切换),flash版本(不支持动态切换), 1、引入js和css样式, 阿里云支持在线调试视频地址: https://player.al

两袖清风野蛮人 8097

WebRTC实现rtsp流在浏览器中播放

WebRTC实现rtsp流在浏览器中播放

qq_28174545的博客 1万+

网络摄像头RTSP视频流WEB端实时播放实现方案

IPC视频流怎么实时在WEB浏览器播放,视频流格式是RTSP。 下面我整理了自己实现的方案以及网上看到的一些方案 https://blog.csdn.net/wenqiangluyao/article/details/98594861 一、FFmpeg + nginx 将转 hls 通过 video.js 在支持h5浏览器播放(我实现的) 参见:Nginx+FFmpeg实现rtsp流转hls流,在WEB通过H5 video实现视频播放 不足:hls延迟较rtmp、http-flv大 二、FFmpe

phymat.nico的专栏 6699

WebRTC实现rtsp流在浏览器中播放 H5播放

iveweb是可支持H.264/H.265视频播放的流媒体播放器,性能稳定、播放流畅,可支持的视频流格式有RTSP、RTMP、HLS、FLV、WebRTC等,具备较高的可用性。liveweb还拥有Windows、Android、iOS版本,其灵活的视频能力,极大满足了用户的多样化场景需求。

liveweb视频汇聚平台 1108

告别Flash!用Nginx+FFmpeg将海康威视RTSP流转为HTTP-FLV,实现前端低延迟播放

本文详细介绍了如何利用Nginx和FFmpeg将海康威视摄像头的RTSP流转换为HTTP-FLV格式,实现前端低延迟播放。通过技术选型、环境搭建、SpringBoot集成和前端播放优化,提供了一套完整的现代Web监控解决方案,特别适合企业级应用场景。

weixin_33552698的博客 293

从RTSP到网页流畅播放:用FFmpeg+Nginx+flv.js搭建低延迟视频流转发服务(SpringBoot实战)

本文详细介绍了如何利用FFmpeg+Nginx+flv.js技术栈构建低延迟视频流转发服务,实现RTSP到网页流畅播放的全链路解决方案。通过SpringBoot后端集成、FFmpeg参数调优和Nginx流媒体服务器配置,开发者可以快速搭建适用于智能监控和远程协作场景的高效视频流系统,显著降低传输延迟并提升浏览器兼容性。

weixin_30911451的博客 160

大华摄像头WEB页面播放方案:RTSP转HTTP-FLV + flv.js实战

视频监控系统正越来越多地融入Web业务,而安防摄像头的视频流普遍基于RTSP协议。RTSP是安防设备的标准传输协议,但浏览器原生无法直接解码播放,同时H.265编码虽压缩效率高却缺乏浏览器支持,导致画面无法呈现。解决这类问题的核心在于理解视频从拉流、转码到前端解码播放的完整链路。利用流媒体服务器将RTSP转成HTTP-FLV,配合flv.js在前端实现低延迟播放,能够在浏览器中稳定呈现监控画面。这一方案广泛适用于大屏可视化、物联网管理平台、园区安防等场景,尤其适合需要集成海康、大华摄像头的Web项目。本文围

weixin_30824479的博客 361

保姆级教程:用FFmpeg+nginx实现大华摄像头网页实时监控(附常见问题解决)

本文提供了一套完整的FFmpeg+Nginx方案,实现大华摄像头RTSP流到HLS流的转换与网页实时监控。详细解析了架构选型、环境配置、RTSP地址获取、FFmpeg推流参数优化及前端video.js集成,并附有常见问题解决方案,帮助用户构建稳定、兼容性强的Web视频监控系统。

bread的博客 1100

RTSP转Web直播:四种技术方案对比与HTTP-FLV实战部署

流媒体协议是实现音视频实时传输的技术基础,其核心原理是通过特定的数据封装和传输机制,在发送端与接收端之间建立稳定的媒体流通道。在安防监控、智慧教育、工业物联网等场景中,RTSP协议因其低延迟和广泛设备支持成为视频源传输的事实标准。然而,由于浏览器原生不支持RTSP,需要将其转换为Web兼容的格式如HTTP-FLV、HLS或WebRTC,这便是“协议转换”的技术价值所在。本文聚焦于RTSP to Web这一常见需求,深入解析包括转码、转封装在内的关键技术路径,并通过一个基于FFmpeg和SRS的HTTP-FL

cuanmo8775的博客 439

RTSP流网页播放实战:HLS/HTTP-FLV/WebRTC选型与部署指南

视频流媒体传输是安防监控与远程巡检场景中的基础技术,而RTSP作为摄像头领域的事实标准协议,却因浏览器原生不支持而成为Web端接入的常见瓶颈。理解协议转换的核心原理——通过转封装或转码将RTP流封装为浏览器可识别的格式,是解决问题的关键。行业实践中,HLS、HTTP-FLV与WebRTC三条主流路线各有适用场景:HLS兼容性最佳但延迟较高,HTTP-FLV在实时性与成本间取得平衡,WebRTC则以毫秒级延迟支撑云台控制等高交互需求。借助FFmpeg、nginx和ZLMediaKit等成熟工具,开发者可以快速

weixin_34059951的博客 1441

SAP中常见的Debug方式

原文链接:https://mp.weixin.qq.com/s/wT4kThFKYV0PQYhCqpXRWg 大家可以关注我个人公众号,所有分享内容,会在公众号第一时间推送,且阅读排版更好。 愿大家的学习,轻松且愉快。 如果大家觉得有用,希望转发关注,谢谢 导读 SAP系统在企业的应用时,都不会只使用标准功能。 通常情况下,基于特殊的行业需求,以及某些业务部门的管理需求等,都会额外开发出一些增强,报表,对话功能,接口等,从而保证系统的正常运转。 标准知识的逻辑,我们...

Kerwin-G的博客 1万+

不只是抓取:用五指灵巧手(ROH-A001/RH56)玩转ROS2下的力控与混合控制

本文深入探讨了在ROS2环境下使用五指灵巧手(ROH-A001/RH56)实现力控与混合控制的实战技巧。从硬件通信协议解析到ROS2节点开发,详细介绍了力感知架构、实时数据处理和混合控制策略,帮助开发者在Ubuntu系统中高效实现精密操作。通过鸡蛋抓取等实例,展示了力控技术在机器人灵巧操作中的关键作用。

weixin_28221501的博客 278

生产实习-实习报告-Raspberry Pi的应用

生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制

青竹小轩的博客 745

LTC2990电池监控芯片I²C驱动开发与多通道同步采样实践

电池监控是嵌入式电源管理系统的核心环节,其本质依赖高精度模拟信号采集、数字转换与实时状态评估。LTC2990作为集成电压/电流/温度三合一的专用监控IC,通过真差分输入、内置基准和I²C数字接口,显著简化了SOC/SOH估算的硬件链路。其技术价值在于以单芯片替代传统ADC+运放+传感器组合,在宽压(2.7–36 V)、高共模(80 V)场景下保障工业级测量可靠性。典型应用于电动工具、车载BMS、UPS及便携式储能设备的电池健康监测子系统。本文聚焦LTC2990底层驱动实现,涵盖I²C时序约束、寄存器原子读写

weixin_42599558的博客 128

群晖NAS下docker安装MySql

本文将一步一步讲解如何在群晖NAS的docker中启用一个MySQL容器 , 算是初学者对问题解决的一个记录.

qq_46375248的博客 5972

CPU 访问外设的两种核心机制:MMIO(Memory-Mapped I/O) 和 DMA(Direct Memory Access)

BAR和DMA是计算机系统中两种关键的数据传输机制:BAR(基址寄存器)用于CPU与设备间的控制通信,映射设备寄存器便于配置操作;而DMA(直接内存访问)允许设备直接读写系统内存,无需CPU参与大量数据传输。典型场景如NVMe SSD读取数据时,CPU通过BAR下发指令,设备通过DMA高效传输数据到主机内存,最后中断通知CPU。虽然BAR能映射大内存空间,但仍无法替代DMA的高效数据传输功能,两者各司其职——BAR负责控制,DMA专注数据传输,共同实现高性能的硬件交互。

MHD0815的博客 235

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 801

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案)

本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2601

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Sequelize排序问题: 关联其他表数据的排序实现
rushichunqiu
博客等级 码龄9年 10粉丝 14原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值