Entry

开源编解码项目FFmpeg迎来20周年生日 凭一己之力养活全球无数播放器!

回眸只為那壹抹淺笑 提交于 2020-12-30 20:43:14
近日,开源编解码库项目 FFmpeg 迎来20周年生日。 2000.12.20-2020.12.20 可能很多人对于FFmpeg不是特别了解,那么以下几个名字是否大家或多或少都用过呢? 暴风影音、PotPlayer、KMPlayer、WinxDvd 这些播放器是不是让大家想起年轻时候看小电影的情景呢? FFmpeg是一个和视频处理相关的开源项目,包含了丰富的多媒体解码库,这些大家常用的熟识的播放器,有良好的功能体验,是源自几乎每款都使用了FFmpeg的源代码,所以,大家明白了吧,我们能看到那么多好看的小电影,其实最该感谢的就是FFmpeg。 FFmpeg不仅被大量免费软件使用,同时使用的,还有很多大型公司,例如YouTube、iTunes等。 20年的风风雨雨,FFmpeg一路走来也是经历过不少挫折,在2011年 FFmpeg 就因为核心成员意见不一导致分裂,差点最终导致整个项目消亡殆尽。最终的结果就是,项目创始人法布里斯贝拉选择了离开FFmpeg,但是随后他与其他一起出走的开发者创建另一知名开源编解码库项目 Libav 。 FFmpeg和 Libav ,就像南慕容和北乔峰一样,是当下所有主流播放器必备的编解码库,并且这些编解码库全部开源可免费使用无需额外付费。 不过,虽然说是免费使用,但FFmpeg是基于LGPL/GPL开源的,这意味着如果某软件使用了FFmpeg的代码

Microsoft Windows Win32k 本地提权漏洞分析(CVE-2015-0057)

情到浓时终转凉″ 提交于 2020-12-30 10:49:36
作者: 深信服千里目安全实验室 原文链接: https://mp.weixin.qq.com/s/9-fXGgS0zNagyVWF2lwklg 一、漏洞信息 1、漏洞简述 漏洞名称:Microsoft Windows Win32k Local Privilege Escalation Vulnerability 漏洞编号:CVE-2015-0057 漏洞类型:UAF 漏洞影响:本地提权 CVSS3.0:N/A CVSS2.0:7.2 2、组件和漏洞概述 win32k.sys是Windows的多用户管理的sys文件。 Windows内核模式驱动程序(Win32k.sys)中存在一个特权提升漏洞,该漏洞不当处理内存中的对象时引起。成功利用此漏洞的攻击者可以获得更高的特权并读取任意数量的内核内存。攻击者可能会安装程序;查看,更改或删除数据;或创建具有完全管理权限的新帐户。 3、影响版本 Windows Server 2003 Service Pack 2 Windows Server 2008 Service Pack 2 Windows Server 2008 R2 Service Pack 1 Windows Vista Service Pack 2 Windows Server 2012 Windows Server 2012 R2 Windows 7 Service Pack 1

java容器03--HashMap源码分析

筅森魡賤 提交于 2020-12-30 04:35:47
HashMap 为了便于理解,以下源码分析以 JDK 1.7 为主。 1. 存储结构 内部包含了一个 Entry 类型的数组 table。 transient Entry[] table; Entry 存储着键值对。它包含了四个字段,从 next 字段我们可以看出 Entry 是一个链表。即数组中的每个位置被当成一个桶,一个桶存放一个链表。HashMap 使用拉链法来解决冲突,同一个链表中存放哈希值相同的 Entry。 static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry <K,V> next; int hash; Entry( int h, K k, V v, Entry<K,V> n) { value = v; next = n; key = k; hash = h; } public final K getKey() { return key; } public final V getValue() { return value; } public final V setValue(V newValue) { V oldValue = value; value = newValue; return oldValue; } public final boolean

ltp-ddt eth_switch_config学习

眉间皱痕 提交于 2020-12-29 06:52:14
# @name ALE Table test using SWITCH-CONFIG # @desc Checks default entries in ALE table and verifies addition and deletion of multicast entries. # @requires net ETHSWITCH_XS_FUNC_DUMP_UNICAST source 'common.sh'; dual_mac=`find /proc/device-tree/ -name dual_emac`; if [[ ! -z "$dual_mac" ]]; then die "This is a dual mac case, use a different dtb to test switch mode"; fi; iface=`get_eth_iface_name.sh` || die "error getting eth interface name"; mac_address=`cat /sys/class/net/$iface/address`; if [ -z "`switch-config -d|grep -i ucast| grep $mac_address`" ]; then die "TEST has failed since there is

jwt

大兔子大兔子 提交于 2020-12-28 09:44:45
1. JWT是什么 JSON Web Token (JWT),它是目前最流行的跨域身份验证解决方案 2. 为什么使用JWT JWT的精髓在于:“去中心化”,数据是保存在客户端的。 3. JWT的工作原理 1. 是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户,示例如下: {"UserName": "Chongchong","Role": "Admin","Expire": "2018-08-08 20:15:56"} 2. 之后,当用户与服务器通信时,客户在请求中发回JSON对象 3. 为了防止用户篡改数据,服务器将在生成对象时添加签名,并对发回的数据进行验证 4. JWT组成 一个JWT实际上就是一个字符串,它由三部分组成:头部(Header)、载荷(Payload)与签名(signature) JWT结构原理图:见资料“JWT的数据结构.jpg” JWT实际结构:eyJhbGciOiJIUzI1NiJ9. eyJzdWIiOiJ7fSIsImlzcyI6InpraW5nIiwiZXhwIjoxNTYyODUwMjM3LCJpYXQiOjE1NjI4NDg0MzcsImp0aSI6ImM5OWEyMzRmMDc4NzQyZWE4YjlmYThlYmYzY2VhNjBlIiwidXNlcm5hbWUiOiJ6c3MifQ.

Xamarin.Forms 3.0的新特性

旧巷老猫 提交于 2020-12-28 07:33:14
近期因为工作关系开始使用Xamarin,翻译了两篇国外的介绍3.0新特性的文章,供大家参考。 第一篇文章来自Xamarin官网,原文地址: https://blog.xamarin.com/xamarin-forms-3-0-released/ 第二篇文章来自一位MVP:Charlin Agramonte,原文地址: https://xamgirl.com/exploring-new-properties-in-xamarin-forms-3-0/ 试试Xamarin.Forms 3.0的最新版本! 我们很高兴为您带来我们最新的Xamarin.Forms 3.0版稳定版本。 这是我们迄今为止发布速度最快,功能最丰富的版本,还包括对Xamarin技术栈的极大改进,例如Visual Studio 2017中最新的XAML IntelliSense体验。 当您升级到3.0时,您会发现新的布局和样式功能,这将改善您构建UI的方式,包括Visual State Manager,Flex布局,样式表和从右至左的支持等等。 除了这些细节的优化外,XAML编译还特别关注构建时间的优化,在某些基准测试中将缩短多达88%。 Xamarin.Forms 3.0 Xamarin.Forms 3.0的发布也包含了重要的社区贡献。 这篇文章包含了每个功能的简要介绍以及一系列有用的资源,可以帮助您快速完成工作。

七,移植linux-3.19内核

╄→гoц情女王★ 提交于 2020-12-28 05:49:14
文档时间:2018-08-18 交叉编译器:arm-linux-gcc-4.3.2 Ubuntu版本:16.04 kernel版本:linux-3.19 1,分析 uboot 如何启动内核 通过之前对环境变量保存的分析可知,uboot是通过 bootcmd 来启动内核的,在 include/configs/jz2440.h 中我们有定义: #define CONFIG_BOOTCOMMAND "nand read 0x30000000 kernel; bootm 0x30000000" // bootcmd 有以下图片可知:执行 bootcmd 时,会将内核代码从nand 读到内存30000000 处,然后开始执行。 由于要执行 bootm 命令,所以我们需要打开与 bootm 命令相关的文件进行分析,从名字可知,需要打开 cmd_bootm.c (位于 common 目录下)文件,找到对应的 do_bootm 函数: ( PS:一般与 xxx 命令相关的文件都在 common 目录下,名为cmd_xxx.c ) 如上图,可以看出,do_bootm 会执行 boot_os 里的所有函数,进入到 boot_os 结构体中: 发现,虽然函数很多,但是与启动内核有关的只有 do_bootm_linux 函数,进入到 do_bootm_linux 函数 (位于 arch/arm/lib

VB无所不能之五:建立“标准”DLL动态链接库文件(1)

一曲冷凌霜 提交于 2020-12-26 12:31:22
VB无所不能之五:建立“标准”DLL动态链接库文件(1) ——作者:钟声 博客地址: http://useway.blog.51cto.com 动态链接库经常被认为是VC或者Dephi的专利,DLL文件可以将你编写的函数动态的发布,并可以被其他程序很方便的调用。 有朋友会问了,在VB里面不是有一个叫做“ActiveX DLL”的项目类型吗,生成的文件最终也是“DLL”文件啊? 没错,最终文件确实是DLL文件,但其实严格意义上VB建立的DLL并不是像VC一样的动态链接库,VB建立的是ActiveX DLL,不能像kernel32.dll”那样通过“Declare Function .....”来调用的。 本文中将详细讲解用VB生成一个DLL动态链接库文件的方法,请注意,本文将详细讲述生成一个像VC的动态链接库文件,并且调用方法也是用“Declare Function .....”来调用。 好,那么我们来建立一个DLL吧。 原理讲述: VB在编译文件的时候,采取的是两次编译的方法: 编译第一步,首先是调用c2.exe产生OBJ文件 “c2.exe”这个文件在“C:\Program Files\Microsoft Visual Studio\VB98”目录中,大家可以去找找看。“c2.exe”就是VB在编译的时候调用的命令。 编译第二步,调用Link.exe对OBJ文件进行链接

【转:分布式存储】-leveldb/rocksdb

二次信任 提交于 2020-12-26 08:19:52
本篇介绍典型的基于SStable的存储。适用于与SSD一起使用。更多存储相关见: https://segmentfault.com/a/11... 。涉及到leveldb,rocksdb。基本上分布式都要单独做,重点是单机架构,数据写入,合并,ACID等功能和性能相关的。 先对性能有个直观认识: mysql写入千条/s,读万应该没问题。redis 写入 万条/s 7M/s(k+v 700bytes,双核)读是写入的1.4倍 mem 3gb 2核。这两个网上搜的,不保证正确,就看个大概吧。 SSD上 rocksdb随机和顺序的性能差不多,写要比读性能稍好。随机读写1.7万条/s 14M/s (32核)。batch_write/read下SSD单线程会好8倍。普通write只快1.2倍。 没有再一个机器上的对比。rocksdb在用SSD和batch-write/read下的读写性能还是可以的。 第一章 levelDb 架构图 读取过程 数据的读取是按照 MemTable、Immutable MemTable 以及不同层级的 SSTable 的顺序进行的,前两者都是在内存中,后面不同层级的 SSTable 都是以 *.ldb 文件的形式持久存储在磁盘上 写入过程 1.调用 MakeRoomForWrite 方法为即将进行的写入提供足够的空间; 在这个过程中,由于 memtable

SpringBoot原理讲解

和自甴很熟 提交于 2020-12-25 20:03:02
一.问题的引入 首先我们来看一个最简单的例子。 我们先创建一个SpringBoot的工程,如何创建一个SpringBoot工程就不说了,不会请自行解决。然后写一个controller类,通过请求路径,返回HelloWorld在浏览器页面上显示。   上面两张图就是程序的一个整体的结构和运行的结果,那么问题来了,SpringBoot程序中没有任何配置,不像Spring框架,写一大堆配置信息在xml文件中,那么程序是怎么将我们这里的Controller类扫描到spring容器中的呢? 二.原理讲解。 首先第一点,我们来看一下SpringBoot的启动类, package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { //启动SpringBoot应用 SpringApplication.run(DemoApplication.class, args); } }    其中