• 用C#做一个 拉流播放器


    做拉流播放器第一个想到就是,.,..FFmpeg没错 我也是用强大的他它来做的.但是我用的不是  cmd 调用 而是用的强大的FFmpeg.AutoGen

    FFmpeg.AutoGen

    这个是C# 一个自动生成FFmpeg的C#库,它之强大令人侧目,但是文档资料非常少,它能用C# 办到一切C++原生ffmpeg的功能

    ,或许说用C#来实现了一遍ffmpeg ?!?,不同于外部命令调用 它直接用指针来操纵流 上的一段代码

    这是一段 转码过程

            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

  • 相关阅读:
    Thinkd Pad打开无线网络方法
    模式问题
    SQL数据库,使用事务执行增删改操作,给自己一个后悔的机会
    iOS开发-数据库FMDB队列
    iOS开发-数据库FMDB简单介绍
    iOS开发-地图定位 CoreLocation地理编码
    iOS开发-网络篇 文件的上传
    iOS开发-项目新特性
    iOS开发-Xcode插件管理工具Alcatraz的安装和使用
    iOS开发-AFNetworking 怎样上传数据? 怎样上传模拟表单
  • 原文地址:https://www.cnblogs.com/leoxjy/p/9357810.html
Copyright © 2020-2023  润新知