搜索
bottom↓
回复: 15

C#使用cefsharp实现网络电视直播

[复制链接]

出0入0汤圆

发表于 2018-12-7 15:52:53 | 显示全部楼层 |阅读模式
本帖最后由 jenkins 于 2018-12-7 17:15 编辑

程序说明:
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.IO;

namespace CefSharpLive
{
    public partial class Form1 : Form
    {
        public ChromiumWebBrowser browser;
        MyRequestHandler myRequestHandler;
        public Form1()
        {
            //使能cache
            var settings = new CefSettings
            {
                Locale = "zh-CN",
                AcceptLanguageList = "zh-CN",
                MultiThreadedMessageLoop = true,
                CachePath = Directory.GetCurrentDirectory() + @"\cache",
                WindowlessRenderingEnabled = true
            };
            //设置flash插件
            settings.CefCommandLineArgs.Add("ppapi-flash-version", "32_0_0_101");
            settings.CefCommandLineArgs.Add("ppapi-flash-path", @"plugins\pepflashplayer64_32_0_0_101.dll");
            settings.PersistSessionCookies = true;
            Cef.Initialize(settings);
            //直播地址
            browser = new ChromiumWebBrowser("https://live.wasu.cn/show/id/1938165");
            browser.FrameLoadEnd += Browser_FrameLoadEnd;
            myRequestHandler = new MyRequestHandler();
            browser.RequestHandler = myRequestHandler;
            browser.Dock = DockStyle.Fill;
            Controls.Add(browser);
            InitializeComponent();
            pictureBox1.BringToFront();
        }

        //页面加载完成后使用js代码删除无关内容, 并修改flash播放器尺寸
        private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
        {
            string script = @"
            (function() {
                document.body.style.backgroundColor='#000000';
                if (typeof(wsplayer)=='undefined')
                {
                    return;
                }
                for (j = 0; j < 8; j++)
                {
                    var div = document.getElementsByTagName('div');
                    for(i = 0; i < div.length; i++)
                    {
                        if(div[ i ].innerHTML.indexOf('WsPlayer.swf') == -1)
                        {
                            div[ i ].remove();
                        }
                    }
                }
                for (j = 0; j < 8; j++)
                {
                    var link = document.getElementsByTagName('link');
                    for(i = 0; i < link.length; i++)
                    {
                        link[ i ].remove();
                    }
                }
                wsplayer.style.marginTop = '0px';
                wsplayer.style.marginLeft = '0px';
                wsplayer.style.width = '" + (this.Width - 20).ToString() + @"px';
                wsplayer.style.height = '" + (this.Height - 50).ToString() + @"px';
            })();";
            browser.ExecuteScriptAsync(script);

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
        }
        //隐藏遮挡加载过程的黑幕
        private void timer1_Tick(object sender, EventArgs e)
        {
            string script = @"
            (function() {
                if (typeof(wsplayer)=='undefined')
                {
                    return 999;
                }
                var div = document.getElementsByTagName('div');
                return div.length;
            })();";
            Task<CefSharp.JavascriptResponse> task = browser.EvaluateScriptAsync(script);
            task.ContinueWith(t =>
            {
                if (!t.IsFaulted)
                {
                    var response = t.Result;
                    if (response.Success == true)
                    {
                        int length = 0;
                        int.TryParse(response.Result.ToString(), out length);
                        if (length < 10)
                        {
                            pictureBox1.Visible = false;
                            timer1.Enabled = false;
                        }
                    }
                }
            }, TaskScheduler.FromCurrentSynchronizationContext());
        }
    }
}

MyRequestHandler.cs
using CefSharp;
using CefSharp.Handler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography.X509Certificates;

namespace CefSharpLive
{
    class MyRequestHandler : DefaultRequestHandler
    {
        public bool filter = false;
        //过滤无用内容, 提高加载速度
        public override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            if (request.ResourceType == ResourceType.PluginResource)
            {
                filter = true;
                return CefReturnValue.Continue;
            }
            else if ((!filter) && (request.ResourceType != ResourceType.Image))
            {
                return CefReturnValue.Continue;
            }
            return CefReturnValue.Cancel;
        }
    }
}

运行效果:

程序:

程序中不包含CefSharp packages,请自行通过NuGet安装CefSharp
加载flash闪烁问题,请参考:https://blog.csdn.net/qsy2000/article/details/59522253


单独编译好的可执行文件见3楼

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-12-7 16:49:16 | 显示全部楼层
楼主有没有编译好的,带库打包一个上来?

出0入0汤圆

 楼主| 发表于 2018-12-7 17:07:34 | 显示全部楼层
本帖最后由 jenkins 于 2018-12-7 17:17 编辑
tangnyzl 发表于 2018-12-7 16:49
楼主有没有编译好的,带库打包一个上来?


压缩后还要260多M,太大了


单独编译好的可执行文件, 去掉扩展名中的".zip"用7z解压








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-12-7 17:24:23 | 显示全部楼层
看起来好简单呀,能把广告也解决吗

出0入0汤圆

 楼主| 发表于 2018-12-7 17:47:31 来自手机 | 显示全部楼层
rifjft 发表于 2018-12-7 17:24
看起来好简单呀,能把广告也解决吗

本来就没有广告的

出0入0汤圆

发表于 2018-12-7 18:09:01 | 显示全部楼层
网络电视直播没有广告?难道偶开错门了?

出0入0汤圆

 楼主| 发表于 2018-12-7 18:10:21 来自手机 | 显示全部楼层
rifjft 发表于 2018-12-7 18:09
网络电视直播没有广告?难道偶开错门了?

华数TV的直播源,视频里面没有广告,网页上的广告全部删除了

出0入0汤圆

发表于 2018-12-7 19:41:45 | 显示全部楼层
请问装.net哪个版本?

出0入0汤圆

发表于 2018-12-7 19:46:08 | 显示全部楼层
用7zip也解不了,只能膜拜了。

出0入0汤圆

 楼主| 发表于 2018-12-7 19:55:26 | 显示全部楼层
klander 发表于 2018-12-7 19:41
请问装.net哪个版本?

visual studio 2015

出0入0汤圆

 楼主| 发表于 2018-12-7 19:56:12 | 显示全部楼层
klander 发表于 2018-12-7 19:46
用7zip也解不了,只能膜拜了。

下载下来的文件先把".zip"扩展名删除了然后再用7zip打开

出0入0汤圆

发表于 2018-12-7 20:18:25 | 显示全部楼层
不是会员也能使用吗?谢谢大神。

出0入0汤圆

 楼主| 发表于 2018-12-7 21:08:15 | 显示全部楼层
大豆皮 发表于 2018-12-7 20:18
不是会员也能使用吗?谢谢大神。

只有一个台,就是和浏览器在线看一样的。

出0入8汤圆

发表于 2018-12-7 21:34:52 来自手机 | 显示全部楼层
厉害。有空下载了研究研究代码,我也一直用.net写程序

出0入0汤圆

发表于 2018-12-8 00:35:32 | 显示全部楼层
下载了,不错的东西,谢谢分享

出0入0汤圆

 楼主| 发表于 2018-12-8 19:32:55 | 显示全部楼层
实现60多个频道的完整版本直播软件源代码已经发布到github,供参考。
https://github.com/zjarci/CefSharpLiveTV
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 12:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表