整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          一個開源的HTML5流媒體播放器

          開源精選》是我們分享Github、Gitee等開源社區(qū)中優(yōu)質(zhì)項目的欄目,包括技術(shù)、學(xué)習(xí)、實(shí)用與各種有趣的內(nèi)容。本期推薦的是一個開源的HTML5流媒體播放器——PearPlayer.js。

          PearPlayer是完全用JavaScript寫的開源HTML5流媒體播放框架,實(shí)現(xiàn)了融合HTTP(含HTTPS、HTTP2)和WebRTC的多協(xié)議、多源、低延遲、高帶寬利用率的無插件Web客戶端流媒體加速能力。基于H5的MSE(Media Source Extension)技術(shù)將來自多個源節(jié)點(diǎn)的Buffer分塊喂給播放器,再加上精心設(shè)計的算法可實(shí)現(xiàn)最優(yōu)的調(diào)度策略及對各種異常情況的處理,PearPlayer由此能在保證用戶流暢視頻體驗的前提下最大化P2P率。

          PearPlayer特性

          • P2P能力基于WebRTC,無須安裝任何插件
          • 多協(xié)議(HTTP、HTTPS、WebRTC)、多源
          • 自研的調(diào)度算法,在保證用戶流暢視頻體驗的前提下最大化P2P率
          • 默認(rèn)無需填參數(shù)(內(nèi)部根據(jù)視頻碼率等作自適應(yīng)),高級使用模式下可自行調(diào)整算法和參數(shù)
          • 默認(rèn)不會無限制緩沖,盡可能為CP用戶節(jié)省帶寬/流量
          • 支持Chrome、Firefox、Opera、IE、Edge等主流瀏覽器,即將支持Safari、騰訊微信、X5/TBS(可多源傳輸,播放問題待不久后由MSE支持完善)
          • 可選接入低成本、高可用的Pear Fog CDN
          • 協(xié)議默認(rèn)通過TLS/DTLS全加密,無DPI特征;并可通過Pear Fog組件的動態(tài)端口映射進(jìn)一步消除統(tǒng)計學(xué)特征
          • 像使用HTML5 <video>標(biāo)簽一樣簡單,并易與video.js等流行播放框架集成
          • 具備Browser P2P能力(基于WebTorrent)

          使用方法

          首先通過script標(biāo)簽導(dǎo)入pear-player.min.js:

          <script src="./dist/pear-player.min.js"></script>

          或者使用CDN:

          <script src="https://cdn.jsdelivr.net/npm/pearplayer@latest"></script>

          假設(shè)用video標(biāo)簽播放以下視頻,HTML如下:

          <video id="pearvideo" src="https://qq.webrtc.win/tv/Pear-Demo-Yosemite_National_Park.mp4" controls>

          只需以下幾行代碼,即可將PearPlayer綁定到video標(biāo)簽:

          <script>
          
          /**
          
          * 第一個參數(shù)為video標(biāo)簽的id或class
          
          * opts是可選的參數(shù)配置
          
          */
          
          if (PearPlayer.isMSESupported()) {
          
          var player = new PearPlayer('#pearvideo', opts);
          
          }
          
          </script>

          至此,就已經(jīng)添加播放器了,無需任何插件。


          開源地址:https://gitee.com/PearInc/PearPlayer.js

          注于Java領(lǐng)域優(yōu)質(zhì)技術(shù)號,歡迎關(guān)注

          作者:銀河1號

          一個優(yōu)秀且經(jīng)驗豐富的Java開發(fā)人員的特點(diǎn)之一是對API的廣泛了解,包括JDK和第三方庫。我花了很多時間學(xué)習(xí)API,特別是在閱讀Effective Java 3rd Edition之后,Joshua Bloch建議如何使用現(xiàn)有的API進(jìn)行開發(fā),而不是為常用的東西寫新的代碼。

          在本文中,我將分享一些Java開發(fā)人員應(yīng)該熟悉的最有用和最重要的庫和API。但是,我沒有包含框架,例如Spring和Hibernate,因為它們非常有名且具有特定功能。

          總的來說,我在日常項目包含了有用的庫,包括Log4j日志庫,Jackson JSON解析庫,以及JUnit和Mockito等單元測試API。如果需要在項目中使用,則在項目的classpath包含這些JAR,也可以使用Maven進(jìn)行依賴管理。

          當(dāng)你使用Maven進(jìn)行依賴管理時,它會自動下載這些庫,包括它們所依賴的庫,稱為傳遞依賴。

          例如,如果你下載Spring Framework,它還將下載Spring所依賴的所有其他JAR,例如Log4j。

          你可能沒注意到,但有正確版本的JAR是一個令人頭疼的問題。如果是錯誤的JAR版本,那么你將遇到 ClassNotFoundException, NoClassDefFoundError或 UnsupportedClassVersionError。

          這是我收集的一些有用的第三方庫,Java開發(fā)可以使用它們在應(yīng)用中來完成許多有用的功能。要使用這些庫,Java開發(fā)人員應(yīng)該熟悉它,這就是本文的重點(diǎn)。如果你覺得有用,你可以研究該庫并使用它。

          1.日志庫

          日志庫非常常見,因為在每個項目中都需要它們。它們是服務(wù)器端應(yīng)用最重要的東西,因為日志只放在可以看到應(yīng)用程序當(dāng)前運(yùn)行時情況的地方。盡管JDK附帶了自己的日志庫,但還有更好的替代方案,例如Log4j,SLF4j和LogBack。

          Java開發(fā)人員應(yīng)該熟悉日志庫的優(yōu)缺點(diǎn),并且知道 為什么使用SLF4j比普通Log4j更好。

          2. JSON解析庫

          在當(dāng)今的Web服務(wù)和物聯(lián)網(wǎng)領(lǐng)域,JSON已成為將信息從客戶端傳送到服務(wù)器的首選協(xié)議。他們已經(jīng)替換XML成為在獨(dú)立平臺間傳輸信息的最佳方式。

          遺憾的是,JDK沒有JSON庫。但是,有許多優(yōu)秀的第三方庫允許你解析和創(chuàng)建JSON消息,如Jackson和Gson。

          Java Web開發(fā)人員應(yīng)該熟悉這些庫中的至少一個。如果你想了解有關(guān)Jackson和JSON的更多信息,我建議你看看 Udemy的課程JSON with the Java API。

          3.單元測試庫

          單元測試是將普通開發(fā)人員與優(yōu)秀開發(fā)人員區(qū)分開來的最重要的事情。程序員經(jīng)常有理由不寫單元測試,但逃避寫單元測試的最常見的借口是缺乏常用單元測試庫的經(jīng)驗和知識,包括JUnit,Mockito和PowerMock。

          我在2018年有一個目標(biāo)就是提高我對單元測試和集成測試庫的了解,比如JUnit 5,Cucumber,Robot框架和一些其他的。

          我還在Udemy注冊了 JUnit and Mockito Crash Course 。即使你了解JUnit和單元測試的基礎(chǔ)知識,可能也希望更新并進(jìn)階自己的知識。

          4.通用庫

          Java開發(fā)人員可以使用幾個很好的通用第三方庫,比如Apache Commons和Google Guava。我總是在我的項目中包含這些庫,因為它們簡化了很多功能。

          正如Joshua Bloch在Effective Java中所說的那樣,重復(fù)造輪子是沒有意義的。我們應(yīng)該更偏向于使用久經(jīng)考驗的庫而不是時不時自己來實(shí)現(xiàn)。

          對Java開發(fā)人員來說,熟悉Google Guava和Apache Commons庫是件好事。

          5. HTTP庫

          我不喜歡JDK的一點(diǎn)是他們對HTTP支持的缺乏。雖然你可以使用java.net包中的類建立HTTP連接 ,但使用開源的第三方庫(如Apache HttpClient和HttpCore)并不容易或不能無縫結(jié)合。

          雖然JDK 9帶來了HTTP 2.0的支持和更好的HTTP支持,但我強(qiáng)烈建議所有Java開發(fā)人員熟悉流行的HTTP客戶端庫,包括HttpClient和HttpCore。

          你還可以查看此文章What's New in Java 9 - Modules and More以了解有關(guān)JDK 9對HTTP 2支持的更多信息。

          6. XML解析庫

          有許多XML解析庫,包括Xerces,JAXB,JAXP,Dom4j和Xstream。Xerces2是Apache Xerces下一高性能版本,完全兼容的XML解析器。這個新版本的Xerces引入了Xerces Native Interface(XNI),這是一個完整的框架,用于構(gòu)建非常模塊化且易于編程的解析器組件和配置。

          Apache Xerces2解析器是XNI的參考實(shí)現(xiàn),但是其他解析器組件,配置和解析器可以使用Xerces Native Interface編寫。Dom4j是另一個適用于Java應(yīng)用程序的靈活XML框架。如果你想了解有關(guān)Java中XML解析的更多信息,建議你查看Udemy 上的 Java Web Services and XML 在線課程。

          7. Excel庫

          信不信由你 - 所有現(xiàn)實(shí)世界的應(yīng)用程序都必須以某種形式與Microsoft Office進(jìn)行交互。許多應(yīng)用程序需要提供在Excel中導(dǎo)出數(shù)據(jù)的功能,如果必須從Java應(yīng)用程序執(zhí)行相同操作,則需要Apache POI API。

          這是一個非常豐富的庫,允許你 從Java程序讀取和寫入XLS文件。你可以看到該鏈接(http://www.java67.com/2014/09/how-to-read-write-xlsx-file-in-java-apache-poi-example.html),以獲取在核心Java應(yīng)用程序中讀取Excel文件的工作示例。

          8.字節(jié)碼庫

          如果你正在編寫生成代碼或與字節(jié)碼交互的框架,那么你需要一個字節(jié)碼庫。

          它們允許你讀取和修改應(yīng)用程序生成的字節(jié)碼。Java世界中一些流行的字節(jié)碼庫是javassist和Cglib Nodep。

          Javassist(Java programming assistant)使Java字節(jié)碼操作變得非常簡單。它是一個用于在Java中編輯字節(jié)碼的類庫。ASM是另一個有用的字節(jié)碼編輯庫。如果你不熟悉字節(jié)碼,我建議你查看Introduction to Java Programmers以了解有關(guān)它的更多信息。

          9.數(shù)據(jù)庫連接池庫

          如果你正在從Java應(yīng)用程序與數(shù)據(jù)庫交互但不使用數(shù)據(jù)庫連接池庫,那么你將丟失一些內(nèi)容。

          由于在運(yùn)行時創(chuàng)建數(shù)據(jù)庫連接需要花費(fèi)時間并使請求處理速度變慢,因此始終建議使用數(shù)據(jù)庫連接庫。一些流行的是Commons Pool和DBCP。

          在Web應(yīng)用程序中,它的Web服務(wù)器通常提供這些功能,但在核心Java應(yīng)用程序中,你需要將這些連接池庫包含在類路徑中以使用數(shù)據(jù)庫連接池。

          如果你想了解有關(guān)JDBC和Web應(yīng)用程序中的連接池的更多信息,我建議你查看Udemy 中的JSP, Servlet, and JDBC for Beginners課程。

          10.消息傳遞庫

          與日志記錄和數(shù)據(jù)庫連接類似,消息傳遞也是許多現(xiàn)實(shí)世界Java應(yīng)用程序的常見功能。

          Java提供的JMS,Java Messaging Service不屬于JDK。對于此組件,你需要包含一個單獨(dú)的組件 jms.jar。

          同樣,如果你正在使用第三方消息傳遞協(xié)議(如Tibco RV),則需要使用第三方JAR tibrv.jar 放在應(yīng)用程序類路徑中。

          11. PDF庫

          與Microsoft Excel類似,PDF庫是另一種普遍存在的格式。如果你需要在應(yīng)用程序中支持PDF功能,例如 導(dǎo)出數(shù)據(jù)到PDF文件,則可以使用iText和Apache FOP庫。

          兩者都提供有用的PDF相關(guān)功能,但iText更豐富,更好。請參閱此處以了解有關(guān)iText的更多信息。

          12.日期和時間庫

          在Java 8之前,JDK的數(shù)據(jù)和時間庫有很多缺陷,因為它們不是線程安全的,不可變的,并且容易出錯。許多Java開發(fā)人員依靠JodaTime來實(shí)現(xiàn)他們的日期和時間要求。

          從JDK 8開始,沒有理由使用Joda,因為你在JDK 8的新日期和時間API中獲得了所有功能,但如果你使用的是較舊的Java版本,那么JodaTime是一個值得學(xué)習(xí)的庫。

          如果你想了解有關(guān)新的日期和時間API的更多信息,我建議你查看Udemy上的What's new in Java 8課程。它提供了Java 8所有重要功能的精彩概述,包括日期和時間API。

          13.Collection庫

          盡管JDK擁有豐富的集合庫,但仍有一些第三方庫提供了更多選項,例如Apache Commons集合,Goldman Sachs集合,Google集合和Trove。

          Trove庫特別有用,因為它為Java提供了高速的常規(guī)和原始集合。

          FastUtil是另一個類似的API。它通過提供特定類型的映射,集合,列表和優(yōu)先級隊列來擴(kuò)展Java集合框架,較小的內(nèi)存占用,快速訪問和插入; 它還提供大型(64位)數(shù)組,集和列表,以及用于二進(jìn)制和文本文件快速實(shí)用的I / O類。

          14.Email API

          javax.mail和Apache Commons Email都提供了一個用于從Java發(fā)送電子郵件的API 。它建立在JavaMail API的基礎(chǔ)之上,旨在簡化它。

          15. HTML解析庫

          與JSON和XML類似,HMTL是我們許多人必須處理的另一種常見格式。值得慶幸的是,我們有JSoup,它極大地簡化了在Java應(yīng)用程序中使用HTML的過程。

          你不僅可以使用JSoup解析HTML,還可以創(chuàng)建HTML文檔

          它提供了一個非常方便的API,用于提取和操作數(shù)據(jù),使用DOM,CSS和類似jquery的方法。JSoup實(shí)現(xiàn)了WHATWG HTML5規(guī)范,并將HTML解析到同一個DOM,就像現(xiàn)代瀏覽器一樣。

          16.Cryptographic庫

          Apache Commons Codec軟件包包含各種格式的簡單編碼器和解碼器,如Base64和Hexadecimal。

          除了這些廣泛使用的編碼器和解碼器之外,編解碼器包還維護(hù)一組語音編碼實(shí)用程序。

          17.Embedded SQL Database庫

          我真的很喜歡像H2這樣的內(nèi)存數(shù)據(jù)庫,你可以將它嵌入你的Java應(yīng)用程序中。它們非常適合測試SQL腳本和運(yùn)行需要數(shù)據(jù)庫的單元測試。但是,H2并不是唯一的DB,你也可以選擇Apache Derby和HSQL。

          18. JDBC問題排查庫

          存在一些很好的JDBC擴(kuò)展庫,可以使調(diào)試更容易,比如P6spy。

          這是一個庫,可以無縫地攔截和記錄數(shù)據(jù)庫數(shù)據(jù),而無需對應(yīng)用程序進(jìn)行代碼更改。你可以使用它們來記錄SQL查詢及其計時。

          例如,如果你在代碼中使用PreparedStatment和CallableStatement,則這些庫可以記錄一次完全調(diào)用的參數(shù)和執(zhí)行所花費(fèi)的時間。

          如果你想了解有關(guān)JDBC的更多信息,可以查看JDBC for Beginners。

          19.序列化庫

          Google Protocol Buffers是一種以高效可擴(kuò)展的格式編碼結(jié)構(gòu)化數(shù)據(jù)的方法。它是Java序列化的更豐富,更好的替代品。我強(qiáng)烈建議有經(jīng)驗的Java開發(fā)人員學(xué)習(xí)Google Protobuf。你可以查看此文章以了解有關(guān)Google協(xié)議緩沖區(qū)的更多信息 。

          20.網(wǎng)絡(luò)庫

          一些有用的網(wǎng)絡(luò)庫是Netty和Apache MINA。如果你正在編寫需要執(zhí)行底層網(wǎng)絡(luò)任務(wù)的應(yīng)用程序,請考慮使用這些庫。如果你想了解有關(guān)Java網(wǎng)絡(luò)編程的更多信息,請查看 Java Network Programming - TCP/IP Socket Programming。

          這些就是對于每個Java開發(fā)人員都應(yīng)該使用的一些有用的庫。Java的世界是浩瀚無窮的,你會發(fā)現(xiàn)數(shù)不勝數(shù)的庫用于做不同的事情。

          如果你想用Java做任何事情,很可能你會找到一個如何實(shí)現(xiàn)的庫。與往常一樣,Google是你找到有用的Java庫的最好朋友,但你也可以查看Maven中央存儲庫,找到適合你手頭任務(wù)的一些有用的庫。

          點(diǎn)擊英文原文鏈接


          在之前的一篇文章《用HTML5的canvas來畫一個夢幻星空,來學(xué)習(xí)一下吧》中,我們使用HTML5的canvas畫出了一個夢幻星空的效果。今天這篇文章我們繼續(xù)使用canvas來畫出幾個簡單的小球運(yùn)動效果,一起來看看吧。

          本文源碼已經(jīng)開源到Github上,感興趣的可以自取,Github地址如下。

          https://github.com/zhouxiongking/article-pages/tree/master/articles/movaByCanvas

          HTML5

          小球直線運(yùn)動

          首先我們來看看小球直線運(yùn)動的效果圖,如下所示。

          運(yùn)動效果圖

          然后我們來分析下,這個效果是如何實(shí)現(xiàn)的。

          1. 首先設(shè)置畫布寬高等信息,然后利用canvas畫出一個小球,設(shè)定初始狀態(tài),包括顏色,半徑,初始位置等信息。

          2. 設(shè)定一個定時器,每次動態(tài)更新小球的位置,由于定時器時間比較短,肉眼觀察下,相當(dāng)于小球運(yùn)動的效果。

          通過上述的分析,我們得出以下的代碼。

          對于canvas頁面的HTML代碼永遠(yuǎn)都只包含一個元素。

          HTML代碼

          接下來是主要的Javascript代碼,首先是畫布,小球初始信息的設(shè)置,并設(shè)置定時器函數(shù)。

          小球初始信息

          然后是執(zhí)行的定時器函數(shù),動態(tài)更新小球的位置,當(dāng)小球運(yùn)動出畫布范圍后,重新從起點(diǎn)位置開始運(yùn)動。

          定時器函數(shù)

          就這兩段代碼,就可以實(shí)現(xiàn)出以上的小球勻速直線運(yùn)動的效果。

          小球圓周運(yùn)動

          首先,我們來看看小球勻速圓周運(yùn)動的效果圖,如下所示。

          運(yùn)動效果圖

          接下來我們同樣來分析下這個效果是如何實(shí)現(xiàn)的。

          1. 首先畫出兩個小圓,一個是藍(lán)色,一個是紅色,設(shè)定初始信息和上述例子一樣。

          2. 設(shè)定定時器,每次清除畫布后,重新渲染,并且更新小藍(lán)球的位置,由于是圓周運(yùn)動,并不會出現(xiàn)上述例子中移出畫布的情況。

          通過上面的描述,我們得出以下代碼,HTML代碼一樣,這里不再給出。

          首先是原始小藍(lán)球的繪制,并設(shè)置定時器。

          小藍(lán)球的繪制

          然后是小紅球的繪制。

          小紅球的繪制

          最后是定時器函數(shù)的實(shí)現(xiàn),在該函數(shù)中會讓小藍(lán)球旋轉(zhuǎn)一定的角度。

          定時器函數(shù)

          至此,小球的勻速圓周運(yùn)動效果代碼就完全實(shí)現(xiàn)了。

          總結(jié)

          今天這篇文章主要是利用HTML5的canvas實(shí)現(xiàn)了一些簡單的小球運(yùn)動效果,你學(xué)會了嗎?


          主站蜘蛛池模板: 久久国产精品最新一区| 亚洲欧洲精品一区二区三区| 亚洲av一综合av一区| 精品国产区一区二区三区在线观看 | 中文字幕AV一区二区三区| 国产一区二区不卡在线播放| 国产福利一区二区| 国产av一区最新精品| 欲色aV无码一区二区人妻 | 久久se精品一区精品二区| 动漫精品第一区二区三区| 激情无码亚洲一区二区三区| 无码国产精品一区二区免费 | 国产日韩精品一区二区在线观看 | 无码国产精品一区二区免费模式| 无码人妻精品一区二区三区99不卡| 无码一区二区波多野结衣播放搜索| 精品视频一区二区三三区四区 | 国产成人AV一区二区三区无码| 国产精品无码不卡一区二区三区 | 国产高清在线精品一区二区| 日韩一区二区三区在线观看| 国产亚洲福利精品一区二区| 相泽南亚洲一区二区在线播放| 男人的天堂av亚洲一区2区 | 成人区人妻精品一区二区不卡视频 | 亚洲性日韩精品一区二区三区 | 91久久精品国产免费一区| 无码精品一区二区三区在线| 国产香蕉一区二区在线网站| 亚洲一区二区三区偷拍女厕| 国产综合无码一区二区辣椒 | 国产在线无码一区二区三区视频 | 99久久精品国产一区二区成人| 久久高清一区二区三区| 亚洲视频一区网站| 99国产精品欧美一区二区三区| 日韩视频在线一区| 久久精品国产一区二区三区不卡| 精品国产日产一区二区三区| 亚洲综合一区二区|