关于使用rtp推流,TSINGSEE青犀视频团队实际已经研发了很长时间,其中也碰到了不少问题,比如RTP推流客户端无法解析播放,或者遇到不同的报错,但这些目前都已经有了比较完善的解决办法。...在使用RTP推流时,默认ffmpeg使用的打包模式是packetization-mode=1,本文我们和大家分享另一个比较实用的技巧,就是使用ffmpeg配置rtp打包模式。 如何修改打包模式?...关于RTP打包模式的说明如下: 目前ffmpeg默认使用的是1: Not interleaved 模式,针对客户的需要,服务端不支持STAP-A的组包模式,需要每个包单独发送,所以需要配置Single...url后面加上如下所示内容: rtp://192.168.99.138:6666?...配置后抓包: 可以看到非I帧之间没有STAP-A的组包模式了,每个NAL都是单独发送的。同时看到对应的SDP也是packetization-mode=0。
(可能是发送方发的就不完整,也可能是传输过程中丢失) 帧和帧之间的传输间隔太久,超过了接收端的缓存时间 注:当然也有其他原因导致的,比如码流兼容性问题,或者编码端/解码端处理流程有问题(我们曾经遇到过解码端处理...由于我实际工作中使用的都是rtp over rtsp(也就是TCP传输方式),下面的讨论仅针对rtp over rtsp进行,该工具也是针对这种场景开发的。...libnids的输出就是原始的TCP字节流了,我们可以直接对其进行RTP解析。 二、使用方法 进入rtp_parser/bin目录 执行....该文件是以src[源IP[源端口]]--dst[目的IP[目的端口]].txt的形式命名的。 如果抓包文件中包含多条流,每条流都会生成一个独立的解析文件。...使能了这个选项,即使抓包文件中没有tcp连接的三次握手过程,也跟踪这条tcp数据流。
在RTP中,也可以像Kernel那样使用Signal,但略有不同 区别一:Kernel Task默认Unblock所有Signal;Kernel创建的RTP默认Unblock所有Signal;被RTP创建的...RTP,继承原有RTP的Mask /* * 版权所有 公众号 VxWorks567 * 使用以下代码分别在Kernel和RTP里进行测试 */ #include #include...) { rtpSpawn("a.vxe", NULL, NULL, 200, 0x2000, 0, 0); } } 区别二:Kernel的每个...Task有独立的Mask;RTP的Task共享Mask /* * 版权所有 公众号 VxWorks567 * 使用以下代码分别在Kernel和RTP里进行测试 */ #include <stdio.h...接收到Signal后,默认是终止,即SIG_DFL表示“终止进程” /* * 版权所有 公众号 VxWorks567 * 使用以下代码分别在Kernel和RTP里进行测试 */ #include
做转码服务的原型时,看了看MCU的实现,考虑到如果不做转码,可以将多路rtp流直接合成为一路rtmp流输出,这样就相当于实现了多人连麦,并将多人连麦的视频转发直播了,所以做了这个简单的原型实现!...DEMO只实现了接收一路rtp流,输出一路rtmp流! 同转码服务的类图设计: 基础库是ZLMediaKit,确实很方便!...直接上代码: TranscoderTaskManager.h 可以使用linux的nc 127.0.0.1 3500 进行客户端测试!...然后使用ffmpeg对接收到的端口进行rtp包的推流: ffmpeg -re -i tuiliu_mp4.mp4 -vcodec libx264 -b:v 600k -s 480x320 -profile...: //使用json解析出命令START_PROXY_CMD, 然后启动一个UDP的接收任务: _strRecvBuf.append(buf->data(), buf->size());
)\ffmpeg $(TargetDir)\ffmpeg 复制文件 xcopy /Y /d $(ProjectDir)\ffmpeg\* $(TargetDir)\ffmpeg\ 获取音频输入设备 使用...audioList.Add(audioModel); } return audioList; } } } 使用...FFmpeg推流 using System; using System.Diagnostics; using System.IO; namespace ZJClassTool.Utils {...p.StartInfo = startInfo; p.Start(); } /// /// 功能: 开始推流...Stop() { p.Kill(); p.StartInfo.Arguments = ""; } } } 实际上执行的推流命令
GridSplitter wpf的GridSplitter设置问题导致GridSplitter不可见, HorizontalAlignment=“Stretch” //设置水平填充控件 VerticalAlignment
大家可以根据自己需要使用这两个工具进行推流或接收,下面就以传输协议UDP、RTP为基础,介绍几种最常见的推流场景下两个工具的用法。 1....使用RTP发送H264 FFmpeg的推流命令: ffmpeg -re -i d:\videos\1080P.264 -vcodec copy -f rtp rtp://127.0.0.1:1234 该命令行实现读取一个...使用RTP发送TS流 很多人以为这种情况跟上面差不多,使用如下的推流命令(错误): ffmpeg -re -i d:\videos\1080P.264 -vcodec copy -f mpegts rtp.../90000 (注意:FFmpeg发送TS流的RTP PayloadType不是96而是33) 还有一个问题:早期的ffmpeg版本是不支持rtp_mpegts输出协议的,你可以使用命令ffmpeg -...使用RTP分别发送音频流和视频流 FFmpeg命令: ffmpeg -re -i -an -vcodec copy -f rtp rtp://:5004 -vn -acodec
<Grid.ContextMenu > <ContextMenu> <MenuItem Header="增加" Click="M...
这是一个我自己定制的 WPF 框架,可以在此基础上构建属于自己的定制化的 WPF 框架 本文提供的方法适用于 .NET 5 和 x86 下,如果需要其他版本,请自行构建和使用,关于如何自行构建和定制化,...请看 手把手教你构建 WPF 框架的私有版本 现在的 WPF 属于 dotnet 基金会组织下的一个开源仓库,基于 MIT 协议,意味着我可以进行魔改然后私有发布甚至不再公开源代码商业使用。...这样能提供非常简单的本地构建调试方法,就和其他基础项目相同的构建调试方法,不需要去了解 WPF 框架相关构建知识 我推荐使用此方法来进行一部分不更改 WPF 已有逻辑的开发,而事实上作为一个庞大的框架,...因此在不更改已有的逻辑下,使用此方法开发的效果和在 WPF 项目里面更改的效果几乎相同 用这个方法构建出来的应用就是用上了自己提供的定制的 WPF 框架,还请大家试试使用此方法 本文提供的这个程序集的最佳实践方法就是提供转换器...原因是如果使用 VisualStudio 进行编辑 WPF 框架,会遇到这样的问题,更改一点东西就需要来一个构建,而构建 WPF 是一个缓慢的过程。
下面我们将讲解在WPF中使用Blazor,并且使用Blazor做一些文件编辑操作,下面是需要用到的东西 WPF Blazor Masa Blazor Monaco 安装Masa Blazor模板 使用...CMD指令安装模板 dotnet new install MASA.Template 新建Masa Blazor WPF App 找到如图的模板,然后点击下一步 下一步,新建项目名称FileEditor...,传递当前对象,并且指定当触发快捷键的时候调用当签对象的指定方法。...,并且bind-value了value的值,我们在cs文件中更新了value就自动更新了UI的显示的值。...下面我们看看实际使用效果。
小伙伴是否了解在 UWP 和 WPF 触摸的滑动的顺滑是不相同的,一个原因是 UWP 使用了 Direct Manipulation 这个科技。...这个科技需要采用 Pointer 消息的支持,本文告诉大家如何使用 本文的代码都是从 Using DirectManipulation with WPF 这篇博客抄的 可以运行的代码放在 github...欢迎小伙伴访问 顶层的用法效果如下 private readonly PointerBasedManipulationHandler _manipulationHandler = new...PointerBasedManipulationHandler(); 这里的 PointerBasedManipulationHandler 将是从 Pointer 消息拿到 Manipulation...而滑动效果我还没学会 关于 PointerBasedManipulationHandler 的逻辑,看起来比较复杂,我就没有放在博客里面,请小伙伴在 github 访问 滑动的使用方法可以一个测试的程序让大家看到
上一篇告诉大家如何在 WPF 使用 SharpDx ,看起来代码比较复杂,所以本文告诉大家如何使用我封装的控件。...本文是一个系列,希望大家从第一篇开始看 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用...SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 在WPF 使用 SharpDX 在 D3DImage 显示我告诉大家如何在 WPF 使用,但是代码都是写在一个...我的代码可以复制一下放在自己的工程使用,现在我还不想做 Nuget 因为这个类还有性能问题。...使用这个类作为 Image 的 Source 会占用 3% 的 CPU ,而且这个类没有注释,关于这个类是如何写的请看WPF 使用 SharpDX 在 D3DImage 显示 。
之前做的ListBox里列大图https://cloud.tencent.com/developer/article/1032668 图片转换的时候这段代码 有的时候会有问题 编码解码器无法使用提供的流类型
Install-Package Microsoft.Toolkit.Mvvm -Version 7.1.2 添加 using 指令以使用新 API: using Microsoft.Toolkit.Mvvm...; 这个包主要提供了如下的 Microsoft.Toolkit.Mvvm.ComponentModel ObservableObject ObservableRecipient ObservableValidator...AddScoped 请求开始-请求结束 在这次请求中获取的对象都是同一个 请求时创建 AddTransient 请求获取-(GC回收-主动释放) 获取时创建 每一次获取的对象都不是同一个...注意: 由于AddScoped对象是在请求的时候创建的 所以不能在AddSingleton对象中使用 甚至也不能在AddTransient对象中使用 使用 private UserVM...的实例并没有传入但是就可以用了,因为IOC框架已经自动注入了。
本文仅仅只会涉及到渲染的一部分 制作一个跨平台的 UI 框架有很多个方式,例如使用各个平台提供的原生控件,也就是说在 Windows 平台上,采用 WinUI 的按钮,在 iOS 平台上使用苹果提供的按钮...在 MAUI 里面,既可以使用平台提供的原生控件进行拼接制作界面,也可以使用基于的各个平台的独立 UI 框架提供的自绘能力绘制界面,也可以调用到底层的渲染逻辑进行渲染 但,这也不是免费的。...我接下来将告诉大家,如何使用 Maui 提供的框架层,配合 WPF 提供具体的自绘逻辑,两个放在一起,从而实现 WPF 使用 MAUI 的自绘逻辑 核心的实现方法是 WPF 提供画布功能,让 MAUI...可以在 WPF 上面画元素。...由于此库还没完成,为了完成接入,我没有使用 DLL 引用,而是拷贝了这个库的代码到我的测试代码里面,然后再进行稍微的魔改,解决构建不通过 大概的对接方式如下,先在 WPF 里面放一个 Canvas 控件
WPF 表格控件 ReoGrid 的简单使用 目录 一、概述 二、安装 三、添加控件 四、加载 Excel 五、属性设置 六、支持触摸滚动 七、其它操作 1、显示和隐藏列 2、显示特定字体 八、资源链接...独立观察员 2021 年 7 月 9 日 一、概述 ReoGrid 是一个开源的表格控件库,支持 Winform 和 WPF。...本文演示在 WPF 中的使用,用的是直接加载 Excel 的方式,另外解决了触摸滑动的问题。 二、安装 新建好 WPF 项目后,我们使用 NuGet 安装 ReoGrid。...效果如下: 可以看到固定了表头后还是会有表头线突出,这是因为窗体(或者说显示范围)比表格内容区域大,实际使用时可通过设置合适的显示大小,ReoGrid 控件会自动出现滚动条,即可解决这个问题(3.0.0...这个应该是 WPF 的 ScrollViewer 本身的问题,之前碰到过,网上有人提供过一个方法来解决(通过附加属性)。
本文告诉大家如何使用 DrawingContext 变换,修改画出的内容。...简单的方法就是使用 PushTransform 方法,那么如何使用这个方法就是本文要告诉大家的。...先写一个简单的 OnRender ,创建一个类 GearcawralSarBule 继承 FrameworkElement 就可以重写 OnRender 方法,为了让WPF调用 OnRender 方法就需要把...如果有玩过 ps 就知道,在 ps 有图层,使用 DrawingContext 的 push 方法就是创建一个图层,而且做的变换都是对这个图层做变换,在使用 push 创建图层之后需要使用 pop 把图层画进去...注意使用了 push 需要在画完使用 pop ,不然会出现下面继续对 DrawingVisual 进行画的时候就会发现还是在原先的图层 除了 PushTransform 方法还有很多 push 方法,
在 WPF 中有 DynamicRenderer 提供高性能的书写,这个类在 WPF 只有 InkCanvas 使用,如果想要在自己的 UIElement 使用,需要写一些代码 先创建一个 UIElement...的 UIElement 现在里面什么都没写 public class MeexikelelHaiwurbe : UIElement { } 为了使用 DynamicRenderer...需要支持他的输入层和显示层 输入层 对于 StylusPlugIn 需要加入到 UIElement 的 StylusPlugIns 才能收到触摸的消息 这部分的原理比较复杂,请看 WPF 高速书写 StylusPlugIn...,也就是附加的 MeexikelelHaiwurbe 是不可见的 从 WPF 高速书写 StylusPlugIn 原理 可以知道,在 StylusPlugIn 要收到触摸的消息,需要附加的元素可以收到消息才可以...,无论什么点都返回这个元素,于是这个元素就可以做到命中测试,宽度和高度都是最大 当然有层级的关系,不会点到任何的地方都命中这个元素,关于层级请看 WPF 的原理 WPF 源代码 从零开始写一个 UI 框架
领取专属 10元无门槛券
手把手带您无忧上云