国产美女精品自在线拍照片,欧美人与兽,欧美成人高清在线播放,欧美成人精品三级网站,两个人免费完整在线观看直播

孟村回族政府辦公oa系統(tǒng):鼎湖區(qū)政務(wù)OA中智慧教室無(wú)紙化同屏方案是否適用RTMP?

時(shí)間:2024-11-27 11:14:56 信創(chuàng)OA資訊首頁(yè) 孟村回族政府辦公oa系統(tǒng)鼎湖區(qū)政務(wù)OA


java組合模式(composite):

組合模式(composite)使用組合模式的場(chǎng)景:??把部分和整體的關(guān)系用樹(shù)形結(jié)構(gòu)來(lái)表示,從而使客戶(hù)端可以使用統(tǒng)一的方式處理部分對(duì)象和整體對(duì)象.組合模式核心:抽象構(gòu)件(component)角色: 定義了葉子和容器構(gòu)件的共同點(diǎn)葉子 文件管理案例component抽象** * 抽象構(gòu)建 * @author 波波烤鴨 * @email dengpbs@163.com * *public interface abstractfile { f1.add(imagefile); f1.add(f); f1.operiation();}輸出:處理:c:文件夾視頻文件:aaa.mp4 處理操作視頻文件:aaa.mp4 處理操作圖片文件:波波烤鴨. jpg 處理操作處理:c:tools文件夾視頻文件:aaa.mp4 處理操作圖片文件:波波烤鴨.jpg 處理操作文本文件:readme.txt 處理操作開(kāi)發(fā)中的應(yīng)用場(chǎng)景:操作系統(tǒng)的資源管理器gui中的容器層次圖 xml文件解析政務(wù)OA系統(tǒng)中,組織結(jié)構(gòu)的處理junit單元測(cè)試框架 ? 底層設(shè)計(jì)就是典型的組合模式,testcase(葉子)、testunite(容器)、test接口(抽象)?

小結(jié)css的float屬性:

padding:?0;????????} ????????img?{????????????float:?left;????????}???? ????????????????????新垣結(jié)衣 (aragaki?yui),1988年6月11日出生于沖繩縣那霸市。 2007年,她從日出高校畢業(yè)后開(kāi)始專(zhuān)注于演藝發(fā)展,并發(fā)表個(gè)人首張音樂(lè)專(zhuān)輯《天空》;同年,新垣結(jié)衣還主演了愛(ài)情片《戀空》,而她也憑借該片獲得了多個(gè)電影新人獎(jiǎng)項(xiàng)????????。 2010年,主演愛(ài)情片《花水木》。????????2011年,主演都市劇《全開(kāi)女孩》。2012年,相繼參演現(xiàn)代劇《legal????????high》、劇情片《劇場(chǎng)版新參者:麒麟之翼》。 新垣結(jié)衣長(zhǎng)相甜美、笑容純真,擁有天使般笑容的她被受訪(fǎng)者們稱(chēng)為“治愈系”美女。而在電影《戀空》中她的表演既具深度又生活化。 ???? 1.2創(chuàng)建網(wǎng)頁(yè)布局float屬性還常用于網(wǎng)頁(yè)布局:效果:?

微信公眾號(hào)借用別的微信公眾號(hào)支付配置:

借用其他賬號(hào)微信支付之前,要確保要借用微信公眾號(hào)的微信支付已開(kāi)通;并且要借用微信支付的公眾號(hào)可以添加微信支付授權(quán)目錄、安全域名、授權(quán)域名和ip白名單;滿(mǎn)足微信支付條件的賬號(hào)(包括認(rèn)證的服務(wù)號(hào)、認(rèn)證的政府與媒體類(lèi)訂閱號(hào) ),可以在微信公眾平臺(tái)左側(cè)導(dǎo)航中出現(xiàn)“微信支付”的文字,點(diǎn)擊即可進(jìn)行申請(qǐng)。 appid和appsecret在微信公眾平臺(tái)查看,若借用的是其他賬號(hào)的微信支付,則填寫(xiě)這個(gè)開(kāi)通微信支付的公眾號(hào)的appid和appsecret ;商戶(hù)號(hào)和api密鑰需登錄微信商戶(hù)平臺(tái)查看設(shè)置 ,配置后點(diǎn)擊確定即可保存 第三步、api密鑰的設(shè)置?第五步、使用開(kāi)通微信支付公眾號(hào)登錄微信公眾平臺(tái),點(diǎn)擊左側(cè)菜單的設(shè)置-》公眾號(hào)設(shè)置-》功能設(shè)置,添加安全域名、授權(quán)域名為:weixin.gycode.com? 第六步、開(kāi)通微信支付的公眾號(hào)登錄微信公眾平臺(tái),點(diǎn)擊左側(cè)菜單 開(kāi)發(fā)-》基本配置,添加ip白名單:115.28.49.127?以上參數(shù)都配置成功后即可使用借用微信支付。

大數(shù)據(jù)時(shí)代,什么是數(shù)據(jù)分析的靈魂:

人類(lèi)科學(xué)發(fā)展史上的不少進(jìn)步都和數(shù)據(jù)采集分析直接相關(guān),例如現(xiàn)代醫(yī)學(xué)流行病學(xué)的開(kāi)端。倫敦1854年發(fā)生了大規(guī)模的霍亂,很長(zhǎng)時(shí)間沒(méi)有辦法控制。 一位醫(yī)師用標(biāo)點(diǎn)地圖的方法研究了當(dāng)?shù)厮植己突魜y患者分布之間的關(guān)系,發(fā)現(xiàn)有一口水井周?chē)?,霍亂患病率明顯較高,借此找到了霍亂暴發(fā)的原因:一口被污染的水井。關(guān)閉這口水井之后,霍亂的發(fā)病率明顯下降。 大數(shù)據(jù)是非競(jìng)爭(zhēng)性資源,有助于政府科學(xué)決策、商家精準(zhǔn)營(yíng)銷(xiāo)大數(shù)據(jù)時(shí)代,數(shù)據(jù)的重要作用更加凸顯,許多國(guó)家都把大數(shù)據(jù)提升到國(guó)家戰(zhàn)略的高度。 政府合理利用大數(shù)據(jù),引導(dǎo)決策的將是基于實(shí)證的事實(shí),政府會(huì)更有預(yù)見(jiàn)性、更加負(fù)責(zé)、更加開(kāi)放。 小數(shù)據(jù)時(shí)代,政府做決策更多依憑經(jīng)驗(yàn)和局部數(shù)據(jù),難免頭痛醫(yī)頭、腳痛醫(yī)腳。比如,交通堵塞就多修路。大數(shù)據(jù)時(shí)代,政府做決策能夠從粗放型轉(zhuǎn)向集約型。

孟村回族政府辦公政務(wù)OA系統(tǒng):鼎湖區(qū)政務(wù)oa中智慧教室無(wú)紙化同屏方案是否適用rtmp?

得到廣泛應(yīng)用。本文將深入探討oa政府辦公的重要性、優(yōu)勢(shì)和未來(lái)發(fā)展趨勢(shì)。第一部分:oa政府辦公的重要性現(xiàn)代化政府辦公環(huán)境中,信息的快速流動(dòng)和高效處理是至關(guān)重要的。oa政府辦公系統(tǒng)通過(guò)將傳統(tǒng)紙質(zhì)文件轉(zhuǎn)換為電子文檔,實(shí)現(xiàn)了信息的數(shù)字化存儲(chǔ)和管理。這不僅提高了政府工作的效率,還減少了紙質(zhì)文件的使用和存儲(chǔ)成本,對(duì)環(huán)境保護(hù)產(chǎn)生了積極的影響。此外,oa政府辦公系統(tǒng)還能夠促進(jìn)政府機(jī)關(guān)之間的協(xié)同合作和信息共享。通過(guò)統(tǒng)一的平臺(tái)和標(biāo)準(zhǔn)化的流程,不同部門(mén)之間可以更加便捷地溝通和協(xié)調(diào)工作,避免了信息孤島和工作重復(fù)。這種協(xié)同合作不僅提高了政府工作的效率,還增強(qiáng)了政府對(duì)外服務(wù)的一致性和可靠性。第二部分:oa政府辦公的優(yōu)勢(shì)提高工作效率:oa政府辦公系統(tǒng)通過(guò)自動(dòng)化流程和任務(wù)分配,減少了繁瑣的手工操作和人為錯(cuò)誤。工作人員可以更智慧教室無(wú)紙化方案技術(shù)背景 智慧教室無(wú)紙化方案是一種基于現(xiàn)代信息技術(shù),旨在通過(guò)數(shù)字化手段實(shí)現(xiàn)教學(xué)過(guò)程的無(wú)紙化、智能化和高效化的解決方案。該方案以學(xué)生為中心,強(qiáng)調(diào)互動(dòng)化的數(shù)字教學(xué)服務(wù),旨在提升教學(xué)質(zhì)量和學(xué)習(xí)效率,同時(shí)減少對(duì)傳統(tǒng)紙張的依賴(lài),實(shí)現(xiàn)綠色環(huán)保。以下是對(duì)智慧教室無(wú)紙化方案的詳細(xì)闡述: 一、方案概述 智慧教室無(wú)紙化方案通過(guò)整合物聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等先進(jìn)技術(shù),構(gòu)建了一個(gè)集智能管理、智慧教學(xué)、環(huán)境便捷調(diào)節(jié)及資源制作于一體的新型現(xiàn)代化智慧教室。該方案不僅實(shí)現(xiàn)了教學(xué)資源的數(shù)字化、網(wǎng)絡(luò)化,還通過(guò)智能設(shè)備和平臺(tái)實(shí)現(xiàn)了教學(xué)過(guò)程的自動(dòng)化、智能化,為師生提供了更加便捷、高效、互動(dòng)的學(xué)習(xí)和教學(xué)環(huán)境。 二、主要特點(diǎn) 數(shù)字化教學(xué)資源:智慧教室無(wú)紙化方案提供了豐富海量的數(shù)字化教學(xué)資源,包括電子教材、多媒體課件、在線(xiàn)題庫(kù)等,師生可以隨時(shí)隨地進(jìn)行訪(fǎng)問(wèn)和學(xué)習(xí),打破了傳統(tǒng)紙質(zhì)教材的束縛。 在線(xiàn)學(xué)習(xí)互動(dòng):通過(guò)智慧教室平臺(tái),學(xué)生可以隨時(shí)收聽(tīng)老師的講課內(nèi)容,參與在線(xiàn)討論、提問(wèn)和答疑,實(shí)現(xiàn)了師生之間的即時(shí)互動(dòng)。同時(shí),學(xué)生還可以根據(jù)自己的學(xué)習(xí)進(jìn)度和需求進(jìn)行個(gè)性化學(xué)習(xí),提高了學(xué)習(xí)的針對(duì)性和自主性。 智能管理:智慧教室無(wú)紙化方案支持對(duì)教室內(nèi)的多種終端設(shè)備進(jìn)行無(wú)縫連接和智能化管理,如智能白板、互動(dòng)電子白板、環(huán)境監(jiān)測(cè)設(shè)備等。這些設(shè)備能夠自動(dòng)采集和分析數(shù)據(jù),為教學(xué)和管理提供有力支持。 環(huán)境便捷調(diào)節(jié):智慧教室通過(guò)溫度、濕度和光照感應(yīng)器等設(shè)備,實(shí)現(xiàn)了對(duì)教室內(nèi)環(huán)境的自動(dòng)調(diào)節(jié),為師生提供了更加舒適的學(xué)習(xí)和教學(xué)環(huán)境。 三、實(shí)施步驟 需求分析:根據(jù)學(xué)校的實(shí)際情況和需求,對(duì)智慧教室無(wú)紙化方案進(jìn)行需求分析,明確建設(shè)目標(biāo)和功能需求。 方案設(shè)計(jì):根據(jù)需求分析結(jié)果,設(shè)計(jì)智慧教室無(wú)紙化方案,包括系統(tǒng)架構(gòu)、設(shè)備選型、平臺(tái)開(kāi)發(fā)等方面。 設(shè)備采購(gòu)與安裝:按照方案要求采購(gòu)相關(guān)設(shè)備,并進(jìn)行安裝調(diào)試,確保設(shè)備能夠正常運(yùn)行。 平臺(tái)開(kāi)發(fā)與部署:開(kāi)發(fā)智慧教室平臺(tái),并進(jìn)行部署和測(cè)試,確保平臺(tái)能夠穩(wěn)定運(yùn)行并滿(mǎn)足教學(xué)需求。 培訓(xùn)與推廣:對(duì)教師和學(xué)生進(jìn)行培訓(xùn)和推廣,幫助他們掌握智慧教室無(wú)紙化方案的使用方法和技巧。 四、應(yīng)用效果 智慧教室無(wú)紙化方案的實(shí)施可以帶來(lái)以下應(yīng)用效果: 提升教學(xué)質(zhì)量:通過(guò)數(shù)字化教學(xué)資源和在線(xiàn)學(xué)習(xí)互動(dòng)功能,教師可以更加生動(dòng)、直觀地傳授知識(shí),激發(fā)學(xué)生的學(xué)習(xí)興趣和積極性;學(xué)生可以更加自主、靈活地進(jìn)行學(xué)習(xí),提高學(xué)習(xí)效果和質(zhì)量。 提高教學(xué)效率:智慧教室無(wú)紙化方案可以大大簡(jiǎn)化教學(xué)流程和管理流程,減少教師和管理人員的工作量;同時(shí),通過(guò)智能設(shè)備和平臺(tái)的支持,可以實(shí)現(xiàn)教學(xué)過(guò)程的自動(dòng)化和智能化,提高教學(xué)效率。 實(shí)現(xiàn)綠色環(huán)保:通過(guò)減少對(duì)傳統(tǒng)紙張的依賴(lài)和使用數(shù)字化教學(xué)資源等方式,智慧教室無(wú)紙化方案有助于實(shí)現(xiàn)綠色環(huán)保和可持續(xù)發(fā)展。 智慧教室rtmp方案探究 智慧教室rtmp在智慧教室場(chǎng)景下的應(yīng)用,以實(shí)現(xiàn)實(shí)時(shí)音視頻流傳輸、屏幕共享、互動(dòng)教學(xué)等功能。以下是一個(gè)基于rtmp技術(shù)的智慧教室技術(shù)方案概述: 技術(shù)方案架構(gòu) 1. 組網(wǎng)與服務(wù)器部署 組網(wǎng)方式:建議采用無(wú)線(xiàn)組網(wǎng)方式,并配置高性能的ap模塊以支持大并發(fā)流量。推送端(如教師端設(shè)備)到ap的連接最好是有線(xiàn)網(wǎng)絡(luò),以確保穩(wěn)定性。 服務(wù)器部署:選擇srs或nginx作為rtmp服務(wù)器,可以根據(jù)實(shí)際情況與windows平臺(tái)的教師機(jī)部署在同一臺(tái)機(jī)器上,或部署在獨(dú)立的服務(wù)器上。 2. 教師端設(shè)備配置 如果教師有移動(dòng)pad或其他android設(shè)備,可以直接將音視頻流推送到rtmp服務(wù)器,實(shí)現(xiàn)實(shí)時(shí)授課。 對(duì)于高分屏設(shè)備,建議適當(dāng)縮放視頻分辨率以減輕編碼和上行壓力,如將寬高縮放至2/3,并保持等比例縮放,縮放寬高建議做好字節(jié)對(duì)齊。 3. 學(xué)生端設(shè)備配置 學(xué)生端設(shè)備可以通過(guò)rtmp客戶(hù)端接收來(lái)自服務(wù)器的音視頻流,進(jìn)行實(shí)時(shí)觀看和學(xué)習(xí)。 如果需要,學(xué)生端也可以作為示范案例,將屏幕數(shù)據(jù)共享給其他同學(xué),只需請(qǐng)求同屏,數(shù)據(jù)反推到rtmp服務(wù)器,其他學(xué)生即可查看。 4. 互動(dòng)功能實(shí)現(xiàn) 通過(guò)rtmp協(xié)議,可以實(shí)現(xiàn)教師與學(xué)生的實(shí)時(shí)互動(dòng),如問(wèn)答、投票等。 如果需要更進(jìn)一步的監(jiān)控功能,如教師端監(jiān)控學(xué)生端的屏幕情況,可以通過(guò)學(xué)生端直接推送rtmp流或啟動(dòng)內(nèi)置rtsp服務(wù)的方式實(shí)現(xiàn)。 關(guān)鍵技術(shù)點(diǎn) 1. 編碼與轉(zhuǎn)碼 使用適當(dāng)?shù)囊曨l編碼器(如h.264)和音頻編碼器(如aac)對(duì)音視頻流進(jìn)行編碼,以確保高質(zhì)量的傳輸效果。 如果需要適應(yīng)不同帶寬或設(shè)備要求,可以使用ffmpeg等工具進(jìn)行流的轉(zhuǎn)碼操作。 2. 橫豎屏適配 在android設(shè)備上,橫豎屏切換時(shí)需要考慮屏幕寬高的變化,確保推拉流兩端可以自動(dòng)適配。 編碼器需要重啟以適應(yīng)新的分辨率設(shè)置,拉流端也需要能夠自動(dòng)播放適應(yīng)變化后的視頻流。 3. 補(bǔ)幀策略 當(dāng)屏幕靜止不動(dòng)時(shí),為了避免播放端因幀間距過(guò)大而長(zhǎng)時(shí)間收不到數(shù)據(jù),可以采用補(bǔ)幀策略。 保存最后一幀數(shù)據(jù),并設(shè)定一定的補(bǔ)幀間隔,以確保數(shù)據(jù)的連續(xù)性和流暢性。 4. 網(wǎng)絡(luò)穩(wěn)定性與重連機(jī)制 在網(wǎng)絡(luò)抖動(dòng)或其他網(wǎng)絡(luò)異常情況下,需要有良好的重連機(jī)制和狀態(tài)回饋機(jī)制以確保傳輸?shù)姆€(wěn)定性。 通過(guò)設(shè)置心跳包、超時(shí)重連等策略來(lái)提高系統(tǒng)的健壯性和用戶(hù)體驗(yàn)。 智慧教室方案選型 本文以大牛直播sdk的android的smartservicepublisherv2的同屏demo為例,android采集計(jì)時(shí)器,編碼打包分別啟動(dòng)rtmp推送和輕量級(jí)rtsp服務(wù),windows過(guò)來(lái)分別拉取rtmp和rtsp的流,整體延遲毫秒級(jí): 啟動(dòng)app后,先選擇需要采集的分辨率(如果選原始分辨率,系統(tǒng)不做縮放),然后選擇“啟動(dòng)媒體投影”,并分別啟動(dòng)音頻播放采集、采集麥克風(fēng)。如果音頻播放采集和采集麥克風(fēng)都打開(kāi),可以通過(guò)右側(cè)下拉框,推送過(guò)程中,音頻播放采集和麥克風(fēng)采集實(shí)時(shí)切換。需要注意的是,android采集音頻播放的audio,音頻播放采集是依賴(lài)屏幕投影的,屏幕投影關(guān)閉后,音頻播放也就采不到了。 編碼的話(huà),考慮到屏幕分辨率一般不會(huì)太低,我們可以縮放后再推送,默認(rèn)我們開(kāi)啟了原始分辨率、標(biāo)準(zhǔn)分辨率、低分辨率選項(xiàng)設(shè)置。一般建議標(biāo)準(zhǔn)分辨率即可。如果對(duì)畫(huà)質(zhì)和分辨率要求比較高,可以選擇原始分辨率。設(shè)備支持硬編碼,優(yōu)先選擇h.264硬編,如果是h.265硬編,需要rtmp服務(wù)器支持?jǐn)U展h.265(或enhanced rtmp)。都選擇好后,設(shè)置rtmp推送的url,點(diǎn)開(kāi)始rtmp推送按鈕即可。 下面從代碼邏輯實(shí)現(xiàn)角度,介紹下同屏的具體流程: 啟動(dòng)媒體服務(wù),進(jìn)入系統(tǒng)后,我們會(huì)自動(dòng)啟動(dòng)媒體服務(wù),對(duì)應(yīng)的實(shí)現(xiàn)邏輯如下: 代碼語(yǔ)言:java 復(fù)制 /* * mainactivity.java * created by daniusdk.com on 2017/04/19. * wechat: xinsheng120 */ private void start_media_service() { intent intent = new intent(getapplicationcontext(), streammediademoservice.class); if (build.version.sdk_int >= 26) { log.i(tag, "startforegroundservice"); startforegroundservice(intent); } else startservice(intent); bindservice(intent, service_connection_, context.bind_auto_create); button_stop_media_service_.settext("停止媒體服務(wù)"); } private void stop_media_service() { if (media_engine_callback_ != null) media_engine_callback_.reset(null); if (media_engine_ != null) { media_engine_.unregister_callback(media_engine_callback_); media_engine_ = null; } media_engine_callback_ = null; if (media_binder_ != null) { media_binder_ = null; unbindservice(service_connection_); } intent intent = new intent(getapplicationcontext(), streammediademoservice.class); stopservice(intent); button_stop_media_service_.settext("啟動(dòng)媒體服務(wù)"); } 需要注意的是,android 6.0及以上版本,動(dòng)態(tài)獲取audio權(quán)限: 代碼語(yǔ)言:java 復(fù)制 /* * mainactivity.java * created by daniusdk.com on 2017/04/19. * wechat: xinsheng120 */ private boolean check_record_audio_permission() { //6.0及以上版本,動(dòng)態(tài)獲取audio權(quán)限 if (packagemanager.permission_granted == checkpermission(android.manifest.permission.record_audio, process.mypid(), process.myuid())) return true; return false; } private void request_audio_permission() { if (build.version.sdk_int < 23) return; log.i(tag, "requestpermissions record_audio"); activitycompat.requestpermissions(this, new string[] {android.manifest.permission.record_audio}, request_audio_code); } @override public void onrequestpermissionsresult(int requestcode, string[] permissions, int[] grantresults) { switch(requestcode){ case request_audio_code: if (grantresults != null && grantresults.length > 0 && packagemanager.permission_granted == grantresults[0]) { log.i(tag, "record_audio permission has been granted"); }else { toast.maketext(this, "請(qǐng)開(kāi)啟錄音權(quán)限!", toast.length_short).show(); } break; } } 啟動(dòng)、停止媒體投影: 代碼語(yǔ)言:java 復(fù)制 /* * mainactivity.java * created by daniusdk.com on 2017/04/19. * wechat: xinsheng120 */ private class buttonstartmediaprojectionlistener implements onclicklistener { public void onclick(view v) { if (null == media_engine_) return; if (media_engine_.is_video_capture_running()) { media_engine_.stop_audio_playback_capture(); media_engine_.stop_video_capture(); resolution_selector_.setenabled(true); button_capture_audio_playback_.settext("采集音頻播放"); button_start_media_projection_.settext("啟動(dòng)媒體投影"); return; } intent capture_intent; capture_intent = media_projection_manager_.createscreencaptureintent(); startactivityforresult(capture_intent, request_media_projection); log.i(tag, "startactivityforresult request media projection"); } } 啟動(dòng)媒體投影后,選擇“采集音頻播放”,如果需要采集麥克風(fēng),可以點(diǎn)擊“采集麥克風(fēng)”: 代碼語(yǔ)言:java 復(fù)制 /* * mainactivity.java * created by daniusdk.com on 2017/04/19. * wechat: xinsheng120 */ private class buttoncaptureaudioplaybacklistener implements onclicklistener { public void onclick(view v) { if (null == media_engine_) return; if (media_engine_.is_audio_playback_capture_running()) { media_engine_.stop_audio_playback_capture(); button_capture_audio_playback_.settext("采集音頻播放"); return; } if (!media_engine_.start_audio_playback_capture(44100, 1)) log.e(tag, "start_audio_playback_capture failed"); else button_capture_audio_playback_.settext("停止音頻播放采集"); } } private class buttonstartaudiorecordlistener implements onclicklistener { public void onclick(view v) { if (null == media_engine_) return; if (media_engine_.is_audio_record_running()) { media_engine_.stop_audio_record(); button_start_audio_record_.settext("采集麥克風(fēng)"); return; } if (!media_engine_.start_audio_record(44100, 1)) log.e(tag, "start_audio_record failed"); else button_start_audio_record_.settext("停止麥克風(fēng)"); } } 啟動(dòng)、停止rtmp推送: 代碼語(yǔ)言:java 復(fù)制 /* * mainactivity.java * created by daniusdk.com on 2017/04/19. * wechat: xinsheng120 */ private class buttonrtmppublisherlistener implements onclicklistener { @override public void onclick(view v) { if (null == media_engine_) return; if (media_engine_.is_rtmp_stream_running()) { media_engine_.stop_rtmp_stream(); button_rtmp_publisher_.settext("開(kāi)始rtmp推送"); text_view_rtmp_url_.settext("rtmp url: "); log.i(tag, "stop rtmp stream"); return; } if (!media_engine_.is_video_capture_running()) return; string rtmp_url; if (input_rtmp_url_ != null && input_rtmp_url_.length() > 1) { rtmp_url = input_rtmp_url_; log.i(tag, "start, input rtmp url:" + rtmp_url); } else { rtmp_url = baseurl + string.valueof((int) (system.currenttimemillis() % 1000000)); log.i(tag, "start, generate random url:" + rtmp_url); } media_engine_.set_fps(fps_); media_engine_.set_gop(gop_); media_engine_.set_video_encoder_type(video_encoder_type); if (!media_engine_.start_rtmp_stream(rtmp_url)) return; button_rtmp_publisher_.settext("停止rtmp推送"); text_view_rtmp_url_.settext("rtmp url:" + rtmp_url); log.i(tag, "rtmp url:" + rtmp_url); } } 可以看到,上述操作,都是在mainactivity.java調(diào)用的,如果是需要做demo版本集成,只需要關(guān)注mainactivity.java的業(yè)務(wù)邏輯即可,為了便于開(kāi)發(fā)者對(duì)接,我們做了接口的二次封裝,除了常規(guī)的rtmp推送、輕量級(jí)rtsp服務(wù)設(shè)計(jì)外,如果需要錄像,只要在mainactivity.java調(diào)用這里的接口邏輯即可,非常方便: 代碼語(yǔ)言:java 復(fù)制 /* * ntstreammediaengine.java * created by daniusdk.com on 2017/04/19. * wechat: xinsheng120 */ package com.daniulive.smartpublisher; public interface ntstreammediaengine { void register_callback(callback callback); void unregister_callback(callback callback); void set_resolution_level(int level); int get_resolution_level(); /* * 啟動(dòng)媒體投影 */ boolean start_video_capture(int token_code, android.content.intent token_data); boolean is_video_capture_running(); void stop_video_capture(); /* * 啟動(dòng)麥克風(fēng) */ boolean start_audio_record(int sample_rate, int channels); boolean is_audio_record_running(); void stop_audio_record(); /* * android 10及以上支持, android10以下設(shè)備調(diào)用直接返回false * 需要有record_audio權(quán)限 * 要開(kāi)啟媒體投影 */ boolean start_audio_playback_capture(int sample_rate, int channels); boolean is_audio_playback_capture_running(); void stop_audio_playback_capture(); /* * 輸出的音頻類(lèi)型 * 0: 不輸出音頻 * 1: 輸出麥克風(fēng) * 2: 輸出audio playback(android 10及以上支持) */ boolean set_audio_output_type(int type); int get_audio_output_type(); void set_fps(int fps); void set_gop(int gop); boolean set_video_encoder_type(int video_encoder_type); int get_video_encoder_type(); /* * 推送rtmp */ boolean start_rtmp_stream(string url); boolean is_rtmp_stream_running(); string get_rtmp_stream_url(); void stop_rtmp_stream(); /* * 啟動(dòng)rtsp server, 需要設(shè)置端口,用戶(hù)名和密碼可選 */ boolean start_rtsp_server(int port, string user_name, string password); boolean is_rtsp_server_running(); void stop_rtsp_server(); /* * 發(fā)布rtsp流 */ boolean start_rtsp_stream(string stream_name); boolean is_rtsp_stream_running(); string get_rtsp_stream_url(); void stop_rtsp_stream(); /* * 啟動(dòng)本地錄像 */ boolean start_stream_record(string record_directory, int file_max_size); boolean is_stream_recording(); void stop_stream_record(); boolean is_stream_running(); interface callback { void on_nt_video_capture_stop(); void on_nt_rtsp_stream_url(string url); } } 如果對(duì)音視頻這塊相對(duì)了解的開(kāi)發(fā)者,可以繼續(xù)到ntstreammediaprojectionengineimpl.java文件,查看或修改相關(guān)的技術(shù)實(shí)現(xiàn): 代碼語(yǔ)言:java 復(fù)制 /* * ntstreammediaprojectionengineimpl.java * created by daniusdk.com on 2017/04/19. * wechat: xinsheng120 */ package com.daniulive.smartpublisher; import android.app.activity; import android.app.application; import android.app.service; import android.content.context; import android.content.intent; import android.content.pm.packagemanager; import android.graphics.point; import android.graphics.rect; import android.media.image; import android.media.projection.mediaprojection; import android.media.projection.mediaprojectionmanager; import android.os.build; import android.os.handler; import android.os.handlerthread; import android.os.process; import android.util.log; import android.util.size; import android.view.surface; import android.view.windowmanager; import android.view.windowmetrics; import com.eventhandle.ntsmarteventcallbackv2; import com.eventhandle.ntsmarteventid; import com.voiceengine.ntaudiorecordv2; import com.voiceengine.ntaudiorecordv2callback; import com.videoengine.ntmediaprojectioncapture; import com.voiceengine.ntaudioplaybackcapture; import java.lang.ref.weakreference; import java.nio.bytebuffer; import java.util.concurrent.copyonwritearraylist; import java.util.concurrent.atomic.atomicreference; public class ntstreammediaprojectionengineimpl implements autocloseable, ntstreammediaengine, ntvirtualdisplaysurfacesinker.callback, ntmediaprojectioncapture.callback { private static final string tag = "ntlogprojectionengine"; private static final size default_size = new size(1920, 1080); public static final int resolution_low = 0; public static final int resolution_medium = 1; public static final int resolution_high = 2; private final application application_; private final long image_thread_id_; private final long running_thread_id_; private final handler image_handler_; private final handler running_handler_; private final windowmanager window_manager_; private final mediaprojectionmanager projection_manager_; private int screen_density_dpi_ = android.util.displaymetrics.density_default; private final smartpublisherjniv2 lib_publisher_; private final libpublisherwrapper.rtspserver rtsp_server_; private final libpublisherwrapper stream_publisher_; private final copyonwritearraylist<ntstreammediaengine.callback> callbacks_ = new copyonwritearraylist<>(); private final atomicreference<videosinkercapturepair> video_capture_pair_ = new atomicreference<>(); private final audiorecordcallbackimpl audio_record_callback_; private final audioplaybackcapturecallbackimpl audio_playback_capture_callback_; private final atomicreference<ntaudiorecordv2> audio_record_ = new atomicreference<>(); private final atomicreference<ntaudioplaybackcapture> audio_playback_capture_ = new atomicreference<>(); ... } 以android平臺(tái)rtmp推送模塊為例,我們主要實(shí)現(xiàn)了如下功能: 音頻編碼:aac/speex; 視頻編碼:h.264、h.265; 推流協(xié)議:rtmp; [音視頻]支持純音頻/純視頻/音視頻推送; [攝像頭]支持采集過(guò)程中,前后攝像頭實(shí)時(shí)切換; 支持幀率、關(guān)鍵幀間隔(gop)、碼率(bit-rate)設(shè)置; 支持rtmp推送 live|record模式設(shè)置; 支持前置攝像頭鏡像設(shè)置; 支持軟編碼、特定機(jī)型硬編碼; 支持橫屏、豎屏推送; 支持android屏幕采集推送; 支持自建標(biāo)準(zhǔn)rtmp服務(wù)器或cdn; 支持?jǐn)嗑W(wǎng)自動(dòng)重連、網(wǎng)絡(luò)狀態(tài)回調(diào); 支持實(shí)時(shí)動(dòng)態(tài)水??; 支持實(shí)時(shí)快照; 支持降噪處理、自動(dòng)增益控制; 支持外部編碼前音視頻數(shù)據(jù)對(duì)接; 支持外部編碼后音視頻數(shù)據(jù)對(duì)接; 支持rtmp擴(kuò)展h.265(需設(shè)備支持h.265特定機(jī)型硬編碼)和enhanced rtmp; 支持實(shí)時(shí)音量調(diào)節(jié); 支持?jǐn)U展錄像模塊; 支持unity接口; 支持h.264擴(kuò)展sei發(fā)送模塊; 支持android 5.1及以上版本。 總結(jié) 智慧教室無(wú)紙化方案是一種具有廣泛應(yīng)用前景和發(fā)展?jié)摿Φ慕虒W(xué)解決方案。它不僅能夠提升教學(xué)質(zhì)量和學(xué)習(xí)效率,還能夠?qū)崿F(xiàn)綠色環(huán)保和可持續(xù)發(fā)展目標(biāo)。隨著信息技術(shù)的不斷發(fā)展和普及,智慧教室無(wú)紙化方案將會(huì)在未來(lái)的教育領(lǐng)域中發(fā)揮更加重要的作用。 智慧教室rtmp技術(shù)方案通過(guò)利用rtmp協(xié)議的實(shí)時(shí)性和低延遲特性,結(jié)合適當(dāng)?shù)慕M網(wǎng)、服務(wù)器部署、編碼轉(zhuǎn)碼、橫豎屏適配、補(bǔ)幀策略以及網(wǎng)絡(luò)穩(wěn)定性保障措施,為智慧教室場(chǎng)景下的實(shí)時(shí)授課、屏幕共享、互動(dòng)教學(xué)等功能提供了強(qiáng)有力的技術(shù)支持。以上拋磚引玉,感興趣的開(kāi)發(fā)者,可以單獨(dú)跟我溝通探討。

京東囤兵saas財(cái)務(wù)軟件 企業(yè)級(jí)市場(chǎng)現(xiàn)三國(guó)殺:

顯然hr并不是京東的唯一開(kāi)放賦能的產(chǎn)品,從hr到財(cái)務(wù)軟件再到行政辦公等產(chǎn)品,未來(lái)京東都會(huì)有所涉獵。京東要發(fā)布saas財(cái)務(wù)軟件? 京東為什么要從財(cái)務(wù)軟件切入?財(cái)務(wù)系統(tǒng)是內(nèi)外連接管理的關(guān)鍵,京東選擇從財(cái)務(wù)、hr等方面入局,除了可以避開(kāi)同阿里和騰訊正面交鋒,還有其他深層的動(dòng)因。 第一、京東財(cái)務(wù)系統(tǒng)有別于用友和金蝶等財(cái)務(wù)系統(tǒng),是基于京東內(nèi)部電商業(yè)務(wù)自主研發(fā)而成,有其獨(dú)特性和實(shí)踐性。 與傳統(tǒng)財(cái)務(wù)軟件有所不同,京東依托京東開(kāi)放產(chǎn)品賦能,融合京東集團(tuán)復(fù)雜業(yè)務(wù)場(chǎng)景下的最佳實(shí)踐,提供了涵蓋收支、結(jié)算、資金、票務(wù)、稅務(wù)、賬務(wù)在內(nèi)的整套解決方案,再對(duì)接企業(yè)內(nèi)部系統(tǒng)構(gòu)建企業(yè)自己的云業(yè)務(wù)生態(tài)。 拋開(kāi)以上幾點(diǎn)原因外,京東還有其他的戰(zhàn)略布署:第一、從財(cái)務(wù)軟件試水,未來(lái)可能會(huì)輸出更多的云業(yè)務(wù)能力。包括人力資源、行政、協(xié)同辦公等等。第二、在云計(jì)算方面京東急需找到一個(gè)突破點(diǎn)。

蘋(píng)果被曝重大系統(tǒng)漏洞:新款 macbook、iphone 12、ipad pro 統(tǒng)統(tǒng)波及!root 權(quán)限秒獲取,隱私文件隨意看:

看到這一幕,評(píng)論區(qū)的網(wǎng)友們也紛紛震驚:「啪的一下就執(zhí)行完了,很快啊?!埂杆f(shuō)他是測(cè)試的,他可不是瞎測(cè)試的,終端,腳本,提權(quán),訓(xùn)練有素,后來(lái)他說(shuō)他搞過(guò)好幾年安全。 就是啪的一下,明明系統(tǒng)說(shuō)了不,該 app 仍然讀取到了相冊(cè)和通訊錄,并上傳到了攻擊者的服務(wù)器端。漏洞意味著什么?毫無(wú)疑問(wèn),這是第一個(gè)被發(fā)現(xiàn)的能影響蘋(píng)果 apple silicon 芯片設(shè)備的安全漏洞。 騰訊安全玄武實(shí)驗(yàn)室就表示:理論上,任何惡意的 app 開(kāi)發(fā)者都可以利用此漏洞。而且漏洞影響的設(shè)備,也不少。 一方面,騰訊安全玄武實(shí)驗(yàn)室是全球頂尖的安全實(shí)驗(yàn)室,能發(fā)現(xiàn)漏洞也是實(shí)力使然;另一方面,按照江湖規(guī)矩,在消息曝光前,玄武實(shí)驗(yàn)室早已將漏洞技術(shù)細(xì)節(jié)報(bào)告給了蘋(píng)果安全團(tuán)隊(duì)。 關(guān)于騰訊安全玄武實(shí)驗(yàn)室最后,還是贅述補(bǔ)充下此次發(fā)現(xiàn)漏洞的安全大神團(tuán)隊(duì)。關(guān)注安全領(lǐng)域的盆友,對(duì)騰訊安全玄武實(shí)驗(yàn)室一定不會(huì)陌生。作為騰訊七大專(zhuān)業(yè)實(shí)驗(yàn)室之一,于 2014 年成立。

敏捷畫(huà)卷:中國(guó)軟件史的精彩側(cè)影:

以上內(nèi)容來(lái)自thoughtworks中國(guó)區(qū)總經(jīng)理張松為《敏捷中國(guó)史》所作的序。在這一系列課程中,作者熊節(jié)也用部分章節(jié)敘述了在thoughtworks與敏捷的不解之緣。 2005 年,被西安豐富的高校資源和高新區(qū)政府的熱情態(tài)度所吸引,thoughtworks 在西安軟件園落戶(hù),目標(biāo)是服務(wù)中國(guó)本土客戶(hù)。 當(dāng)時(shí)臺(tái)下的聽(tīng)眾一片茫然。由于政府主導(dǎo)的重點(diǎn)行業(yè)信息化工程固有的特點(diǎn),在當(dāng)時(shí)絕大多數(shù)中國(guó) it 業(yè)者的概念中,軟件項(xiàng)目就只有一次預(yù)算和一次交付(多發(fā)生在年初和年末)。 在早期的三個(gè)本地項(xiàng)目中,thoughtworks 與西安高新區(qū)政府和河北省地稅局的合作都出現(xiàn)了不愉快,為時(shí)不長(zhǎng)即告結(jié)束,只有與廈門(mén)的私企好望角的合作持續(xù)了較長(zhǎng)時(shí)間。 在時(shí)任 thoughtworks 中國(guó)區(qū)副總經(jīng)理郭曉的開(kāi)場(chǎng)演講中,他一方面迎合了行業(yè)對(duì)成本的重視,列舉 forrester 的數(shù)據(jù)說(shuō)明采用敏捷開(kāi)發(fā)方法可以大幅節(jié)省軟件項(xiàng)目成本。

澳大利亞瘋狂計(jì)劃:把現(xiàn)實(shí)世界數(shù)字化:

這是澳大利亞政府研究機(jī)構(gòu)csiro一項(xiàng)十年計(jì)劃的主要想法,該機(jī)構(gòu)向建造一個(gè)數(shù)字版的澳大利亞。 想要讓它成為現(xiàn)實(shí),該研究團(tuán)隊(duì)就必須找到一種將政府機(jī)構(gòu)、研究人員、私人企業(yè)和平民科學(xué)家提供的數(shù)據(jù)結(jié)合起來(lái)的方法,以便讓人們對(duì)各種不同體系(不論是水、能量、農(nóng)業(yè)、健康或者經(jīng)濟(jì))如何與彼此溝通有更好的理解。 項(xiàng)目領(lǐng)導(dǎo)者jonathan yu表示:“我們從過(guò)去的項(xiàng)目里了解到跨學(xué)科研究方法是關(guān)鍵,但現(xiàn)在根本沒(méi)有數(shù)據(jù)基礎(chǔ)架構(gòu)?!?5年前,yu和lemon在塔斯馬尼亞島利用傳感器網(wǎng)絡(luò)和數(shù)據(jù)資源,從數(shù)據(jù)的角度來(lái)看待這座島嶼的狀態(tài)。該島嶼上的感應(yīng)器能實(shí)時(shí)監(jiān)測(cè)天氣、二氧化碳濃度、動(dòng)物和養(yǎng)殖魚(yú)的健康以及水儲(chǔ)存與能量使用情況。 lemon說(shuō):“看到一個(gè)社區(qū)利用他們能得到的信息采取相應(yīng)措施,是一件很有趣的事情。對(duì)我而言這不過(guò)是oznome的牛刀小試而已?!?br>
轉(zhuǎn)載請(qǐng)注明出處,本站網(wǎng)址:http://www.opentechcloud.com/news_1766.html
相關(guān)推薦