首页 > 编程语言 >用C#做一个 拉流播放器

用C#做一个 拉流播放器

时间:2024-04-02 19:57:09浏览次数:30  
标签:播放器 ffmpeg C# FFmpeg Width pCodecContext 拉流 frameSize

用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 == nullthrow 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

标签:播放器,ffmpeg,C#,FFmpeg,Width,pCodecContext,拉流,frameSize
From: https://www.cnblogs.com/sexintercourse/p/18111374

相关文章

  • 什么是Socket连接?它与TCP连接有什么关系
    Socket是应用层与TCP/IP协议簇通信的中间软件抽象层,它是一组接口。主机A的应用程序必须通过Socket建立连接才能与主机B通信,而建立Socket连接需要底层TCP/IP协议来建立TCP连接建立TCP连接需要底层IP协议来寻址网络中的主机Socket连接它允许两个程序在不同计算机上通过网络进行......
  • 将asp.net core 程序打包成docker镜像,并创建容器
    一、编写DockerfileFROMmcr.microsoft.com/dotnet/aspnet:7.0//指定基础镜像asp.netcore7COPYdist/appWORKDIR/appEXPOSE80/tcpENTRYPOINT["dotnet","App.dll"]二、将asp.netcore程序打包成镜像dockerbuild-t镜像名-fDockerfile三、创建容器1......
  • docker下mysql连接数修改后不生效问题的解决
    使用容器的方式使用mysql,在创建mysql容器的时候,映射了配置文件的路径(我映射的路径是:/home/env/mysql/config/),当修改了路径中配置文件中的最大连接数后,重启容器后,发现参数是不生效的情况,你遇到过吗?先说结果:是权限的问题,777权限会被mysql认为是安全的问题,忽略这种文件。具体如下:......
  • C++虚继承原理与类布局分析
    C++虚继承原理与类布局分析引言在开始深入了解虚继承之前,我们先要明白C++引入虚继承的目的。C++有别于其他OOP语言最明显的特性就是类的多继承,而菱形继承结构则是多继承中最令人头疼的情况。我们都知道,当派生类继承基类时,派生类内部会保存一份基类数据的副本。在D->B|C,B|C->A......
  • 什么是Socket?
    Socket是什么以及它的创建过程OSI七层模型上三层(会话/表示/应用):HTTP/FTP协议等——数据传输层:TCP协议/UDP协议——数据TCP/IP(HEAD)段网络层:IP/ICMP/ARP/RARP协议——数据TCP/IP(HEAD)IP(HEAD)包数据链路层:ppp点到点——数据TCP/IP(HEAD)IP(HEAD)帧物理层:1......
  • acciss码对照表
    转自:https://www.zhihu.com/tardis/bd/art/388458283?source_id=1001 ASCII码对应表,ASCII码值的大小顺序93 赞同4 评论126 收藏刚开始基础计算机编程的时候,学习的是二进制、十进制、十六进制。十进制是生活习惯中最常用的计数方法,也是我们计数的思维逻辑......
  • P5836 [USACO19DEC] Milk Visits S
    原题链接题解树上只有两种颜色,我们把每种颜色的连通块记录下来,只有当路径两端的点属于同一连通块且颜色与朋友喜欢的不同时输出0code#include<bits/stdc++.h>usingnamespacestd;chars[100005];intfa[100005];intfinds(intnow){returnfa[now]==now?now:fa[now]=fin......
  • COMP 330正则化逻辑回归分类
    COMP330课业#51说明在这项任务中,您将实现一个正则化的逻辑回归来对文本文档进行分类。实现将在Spark之上的Python中进行给你,有必要使用亚马逊AWS。您将被要求执行三个子任务:(1)数据准备,(2)学习(将通过梯度下降)和(3)学习模型的评估。注意:在你真正开始这项任务之前,完成HW5和Lab5是很重......
  • Yoga facebook出品的引擎
    YogaDocumentationPlaygroundBlogGitHub  AboutYogaGettingStartedLayingoutaYogatreeConfiguringYogaAdvancedStylingGettingStartedLayingoutaYogatreeLayingoutaYogatreeEachboxinYogaisrepresentedasa ......
  • UVC(1)-v4l2框架分析
    此节是韦东山第三期学习资料 当插入一个网上买的UVC时,内核UVC驱动会打印出下面的Log信息出来对应的UVC驱动位于:/drivers/media/usb/uvc 当插入的UVC与uvc_ids匹配了,就会调用uvc_probe函数枚举设备structuvc_driveruvc_driver={.driver={......