用C#做一个 拉流播放器
做拉流播放器第一个想到就是,.,..FFmpeg没错 我也是用强大的他它来做的.但是我用的不是 cmd 调用 而是用的强大的FFmpeg.AutoGen
FFmpeg.AutoGen
这个是C# 一个自动生成FFmpeg的C#库,它之强大令人侧目,但是文档资料非常少,它能用C# 办到一切C++原生ffmpeg的功能
,或许说用C#来实现了一遍ffmpeg ?!?,不同于外部命令调用 它直接用指针来操纵流 上的一段代码
这是一段 转码过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public H264VideoStreamEncoder(Stream stream, int fps, Size frameSize) { _stream = stream; _frameSize = frameSize; var codecId = AVCodecID.AV_CODEC_ID_H264; _pCodec = ffmpeg.avcodec_find_encoder(codecId); if (_pCodec == null ) throw new InvalidOperationException( "Codec not found." ); _pCodecContext = ffmpeg.avcodec_alloc_context3(_pCodec); _pCodecContext->width = frameSize.Width; _pCodecContext->height = frameSize.Height; _pCodecContext->time_base = new AVRational {num = 1, den = fps}; _pCodecContext->pix_fmt = AVPixelFormat.AV_PIX_FMT_YUV420P; ffmpeg.av_opt_set(_pCodecContext->priv_data, "preset" , "veryslow" , 0); ffmpeg.avcodec_open2(_pCodecContext, _pCodec, null ).ThrowExceptionIfError(); _linesizeY = frameSize.Width; _linesizeU = frameSize.Width / 2; _linesizeV = frameSize.Width / 2; _ySize = _linesizeY * frameSize.Height; _uSize = _linesizeU * frameSize.Height / 2; } |
拉流案例
http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4
这个是网上找的
再来一段 香港卫视的 rtmp的 网上找的
rtmp://live.hkstv.hk.lxdns.com/live/hks
来再个 香港卫视的hls
http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
再来一个 rtsp 的
rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
winform显示
最后呈现UI上我是用Graphics 在PictureBox 绘制的
以上是 FFmpeg.AutoGen 的github地址
https://github.com/Ruslan-B/FFmpeg.AutoGen
链接: https://pan.baidu.com/s/1OMQPnd09KwcF92xVW0d60g 提取码: mdf3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?