Gstreamer基础教程01 - Hello World

John.Leng 2019-06-12 11:04:00 阅读数:26 评论数:0 收藏数:0

摘要

在面对一个新的软件库时,第一步通常实现一个“hello world”程序,来了解库的用法。对于GStreamer,我们可以实现一个极简的播放器,来了解GStreamer的使用。

 

环境配置

为了快速掌握Gstreamer相关的知识,我们优先选择Ubuntu作为我们的开发环境,其他平台的开发会在后续文章单独介绍。如果还没有Ubuntu虚拟机,可以在OSBoxes中直接下载Ubuntu 18.04的VirtualBox或VMware镜像文件,节省安装时间。

安装编译工具及库

我们在基本介绍中提到,gstreamer的框架及插件位于不同的源码包中,所以我们需要安装多个软件包:

$ sudo apt-get install gcc build-essential libgstreamer1.- gstreamer1.-plugins-base gstreamer1.-plugins-good \
gstreamer1.-plugins-bad gstreamer1.-plugins-ugly gstreamer1.-libav gstreamer1.-doc gstreamer1.-tools \
gstreamer1.-x gstreamer1.-alsa gstreamer1.-gl gstreamer1.-qt5 gstreamer1.-pulseaudio

 

Hello World

我们首先使用官方的HelloWorld作为我们的第一个应用:basic-tutorial-1.c

#include <gst/gst.h>

int main (int argc, char *argv[])
{
  GstElement *pipeline;
  GstBus *bus;
  GstMessage *msg;

  /* Initialize GStreamer */
  gst_init (&argc, &argv);

  /* Build the pipeline */
  pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL);

  /* Start playing */
  gst_element_set_state (pipeline, GST_STATE_PLAYING);

  /* Wait until error or EOS */
  bus = gst_element_get_bus (pipeline);
  msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
      GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

  /* Free resources */
  if (msg != NULL)
    gst_message_unref (msg);
  gst_object_unref (bus);
  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);
  return ;
}

通过下面的命令编译得到可执行程序

$ gcc basic-tutorial-.c -o basic-tutorial- `pkg-config --cflags --libs gstreamer-1.0`

编译成功后,我们可以得到可执行文件,执行 basic-tutorial-1,会在弹出的窗口中,自动读取服务器上的sintel_trailer-480p.webm视频文件并播放。如果网络环境不理想,在播放的过程中会经常处理缓冲状态,造成播放卡顿。也可以先下载媒体文件,将uri的http路径替换为本地uri(例如: uri=file:///home/john/sintel_trailer-480p.webm)避免网络的影响。

 

源码分析

通过上面的代码,我们达到了播放一个视频文件的目的,接下来通过分析这个简短的程序来了解gstreamer应用是如何工作的。


GStreamer初始化

  /* Initialize GStreamer */
  gst_init (&argc, &argv);

首先我们调用了gstreamer的初始化函数,该初始化函数必须在其他gstreamer接口之前被调用,gst_init会负责以下资源的初始化:

  • 初始化GStreamer库
  • 注册内部element
  • 加载插件列表,扫描列表中及相应路径下的插件
  • 解析并执行命令行参数

在不需要gst_init处理命令行参数时,我们可以讲NULL作为其参数,例如:gst_init(NULL, NULL);

 

创建Pipeline

/* Build the pipeline */
pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL);

这一行是示例中的核心逻辑,展示了如何通过gst_parse_launch 创建一个playbin的pipeline,并设置播放文件的uri。

gst_parse_launch

在基本介绍中我们了解了Pipeline的概念,在pipeline中,首先通过“source” element获取媒体数据,然后通过一个或多个element对编码数据进行解码,最后通过“sink” element输出声音和画面。通常在创建较复杂的pipeline时,我们需要通过gst_element_factory_make来创建element,然后将其加入到GStreamer Bin中,并连接起来。当pipeline比较简单并且我们不需要对pipeline中的element进行过多的控制时,我们可以采用gst_parse_launch 来简化pipeline的创建。
这个函数能够巧妙的将pipeline的文本描述转化为pipeline对象,我们也经常需要通过文本方式构建pipeline来查看GStreamer是否支持相应的功能,因此GStreamer提供了gst-launch-1.0命令行工具,极大的方便了pipeline的测试。

playbin

我们知道pipeline中需要添加特定的element以实现相应的功能,在本例中,我们通过gst_parse_launch创建了只包含一个element的Pipeline。
我们刚提到pipeline需要有“source”、“sink” element,为什么这里只需要一个playbin就够了呢?是因为playbin element内部会根据文件的类型自动去查找所需要的“source”,“decoder”,”sink”并将它们连接起来,同时提供了部分接口用于控制pipeline中相应的element。
在playbin后,我们跟了一个uri参数,指定了我们想要播放的媒体文件地址,playbin会根据uri所使用的协议(“https://”,“ftp://”,“file://”等)自动选择合适的source element(此例中通过https方式)获取数据。

 

设置播放状态

/* Start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING);

这一行代码引入了一个新的概念“状态”(state)。每个GStreamer element都有相应都状态,我们目前可以简单的把状态与播放器的播放/暂停按钮联系起来,只有当状态处于PLAYING时,pipeline才会播放/处理数据。
这里gst_element_set_state通过pipeline,将playbin的状态设置为PLAYING,使playbin开始播放视频文件。

 

等待播放结束

/* Wait until error or EOS */
bus = gst_element_get_bus (pipeline);
msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

这几行会等待pipeline播放结束或者播放出错。我们知道GStreamer框架会通过bus,将所发生的事件通知到应用程序,因此,这里首先取得pipeline的bus对象,通过gst_bus_timed_pop_filtered 以同步的方式等待bus上的ERROR或EOS(End of Stream)消息,该函数收到消息后才会返回。
我们会在下一篇文章中继续介绍消息相关的内容。

到目前为止,GStreamer会处理视频播放的所有工作(数据获取,解码,音视频同步,输出)。当到达文件末端(EOS)或出错(直接关闭播放窗口,断开网络)时,播放会自动停止。我们也可以在终端通过ctrl+c中断程序的执行。

 

释放资源

/* Free resources */
if (msg != NULL)
  gst_message_unref (msg);

gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);

这里我们将不再使用的msg,bus对象进行销毁,并将pipeline状态设置为NULL(在NULL状态时GStreamer会释放为pipeline分配的所有资源),最后销毁pipeline对象。由于GStreamer是继承自GObject,所以需要通过gst_object_unref 来减少引用计数,当对象的引用计数为0时,函数内部会自动释放为其分配的内存。
不同接口会对返回的对象进行不同的处理,我们需要详细的阅读API文档,来决定我们是否需要对返回的对象进行释放。

 

总结

在本教程中,我们掌握了:

  • 如何中Ubuntu下搭建GStreamer的开发环境。
  • 如何通过gst_init()初始化GStreamer。
  • 如何通过gst_parse_launch()快速构建一个pipeline。
  • 如何使用playbin自动播放文件。
  • 如何使用gst_element_set_state()来控制pipeline开始播放。
  • 如何通过bus等待播放结束。

在下一篇文章中,我们将继续介绍GStreamer的基本概念,以及pipeline的另一种构造方式。

 

引用

https://gstreamer.freedesktop.org/documentation/tutorials/basic/hello-world.html
https://gstreamer.freedesktop.org/documentation/installing/on-linux.html

 

作者: John.Leng
本文版权归作者所有,欢迎转载。商业转载请联系作者获得授权,非商业转载请在文章页面明显位置给出原文连接.

版权声明:本文为[John.Leng]原创文章
转载请带上:http://copyfuture.com/blogs-details/201906121104532738hmf783hyp53ge0
或:https://www.cnblogs.com/xleng/p/11008239.html


  1. 137家瓷砖企业倒闭、产量下降11%、2018是陶瓷行业最差的一年?
  2. 警钟!河北保定大沙河段:非法采砂仍疯狂进行!百姓被逼贱卖农田、环境执法患上“失明症”!
  3. 为道塾·龙史传真|龙弟子秦彼得:揭开李小龙“练功房”之谜
  4. 《邪恶力量》明年完结
  5. 调查: 不同软件的受欢迎程度
  6. [读书笔记]《一万小时天才理论》
  7. Vue 组件局部刷新
  8. 程序员入职腾讯天美,意外成为王者荣耀最富玩家!
  9. 京东物流第二季度将扩招5000人 备战618需要
  10. 华为被Wi-Fi联盟、SD协会等组织暂停成员资格
  11. 作为一位程序猿,说说爬虫IP代理哪家强?
  12. 董璇经历坎坷仍不忘记录女儿成长,3岁小酒窝浓眉大眼像个小公主
  13. 多线程基本概念
  14. Smart欲开启电动时代,这辆车若能量产,会不会成为爆款
  15. 这些物品的辐射远超电脑,为了宝宝的健康,家长有必要知道
  16. 张家港行已申请诉前保全 请求判令*ST康得子公司归还贷款1.98亿元
  17. 深度学习在推荐系统的应用(二)
  18. 如何提高自己的为人处世能力
  19. python中的property属性
  20. 全球首款!厂商熬夜做出折叠屏手机壳,看来我们不用倒闭了。
  21. 2019自驾老挝,最新详细攻略,避免拒绝通关(二)
  22. 贾乃亮首谈“离婚”:感谢她放我一条生路。
  23. 面试:django
  24. 巴基斯坦海军和印度海军对峙,谁更胜一筹?印度海军明显占优势!
  25. 新动向!监管层正动用技术手段严控场外配资,今年来证监会已屡次提醒场外配资风险
  26. 崇祯为什么非要杀死袁崇焕
  27. python接口自动化(十五)--参数关联接口(详解)
  28. 小程序生命周期函数
  29. Hadoop2.0完全分布式集群搭建方法(CentOS7+Hadoop2.7.7)
  30. .NetCore WebApi——Swagger简单配置
  31. set类型的应用场景 —— Redis实战经验
  32. 谷歌、微软、腾讯纷纷进入2019年游戏产业的第一波风口:云游戏
  33. VMware 收购 Avi Networks,加速多云环境交付
  34. Java设计模式----桥接模式
  35. 联想推出全球首款折叠屏电脑ThinkPad X1
  36. 魔兽怀旧服∶野战玩家选择什么职业最爽?选择术士的你绝对错了!
  37. 小程序多端框架全面测评:chameleon、Taro、uni-app、mpvue、WePY
  38. 详细介绍redis的集群功能,带你了解真正意义上的分布式
  39. 打造自己的Android常用知识体系
  40. 那时候雪茄、雪茄配件都那么小巧
  41. 春节大考结束 我们拿到了抖音快手微视的成绩单
  42. 反射机制有个坑----java
  43. netcore使用 jenkins + supervisor 实现standalone下多副本自动化发布
  44. uml-----什么是UML
  45. 联想为何总被“误会”?一月3陷"汉奸"泥潭,网友:恨铁不成钢
  46. HTML基础
  47. Uncaught TypeError: Cannot set property 'render' of undefined
  48. 俄专家:“龙”飞船将与“联盟”飞船激烈竞争
  49. 英特尔扩大爱尔兰产能 投资70亿欧元新建两芯片厂
  50. 当你自律,人生无敌!
  51. 欧空局称火星有一个巨大的地下水系统!网友:我们搬去上面吧!
  52. 数据挖掘预处理之《单连续变量》
  53. 快速搞懂 ASP.NET MVC
  54. Splay
  55. 这款非洲坦克可是暴锤过62辆苏联坦克!一战成名!
  56. 如何使用JS来开发室内地图商场停车场车位管理系统
  57. 华为放着自研系统不用,为何却要死守Android?
  58. hbase snapshot 表备份/恢复
  59. 欧洲族长Perkz又开始了?直播吐槽北美比赛太烂:看了会变捞!
  60. 将句子表示为向量(下):基于监督学习的句子表示学习(sentence embedding)
  61. 2019款宝马X5内饰乘坐体验!终于知道它为什么卖这么贵了!
  62. 蓝光发展:增速进入大拐点,未挤进千亿俱乐部|财报诊所
  63. 面试 Java 高级后端开发,要准备哪些知识点?
  64. 《麻省理工科技评论》发布2019年全球十大突破性技术
  65. Steam 2月全球新游报告:《皇牌空战7》销量夺冠!
  66. 春季养肝正当时,“三多三少”要记好!中医专家:食物应该这么吃
  67. 图解--队列、并发队列
  68. 胜利日大空降:美国伞兵解放山东潍坊市日本集中营作战行动
  69. Windows Phone 7 培训总结
  70. 雪茄状小行星Oumuamua真是外星飞船?科学家提出关于它的新猜想
  71. 【TOGAF】总体认知
  72. 出道前换脸,靠大她30岁男友上位,如今又取代刘亦菲演好莱坞大片
  73. redis环境搭建及一主二从三哨兵模式配置
  74. 清代时军队装备了哪些火炮,威力又如何?
  75. SD-WAN是虚火,还是真火?
  76. 为什么中国造不出好的发动机?是缺钱,还是缺技术?
  77. iOS SKStoreProductViewController的应用
  78. Eclipse - 安装lombok后注解无效
  79. 《全境封锁2》爆出网络问题 育碧表示已经着手修复
  80. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
  81. 吴京前任和现任近照,差距真的好明显,吴京:感谢当年抛弃之恩
  82. 3·15来了,这个保险消费投诉量你想到了吗?
  83. 刹车时底盘频繁发出刺耳的异响,女车主看到刹车片时有些后怕
  84. “马六甲毒蝎”让邻居很难受!新加坡采购四架F-35惊扰马来西亚
  85. 男人有娃后的“睡姿演变史”,可以说是很悲伤了,哈哈哈哈哈
  86. C与C++社区混战,C#会重蹈覆辙吗?
  87. 韩星胜利声明退出娱乐圈 法律人士:涉嫌两项罪名待调查
  88. 晚清朝廷大臣的妻妾老照片:眉清目秀的洋媳妇,美丽的偏房小妾
  89. 大众又良心了,全新途岳空间大16万起
  90. 又一架737-8客机出事,是否有缺陷不宜现在下结论
  91. SqlServer 查询最近一段范围中的数据
  92. 当红女星被逼喝酒?林允抢杨紫资源?陈飞宇死咬刘昊然?
  93. 读书笔记——《redis入门指南(第2版)》第三章 入门
  94. 法国内政部长:对暴力行为“零容忍”
  95. Java岗招聘标准水涨船高,五年Java程序员表示面试太难了
  96. 名字登上韩网热搜 TWICE志效爆机场泪崩粉丝心疼
  97. 演员赵立新就日军侵华不毁故宫等不当言论致歉
  98. 深网 | 一张迟到的船票与尘埃落定的全球5G竞争格局
  99. DHCP地址分配服务
  100. 爱可以穿越一切——《星际穿越》的时空观

  1. 前端笔记之NodeJS(一)初识NodeJS&内置模块&特点(1713)
  2. Python开发:部分第三方库无法在线安装解决方法(1519)
  3. Matlab 2019a 安装包下载以及安装和激活(1421)
  4. React 与 React-Native 使用同一个 meteor 后台(1338)
  5. Delphi 开发微信公众平台 (二) 用户管理(1292)
  6. C#读取excel文件提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序(1146)
  7. [深度应用]·实战掌握Dlib人脸识别开发教程(1113)
  8. 币安称 4000 万美元比特币被盗(1057)
  9. 《跃迁-成为高手的技术》之联机学习(1052)
  10. 独家 | 寒武纪二代芯片发布在即,提前解密如何挑战英伟达!(982)
  11. 使用 C 语言实现一个 HTTP GET 连接(971)
  12. WebGL three.js学习笔记 纹理贴图模拟太阳系运转(965)
  13. 【译】.NET Core 是 .NET 的未来(861)
  14. Sublime Text3 最新版3207 安装及破解(804)
  15. 科学家在太平洋水域发现奇特的“砷呼吸”微生物(762)
  16. 小米有品员工签军令状,自动放弃年终奖!(740)
  17. 微软宣布 .NET 5 计划,支持跨平台、移动开发(740)
  18. 【预警通告】Weblogic反序列化远程代码执行漏洞(737)
  19. layui的table参数条件缓存问题(728)
  20. 75条笑死人的知乎神回复,用60行代码就爬完了(721)
  21. Linux学习(三):XShell连接虚拟机+开通22端口(713)
  22. Visual Studio 2019 正式发布,重磅更新,支持live share(692)
  23. 【预警通告】Apache Tomcat远程代码执行漏洞CVE-2019-0232(674)
  24. SQL简介及MySQL的安装目录详解(649)
  25. 10亿元巨贪山西吕梁原副市长张中生二审维持死刑判决(638)
  26. 5月13日公告精读丨一字跌停后,这只300亿市值的白马股出来澄清了(617)
  27. Vue之路由(603)
  28. css-博客样式初体验(562)
  29. 如果想转行学习WEB前端,这样学也许更加利于找工作(557)
  30. 2019年程序员最值得学习的思维利器——任务分解(555)
  31. 彭博社:苹果A13芯片即将产量 新iPhone"浴霸"无疑(539)
  32. 声明与定义的区别(521)
  33. MongoDB创建数据库和删除数据库05-14学习笔记(493)
  34. PJzhang:Lucifer1993的struts-scan漏洞全量检测工具(492)
  35. 吴奇隆当爹!前妻马雅舒开心复出拍戏,颜值吸睛气质超赞(490)
  36. K8s集群安装--最新版 Kubernetes 1.14.1(490)
  37. 【威胁通告】Oracle全系产品2019年4月关键补丁更新(483)
  38. 英媒:阿里将允许外国零售商在阿里平台上销售商品(475)
  39. Confluence SSRF及远程代码执行漏洞处置手册(470)
  40. 舍命生子产妇吴梦丈夫怒斥:没抢肺源不是精神分裂,网友断章取义(469)
  41. Visual Studio 2019 正式发布(460)
  42. 短视频内容重复,如何伪原创处理(456)
  43. [翻译] Visual Studio 2019: 极速编码. 智能工作. 创造未来.(438)
  44. 机器学习 ML.NET 发布 1.0 RC(435)
  45. 美方拟升级关税措施?中方:反制!(433)
  46. 刘强东身边的CXO还有谁“幸存”(430)
  47. 香饽饽!米兰双雄均有意荷兰小将贝尔赫韦因(429)
  48. 阿里巴巴2018年纳税516亿元 同比增40%(427)
  49. 绿盟科技互联网安全威胁周报NSFOCUS-19-13(407)
  50. 告诉你去越南芽庄必带回的好东西(405)
  51. 宝宝多大可以自己吃饭?错过孩子独立吃饭黄金期,等着后悔吧(404)
  52. 娶不起老婆就来这6个国家,菲律宾的女孩是首选,一定别娶韩国女(398)
  53. 小米手机卖不动了?(387)
  54. 针对django2.2报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: ill....(386)
  55. 太奇葩!买100元债只给1.63元购物券和1.11元现金?网友炸锅:得买多少债券才能换一双鞋(385)
  56. 马光远:全球货币政策进入摇摆期,包括房价的资产价格何去何从(384)
  57. 我司使用了六年的分布式锁(382)
  58. 雷军清华演讲实录:小米9年的创新、变革与未来(379)
  59. 积分一样却选手下败将出战国际赛,《最强大脑》云队选手被坑了?(374)
  60. F#周报2019年第14期(371)
  61. Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!(368)
  62. Webpack 4教程 - 第八部分 使用prefetch和preload进行动态加载(368)
  63. 报告显示:一季度中国家庭总资产缩水而消费支出增加(341)
  64. 《最强大脑》要垮?桑洁魏坤琳出轨细节被扒,戚薇才是神助攻(337)
  65. 直认与老公感情淡了!27岁TVB上位女星:我们不是好熟(336)
  66. 他联系叙恐怖分子“卖军火”,称能搞到2000枚导弹,关键时刻中国警察出手(335)
  67. 谁是苏小明饭局爆粗偷拍者?知情人称另有其人(325)
  68. 苹果应用商店被判垄断?然而并没有(324)
  69. Oracle甲骨文大规模裁员,你背离时代就会被淘汰(324)
  70. 日本明仁天皇退位,日本“平成”年代结束(316)
  71. 华电教授孙玉兵被指与昔日同学共同学术造假,多所高校调查(309)
  72. 迪玛希好惨!昨晚《歌手》为声入人心男团帮帮唱,却再被指控侵权(307)
  73. linux系统安装cdcfordb2udb(306)
  74. 女友被曝插足许志安郑秀文婚姻 知情人透露马国明已下定决心分手(306)
  75. 智慧停车场系统开发建设解决方案(302)
  76. F#周报2019年第15期(298)
  77. shopify网站转化率优化之结账页checkout优化(288)
  78. 杜敬谦死因疑曝光!或因他这一特殊的训练方式,泳迷高呼孙杨退役(286)
  79. 真实!这部8.5分的缉毒剧,毒贩公然贿赂警察:80万,把我放出去(283)
  80. 威廉王子出轨凯特王妃闺蜜? 外媒称婚外情致兄弟反目(283)
  81. spring-cloud-sleuth+zipkin源码探究(280)
  82. 深度学习python的配置(Windows)(279)
  83. 许志安出轨视频系蓄谋偷拍?司机被曝收40万装红外摄像头(278)
  84. 赌命生子九个月后,吴梦离世:前半辈子任性了,我用生命买单(278)
  85. NodeJs之邮件(email)发送(277)
  86. 视觉中国深夜道歉:全面配合监管部门彻底积极整改(276)
  87. 新更新kb4493472导致无法正常开机(264)
  88. 她做个半永久眉毛就被说整容了?(262)
  89. 韦杰落网,金诚集团终局(262)
  90. 美国各州18年人均GDP排名(附中国各省市区人均GDP排名)(260)
  91. Google AI 系统 DeepMind 高中数学考试不及格(257)
  92. 阿里 EasyExcel 使用及避坑(257)
  93. 机器学习基石笔记:01 The Learning Problem(256)
  94. 华为推出方舟编译器 称可提升安卓系统效率(253)
  95. 张丹峰出轨最新锤来了!毕滢的朋友圈简直刷新下限啊!(252)
  96. 山东庆云民企3000亩土地被贱卖 国企接盘拟转性(250)
  97. 【硬盘版】下载利器IDM+优特(uTorrent)BT下载器类(249)
  98. 如何设置使chrome新标签页中打开链接自动跳转到新标签页?(248)
  99. 不要996!程序员创建955.WLB不加班公司名单,GitHub周榜第二(246)
  100. 河南汝州农商行“百万丢款案”调查,两级法院现“判决书打架”(242)

  1. Pycharm 新建模板默认添加编码格式-作者-时间等信息
  2. ES6中常用的小技巧,用了事半功倍哦
  3. Python 从入门到进阶之路(六)
  4. Java中的反射机制和动态代理
  5. 英特尔推创业扶持计划:“攫取”以色列AI和自动驾驶人才
  6. 支付类系统数据处理和数据中台的数据处理方式有什么不同?
  7. 机器视觉中的光源
  8. 想让自己的项目6666,可是 Chrome 不答应!
  9. 未来简史:从智人到神人
  10. AMD、Intel注意了 俄罗斯国产处理器能跑X86游戏了
  11. selenium2library关键字
  12. 《Graph Attention Network》阅读笔记
  13. 面试总结 - 大三第 16 周总结
  14. Intel、高通等在美游说以期不断供
  15. 小白到大神,你需要了解的 sqlite 最佳实践
  16. 5种处理Vue异常的方法
  17. 浅谈 Attention 机制的理解
  18. 看完此文,妈妈还会担心你docker入不了门?
  19. 北电90级:最勤奋的黄磊和最懒的姜武居然在同一个班
  20. Java 8 Collectors to Map
  21. Spring AOP中@Aspect 面向切面注解使用详解
  22. 文件操作的相关
  23. 我科学家首次提出新型远程量子密钥分发协议
  24. 精读《Optional chaining》
  25. CentsOS原生RabbitMQ安装过程
  26. 大数据技术之_31_Java 面试题_01_JavaSE 面试题 + SSM 面试题 + Java 高级面试题 + Java 项目面试题
  27. 零基础如何学习好python爬虫?分哪几个阶段?
  28. 可见光驱动生物质可制备氢气和原柴油
  29. Redis删除特定前缀key的优雅实现
  30. AWS云创建EC2与使用注意事项-踩坑记录
  31. 新行星“猎手”瞄准半人马座阿尔法星
  32. 传杨天真和张艺兴闹掰,杨天真发两人跳舞视频辟谣
  33. 万亿数据下Hadoop的核心竞争力
  34. AI也“偏见”!或应鼓励女性参与AI研发
  35. [Vue 牛刀小试]:第十三章 - Vue Router 基础使用再探(命名路由、命名视图、路由传参)
  36. 上周热点回顾(6.10-6.16)
  37. 屠呦呦团队放“大招”:“青蒿素抗药性”等研究获新突破
  38. Spring拓展接口之BeanPostProcessor,我们来看看它的底层实现
  39. 高通骁龙865曝光:支持LPDDR5X和UFS 3.0 有两个版本
  40. 一线|前百度副总裁顾国栋加入蛋壳公寓任COO 负责线下团队
  41. 周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
  42. LeetCode.927-独特邮箱地址(Unique Email Addresses)
  43. Anaconda 恢复清华大学开源软件镜像,近期服务上线
  44. Consul初探-服务注册和发现
  45. 企业讨债9年打赢官司也没用:法院领导是对方亲兄弟
  46. 台积电或在明年一季度开始为苹果生产5纳米芯片
  47. 日本JDI纾困案生变:夏普表示愿伸援
  48. 曹大谈内存重排
  49. 滴滴接入第三方出行服务商,试水聚合平台
  50. 中国AI芯“觉醒”的五年
  51. 统计学习方法20190616学习第一章第1,2节统计学习
  52. 命令行高效操作Git,看这篇就够了
  53. 曾猛删合照,父亲节晒与张丹峰合影!这对父子也走出毕滢风波了?
  54. 唐嫣走路一半遭鸟屎砸中 超近画面笑翻网友
  55. kubernetes调度之pod优先级和资源抢占
  56. .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新
  57. 库克斯坦福演讲:科技公司应为"做坏事"担责任
  58. 一周全球公司十大要闻:波音连续第二个月没收到商业飞机订单
  59. 特斯拉上海厂:建筑基本完工 开始安装生产线
  60. 存储卡革命启动!microSD已然媲美SSD
  61. 警告!2020年2月1月起:不支持TCP和UDP协议的DNS服务器将被关停
  62. 近百起涉民营医院骗保案:伪造病历、虚假住院,有的涉案千万
  63. 企业存储快速增长势头到头了:2019 年 Q1 下降 0.6%
  64. 天文学家探测到银河系与另一个星系相撞的信号
  65. 升维打击,设计之道
  66. 北电1990级:除了黄磊和姜武,他们也是你眼熟的演员
  67. 四象限分析法分析你是否适合做管理
  68. 韩国瑜22日台中造势 国民党市议员全力相挺
  69. 苏贞昌笑高雄“20例”登革热 游淑慧:看看“万例”前朝
  70. 退休女环保局长涉黑落马,该区一周“打伞”11人
  71. 杨幂雪莉冷白皮之战,杨洋尼坤合照,网友心痛神颜不再
  72. 微服务架构:自动扩展简介
  73. 浏览器缓存
  74. 深入理解Java虚拟机(自动内存管理机制)
  75. Jenkins自动化部署入门(一)
  76. jvm(2)---类加载机制
  77. Java8的Stream API使用
  78. Spring的web.xml文件配置
  79. vscode源码分析【二】程序的启动逻辑
  80. kubernetes ingress(一) 简介
  81. 寻觅Azure上的Athena和BigQuery(一):落寞的ADLA
  82. 实验十二:SWING界面设计
  83. 死磕 java同步系列之CountDownLatch源码解析
  84. 容器中Java 程序OOMKilled原因浅析
  85. 舍友聚会
  86. 串口通信
  87. 数据结构与算法---排序算法(Sort Algorithm)
  88. 笔记-JavaWeb学习之旅17
  89. 物理隔离下的数据交换平台难点解析与实践(一)
  90. jvm(1)---java内存模型
  91. F#周报2019年第24期
  92. 机器学习经典算法之决策树
  93. 你知道Object中有哪些方法及其作用吗?
  94. coreml之通过URL加载模型
  95. 中移核心网 5G 大单:华为、中兴、爱立信、诺基亚中标
  96. 三道博弈论入门题
  97. eclipse JDT Plug-in Developer Guide
  98. 《漫画算法》笔记-上篇
  99. 计算机网络-自定向下方法之运输层
  100. 5.Linux系统的vim