基于FFmpeg的RTMP推流功能(C#版)

1.代码来源

该部分代码源自雷神最简单的基于FFmpeg的推流器,感谢雷神!在此之上适配C#语言。

2.基于FFmpeg的C#推流流程

  1. 下载FFmpeg的动态链接库(dll)文件,其中包含的ffmpeg.exe、ffplay.exe可以跟你写的代码印证,先用ffmpeg命令行尝试是否可以编解码。ffmpeg下载地址
  2. 将dll文件放入项目工程中,并点击每个文件->属性->复制到输出目录->如果较新则复制。
  3. 添加FFmpeg.AutoGen的Nuget包,并添加如下代码将FFmpeg文件地址告知AutoGen:
  4. 若出现找不到dll的情况,考虑AutoGen与FFmpeg的版本是否兼容。若版本无问题,考虑AutoGen与(.net或framework)的版本问题!
public static class FFmpegHelper
{
   
    public static void RegisterFFmpegBinaries()
    {
   
        //获取当前软件启动的位置
        var currentFolder = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
        //ffmpeg在项目中放置的位置
        var probe = Path.Combine("FFmpeg", "bin", Environment.Is64BitOperatingSystem ? "x64" : "x86");
        while (currentFolder != null)
        {
   
            var ffmpegBinaryPath = Path.Combine(currentFolder, probe);
            if (Directory.Exists(ffmpegBinaryPath))
            {
   
                //找到dll放置的目录,并赋值给rootPath;
                ffmpeg.RootPath = ffmpegBinaryPath;
                return;
            }
            currentFolder = Directory.GetParent(currentFolder)?.FullName;
        }
        //旧版本需要要调用这个方法来注册dll文件,新版本已经会自动注册了
        //ffmpeg.avdevice_register_all();
    }
}

3.推送视频流到RTMP服务器

 		private AVFormatContext* _formatContext;

 		private AVStream* _vedioStream;

 		private int _vedioIndex;

 		private AVFormatContext* _outputContext = null;

 		private AVPacket packet;

		private int frame_index = 0;
 
        /// <summary>
        /// 初始化推流
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="url"></param>
        public void PushVedio(string filePath, string url)
        {
   
            FFmpegHelper.RegisterFFmpegBinaries();

            // 初始化封装和解封装格式
            ffmpeg.av_register_all();

            // 初始化网络库
            ffmpeg.avformat_network_init(
C#中使用FFmpeg进行RTMP是通过利用FFmpeg.AutoGen库进行ffmpeg的API调用来实现的。FFmpeg.AutoGen是一个开源的项目,它对ffmpeg的API进行了封装,方便在C#代码中进行调用。 要在C#中实现送本地视频至媒体服务器(以RTMP为例),可以使用FFmpeg.AutoGen库来进行媒体送。本1.1增加了多平台下编译的支持,包括Windows、MacOS和Linux。 的方式有三种: 1、通过读取本地文件进行媒体数据送; 2、通过读取指定内存数据进行送; 3、通过读取媒体硬件设备进行送。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C# 利用ffmpegrtmp服务器](https://blog.csdn.net/yang527062994/article/details/115622191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [最简单的基于FFmpeg器(以RTMP为例) 1.1](https://download.csdn.net/download/leixiaohua1020/8445455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值