精华内容
下载资源
问答
  • 利用Bilibili开源库ijkplayer实现视频直播 最近研究视频直播的技术,起初了解了直播APP需要的技术体系,包括音视频的编码、解码、推流等,但对于在真实项目中最好是使用优秀的第三方框架来实现相关的功能,下面...

    利用Bilibili的开源库ijkplayer实现视频直播

    最近研究视频直播的技术,起初了解了直播APP需要的技术体系,包括音视频的编码、解码、推流等,但对于在真实项目中最好是使用优秀的第三方框架来实现相关的功能,下面介绍下ijkplayer实现视频的播放解码等。

    第一步在GitHub上面下载ijkplayer的源码

    这里是官方给出的在iOS上面构建的方式

    git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
    cd ijkplayer-ios
    git checkout -B latest k0.8.1
    
    ./init-ios.sh
    
    cd ios
    ./compile-ffmpeg.sh clean
    ./compile-ffmpeg.sh all

    构建完成后,如图所示,有需要的可以到这里下载
    这里写图片描述

    第二步在项目中集成该框架

    这里我是把IJKMdeiaPlayer制作成framework在项目中使用的,这样的缺点就是看不到源码,开发阶段建议直接使用框架。

    1.打开项目工程选择模拟器直接编译制作framework
    这里写图片描述

    说明:
    1.设备选择模拟器或者真机是制作不同平台的framwork
    2. 真机和模拟器分为DebugRelease版本

    Debug和Release版本的切换操作
    这里写图片描述

    这里写图片描述

    2.查看制作的framework
    这里写图片描述
    这里写图片描述

    3.有时候测试阶段需要在模拟器和真机上测试,这时候就需要两个版本的framework,合并framework是个不错的选择
    进入framework文件夹

    // 合并framework
    lipo -create Debug-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Debug-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
    
    // 查看framework信息
    lipo -info IJKMediaFramework

    将刚生成的IJKMediaFramework 拖入任意一个文件夹替换原来的IJKMediaFramework即可,新的IJKMediaFramework就合并好了
    这里写图片描述

    4.将IJKMediaFramework导入框架使用

    编译使用报错,需要添加libz.tbd,libc++.tbd两个依赖包
    这里写图片描述

    5.利用框架加载直播画面

    let options = IJKFFOptions.byDefault()
    // 硬解码
    options?.setOptionIntValue(1, forKey: "videotoolbox", of: kIJKFFOptionCategoryPlayer)
    ijkPlayer = IJKFFMoviePlayerController(contentURLString: liveURLString, with: options)
    let width = UIScreen.main.bounds.width
    ijkPlayer?.view.bounds = CGRect(x: 0, y: 0, width: width, height: width * 3 / 4)
    ijkPlayer?.view.center = view.center
    view.addSubview(ijkPlayer!.view)
    ijkPlayer?.prepareToPlay()

    实现效果如下:
    这里写图片描述

    展开全文
  • bilibili代码泄露后的一点思考

    千次阅读 2019-04-22 23:16:36
    bilibili代码被一个程序员开源在了github上,虽然已经被删除,但是现在有很多的人上传bilibili代码, 里面有很多硬编码的密码,安全系数实在是太低。而且代码开源之后,各种各样的bug就暴漏在人们的面前,B站...

    bilibili的代码被一个程序员开源在了github上,虽然已经被删除,但是现在有很多的人上传bilibili的代码,
    里面有很多硬编码的密码,安全系数实在是太低。而且代码被开源之后,各种各样的bug就暴漏在人们的面前,B站无疑会面临更大的挑战。md5并不安全,如何增加破解的难度?可以使用bcrypt来解决这个问题。

    加密问题:

    首先安装 bcrypt 这个库

     pip install bcrypt
    
    >>> import bcrypt
    >>> password = "mypassword"
    >>> # 用一个随机的盐值来加密密码
    >>> # bcrypt.gensalt() 还可以接受一个参数来控制它要计算多少次,默认是 12
    >>> hashed = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
    >>> # 下面这个 hashed 就是加密后的值
    >>> hashed
    '$2b$12$nf3TdEFJZ6AtRA7N9r1f.OANfpFS9Qxtklo4km.LHbuEV7Mu5jJN2'
    
    >>> # 验证明文密码是不是加密后的值
    >>> if bcrypt.checkpw(password.encode("utf-8"), hashed):
    ...     print("It Matches!")
    ... else:
    ...     print("It Does not Match :")
    

    权限管理:

    代码被开源,很大的问题是没有进行好的权限管理,员工都能拿到所有的代码,代码完全是暴露的状态,如果没有限制,是否会出现有的程序员直接从本地master提交远程master的情况,这些都是很危险的情况。自己公司的代码管理的时候,一定要严格的管理权限,不该给的权限,一定不能给。

    展开全文
  • bilibili开源弹幕库UML类图

    千次阅读 2017-09-06 12:09:47
    关于bilibili开源弹幕库UML类图因为公司业务需要使用要弹幕库,做为一个新手的我,被大神安排了一项小任务,锻炼我去熟悉下哔哩哔哩开源的弹幕库的代码。而最快的方式就是写一份关于弹幕库的UML类图。 由于Android ...

    关于bilibili开源弹幕库UML类图

    因为公司业务需要使用要弹幕库,做为一个新手的我,被大神安排了一项小任务,锻炼我去熟悉下哔哩哔哩开源的弹幕库的代码。而最快的方式就是写一份关于弹幕库的UML类图。
    由于Android studio没有自动化展示类与类之间的关系,如果说通过阅读代码再去跟踪所有的代码调用,会导致对代码的了解不够深透,而且也容易导致忽略某些细节。所以,我在网上找了一个方法,往Android studio中加入插件simpleUML,让其通过代码自动实例化UML类图。
    插件地址:http://plugins.jetbrains.com/plugin/4946?pr=idea
    使用方法参考博文:http://www.jianshu.com/p/9b92b8422b4c
    弹幕库在github上有,有需要的朋友可以上github寻找下~~
    项目地址:https://github.com/Bilibili/DanmakuFlameMaster
    使AS自动实例化UML的步骤:
    1.添加类图
    添加UML类图
    2.根据自己的需求添加UML关系标识(弱、强拥有之类的)
    按需添加标识
    3.因为刚创建好的UML图是所有图标重叠在一起的,所以需要按下该按钮进行排列。
    自动排列UML图
    4.最终就能得到我们想要的类图
    弹幕库类图

    展开全文
  • bilibili播放器HTML5开源
  • 实现摄像头的直播功能其实有许多方案,像是安装vlc插件、rtsp转rtmp然后使用videojs通过flash播放rtmp,以及hls .m3u8等方式...经过一番查找,最终决定使用B站(bilibili开源的flvjs作为解决方案,其原理是后端用f...
    实现摄像头的直播功能其实有许多方案,像是安装vlc插件、rtsp转rtmp然后使用videojs通过flash播放rtmp,以及hls .m3u8等方式
    然而现今的浏览器对于vlc插件几乎都不再支持了,flash在2020年也将被chrome停止支持,而.m3u8的方案用来做直播的话似乎延迟很高
    经过一番查找,最终决定使用B站(bilibili)开源的flvjs作为解决方案,其原理是后端用ffmpeg将rtsp视频流转换为flv,然后通过websocket传输flv视频流,然后前端通过websocket获取到视频流后,使用flvjs对视频流再一次处理并进行播放,这是一套无插件无flash免费的视频直播解决方案。

    Demo github地址:https://github.com/LorinHan/flvjs_test

    1.使用vlc等工具测试,确保rtsp流可连接

    2.后端环境:node express

    2.1 安装第三方依赖

    npm install express express-ws fluent-ffmpeg websocket-stream -S -D

    2.2 编写代码 index.js

    其中setFfmpegPath这里是指明了ffmpeg的安装路径,如果没有安装,请看第4点

    var express =  require("express");
    var expressWebSocket = require("express-ws");
    var ffmpeg = require("fluent-ffmpeg");
    ffmpeg.setFfmpegPath("D:/ffmpeg-20191031-7c872df-win64-static/ffmpeg-20191031-7c872df-win64-static/bin/ffmpeg");
    var webSocketStream = require("websocket-stream/stream");
    var WebSocket = require("websocket-stream");
    var http = require("http");
    function localServer() {
        let app = express();
        app.use(express.static(__dirname));
        expressWebSocket(app, null, {
            perMessageDeflate: true
        });
        app.ws("/rtsp/:id/", rtspRequestHandle)
        app.listen(8888);
        console.log("express listened")
    }
    function rtspRequestHandle(ws, req) {
        console.log("rtsp request handle");
        const stream = webSocketStream(ws, {
            binary: true,
            browserBufferTimeout: 1000000
        }, {
            browserBufferTimeout: 1000000
        });
        let url = req.query.url;
        console.log("rtsp url:", url);
        console.log("rtsp params:", req.params);
        try {
            ffmpeg(url)
                .addInputOption("-rtsp_transport", "tcp", "-buffer_size", "102400")  // 这里可以添加一些 RTSP 优化的参数
                .on("start", function () {
                    console.log(url, "Stream started.");
                })
                .on("codecData", function () {
                    console.log(url, "Stream codecData.")
                 // 摄像机在线处理
                })
                .on("error", function (err) {
                    console.log(url, "An error occured: ", err.message);
                })
                .on("end", function () {
                    console.log(url, "Stream end!");
                 // 摄像机断线的处理
                })
                .outputFormat("flv").videoCodec("copy").noAudio().pipe(stream);
        } catch (error) {
            console.log(error);
        }
    }
    localServer();
    
       

    2.3 启动后端,node index.js


    3.前端环境,采用vue

    3.1 vue的搭建就不赘述了,构建好一个vue项目之后,npm install flv.js -S -D

    3.2 编写代码

    video标签中的muted属性,是因为在视频流加载好之后,autoplay属性无法自动播放,加上这个属性后就可以实现了

    <template>
        <div>
            <video class="demo-video" ref="player" muted autoplay></video>
        </div>
    </template>
    <script>
    import flvjs from "flv.js";
    export default {
        data () {
            return {
              id: "1",
              rtsp: "rtsp://admin:12345@192.168.0.101:554/h264/ch1/main/av_stream",
                player: null
            }
        },
        mounted () {
            if (flvjs.isSupported()) {
                let video = this.$refs.player;
                if (video) {
                    this.player = flvjs.createPlayer({
                        type: "flv",
                        isLive: true,
                        url: `ws://localhost:8888/rtsp/${this.id}/?url=${this.rtsp}`
                    });
                    this.player.attachMediaElement(video);
                    try {
                        this.player.load();
                        this.player.play();
                    } catch (error) {
                        console.log(error);
                    };
                }
                // if (video) {
                //     this.player = flvjs.createPlayer({
                //         type: "flv",
                //         url: `/static/test.flv`
                //     });
                //     this.player.attachMediaElement(video);
                //     try {
                //         this.player.load();
                //         this.player.play();
                //     } catch (error) {
                //         console.log(error);
                //     };
                // }
            }
        },
        beforeDestroy () {
            this.player.destory();
        }
    }
    </script>
    <style>
        .demo-video {
            max-width: 880px; 
            max-height: 660px;
        }
    </style>
    
       

    demo

    4.到此为止,如果你有ffmpeg的环境,应该可以在前端看到画面了,如果没有ffmpeg的话请进行安装

    4.1 访问官网ffmpeg.zeranoe.com/builds/,根据操作系统自行选择安装

    4.2 下载好后进行解压,在后端设置ffmpeg路径的代码中指向解压路径下的bin目录下的ffmpeg

    ffmpeg安装路径

    var ffmpeg = require("fluent-ffmpeg");
    ffmpeg.setFfmpegPath("D:/ffmpeg-20191031-7c872df-win64-static/ffmpeg-20191031-7c872df-win64-static/bin/ffmpeg");
    
    展开全文
  • js实现视频直播,结合bilibili开源项目

    千次阅读 2019-09-17 10:00:06
    flv.js为核心,使用构造器来创建video标签,...经过实际 测试这个方案是可行的,bilibili开源的这个flvjs确实好用,以下是相关代码文件 <html lang="en"> <head> <meta charset="UTF-8"> <...
  • Android ijkplayer 编译的 bilibili 开源编译版本上,去掉失败的依赖,增加对 https 支持
  • jni4android是bilibili开源的一个工具,自动根据java类生成.h和.c的反射文件这个项目就是一个简单的使用示例。 jni4android项目地址 介绍 由bilibili开源的用于快速开发jni的工具,在ijkplayer中使用。主要作用是...
  • BiliHP智能姬是哔哩哔哩哩主播助手项目,BiliBili弹幕姬支持安卓/苹果/ Mac / IOS / Linux / Windows / Openwrt全系统覆盖,代码开源,选择BiliHP一站式解决所有问题 弹幕姬项目正在筹备中,等待8月逼站改版完成将...
  • 仿最新BiliBili客户端(已开源

    千次阅读 2020-04-27 20:37:38
    成果 效果图如下: Version 1.1.0 架构搭建 分析 Api 完成主页界面 Version 1.2.0 完成直播播放页面 集成IjkPlayer并简易封装 集成DanmakuFlameMaster和来自czp3009的bilibili-api完成弹幕功能 一些开源库的更新 ...
  • 4.对代码的解析(拒绝白嫖,从我做起,直接运行代码会报错) ## 2020.04.16 ## jun_军 ## qq:604803231 ## blog主页:https://blog.csdn.net/weixin_44868057 ## qq交流群:635032789 (进群密码:词达人) from
  • 在网上也是寻找了许多直播的播放器,无意间发现Bilibili开源了一款播放器ijkplayer,想从最开始的步骤集成的同学可以点进去查看集成教程。当然,我这里为大家已经都封装好啦,只要简单的几步就可以使用该播放器了。...
  • 前言 之前Amusi整理了1467篇CVPR 2020所有论文PDF下载资源,以及270篇CVPR 2020代码开源论文项目,详见:270篇CVPR ...CVPR 2020代码开源项目一放出,得到不少CVers的关注,重点是:开源和根据方向分类。目前star数已
  • Bilibili视频中的演示代码
  • 300+篇CVPR 2020代码开源的论文,全在这里了! CVPR 2020代码开源项目一放出,得到不少CVers的关注,重点是:开源和根据方向分类。目前star数已经来到2000+,期间也有不少国内外的CVPR 2020论文作者提交issue,分享...
  • bilibili-codes:我提供的源代码
  • CVPR 2020代码开源项目一放出,得到不少CVers的关注,重点是:开源和根据方向分类。目前star数已经来到2000+,期间也有不少国内外的CVPR 2020论文作者提交issue,分享他们的工作。 在此再次更新数据,代码开源的...
  • 原文地址:http://blog.csdn.net/hxqneuq2012/article/details/52813937B 站建立开源工作组:ijkplayer 等多个项目开源SegmentFault 兄弟 + 基友单位弹幕视频网 Bilibili(B 站)近日在 GitHub 网站上建立了开源工作...
  • CVPR 2020代码开源的论文最全合集

    千次阅读 2020-06-20 18:33:16
    CVPR 2020 论文开源项目合集,同时欢迎各位大佬提交issue,分享CVPR 2020开源项目 关于往年CV顶会论文(如CVPR 2019、ICCV 2019、ECCV 2018)以及其他优质CV论文和大盘点,详见: ...
  • 高仿bilibili项目 Github链接:(https://github.com/MichaelHuyp/Bilibili_Wuxianda) 目前完成了如下功能: 启动页的业务逻辑带有阻力效果的轮播图直播、推荐、番...集成基于来疯直播开源的LFLiveKit的手机直播功能
  • Bilibili网站后台代码泄露,从注释看到的一些感想。 昨天Github发生了一件算是不小的事情,著名B站后台代码被人恶意开源了。虽然只持续了6个多小时,但是Fork数都6000+了。我也下载了份代码,应该是...
  • 阅读本文大概需要 2.8 分钟。 陌陌风控系统正式开源 ...陌陌风控系统静态规则引擎,零基础简易便捷的配置多种复杂规则,实时高效管控用户异常行为。...Sniper:bilibili 开源的轻量级 Go 业务框架 Sn...
  • bilibili 网站开源。 一个实现了在 HTML5 视频中播放 FLV 格式视频的 JavaScript 库。它的工作原理是将 FLV 文件流转码复用成 ISO BMFF(MP4 碎片)片段,然后通过 Media Source Extensions 将 MP4 片段喂进...
  • 0 前言 ...行人重识别部分是利用Bag of Tricks and A Strong ReID Baseline的开源代码基础上做的,我也非常喜欢这个工作,感觉还是很有帮助的,并且仅仅利用全局特征,没有那么多花哨的设计: ...
  • bilibili/discovery github 地址: https://github.com/bilibili/discovery 该库定性为: 使用 golang 复刻了下 euerka 介绍该库前,先看下 euerka euerka euerka 一个服务发现中间件 与市场上其他产品的比较如下 ...
  • bilibili_web_developer 此仓库是专门收集bilibili网站的提供前端html + css + js网页教程up主视频教程对应的源代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,430
精华内容 2,572
关键字:

bilibili代码开源