色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙分布式相機“踩坑”分享

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 2023-03-08 14:19 ? 次閱讀

接上一篇 OpenHarmony 分布式相機(上),今天我們來說下如何實現分布式相機。

實現分布式相機其實很簡單,正如官方介紹的一樣,當被控端相機被連接成功后,可以像使用本地設備一樣使用遠程相機。

我們先看下效果:

066055e4-b9cf-11ed-bfe3-dac502259ad0.jpg

上一篇已經完整的介紹了如何開發一個本地相機,對于分布式相機我們需要完成以下幾個步驟。

前置條件:

兩臺帶攝像頭的設備

建議使用相同版本的 OH 系統,本案例使用 OpenHarmony 3.2 beta5

連接在同一個網絡

開發步驟:

引入設備管理(@ohos.distributedHardware.deviceManager)

通過 deviceManager 發現周邊設備

通過 pin 碼完成設備認證

獲取和展示可信設備

在可信設備直接選擇切換不同設備的攝像頭

在主控端查看被控端的攝像頭圖像

以上描述的功能在應用開發時可以使用一張草圖來表示,草圖中切換設備->彈窗顯示設備列表的過程,草圖如下:

0679e5a4-b9cf-11ed-bfe3-dac502259ad0.png

代碼

①RemoteDeviceModel.ts

說明:遠程設備業務處理類,包括獲取可信設備列表、獲取周邊設備列表、監聽設備狀態(上線、下線、狀態變化)、監聽設備連接失敗、設備授信認證、卸載設備狀態監聽等。

代碼如下:

importdeviceManagerfrom'@ohos.distributedHardware.deviceManager'
importLoggerfrom'./util/Logger'
constTAG:string='RemoteDeviceModel'
letsubscribeId:number=-1
exportclassRemoteDeviceModel{
privatedeviceList:Array=[]
privatediscoverList:Array=[]
privatecallback:()=>void
privateauthCallback:()=>void
privatedeviceManager:deviceManager.DeviceManager
constructor(){
}
publicregisterDeviceListCallback(bundleName:string,callback){
if(typeof(this.deviceManager)!=='undefined'){
this.registerDeviceListCallbackImplement(callback)
return
}
Logger.info(TAG,`deviceManager.createDeviceManagerbegin`)
try{
deviceManager.createDeviceManager(bundleName,(error,value)=>{
if(error){
Logger.info(TAG,`createDeviceManagerfailed.`)
return
}
this.deviceManager=value
this.registerDeviceListCallbackImplement(callback)
Logger.info(TAG,`createDeviceManagercallbackreturned,error=${error},value=${value}`)
})
}catch(err){
Logger.error(TAG,`createDeviceManagerfailed,codeis${err.code},messageis${err.message}`)
}
Logger.info(TAG,`deviceManager.createDeviceManagerend`)
}
privatedeviceStateChangeActionOffline(device){
if(this.deviceList.length<=?0)?{
????????????this.callback()
????????????return
????????}
????????for?(let?j?=?0;?j?{
if(data===null){
return
}
Logger.info(TAG,`deviceStateChangedata=${JSON.stringify(data)}`)
switch(data.action){
casedeviceManager.DeviceStateChangeAction.READY:
this.discoverList=[]
this.deviceList.push(data.device)
try{
letlist=this.deviceManager.getTrustedDeviceListSync()
if(typeof(list)!=='undefined'&&typeof(list.length)!=='undefined'){
this.deviceList=list
}
this.callback()
}catch(err){
Logger.error(TAG,`getTrustedDeviceListSyncfailed,codeis${err.code},messageis${err.message}`)
}
break
casedeviceManager.DeviceStateChangeAction.OFFLINE:
casedeviceManager.DeviceStateChangeAction.CHANGE:
this.deviceStateChangeActionOffline(data.device)
break
default:
break
}
})
this.deviceManager.on('deviceFound',(data)=>{
if(data===null){
return
}
Logger.info(TAG,`deviceFounddata=${JSON.stringify(data)}`)
this.deviceFound(data)
})
this.deviceManager.on('discoverFail',(data)=>{
Logger.info(TAG,`discoverFaildata=${JSON.stringify(data)}`)
})
this.deviceManager.on('serviceDie',()=>{
Logger.info(TAG,`serviceDie`)
})
this.startDeviceDiscovery()
}
privatedeviceFound(data){
for(vari=0;i=0){
Logger.info(TAG,`startedDeviceDiscovery`)
return
}
subscribeId=Math.floor(65536*Math.random())
letinfo={
subscribeId:subscribeId,
mode:deviceManager.DiscoverMode.DISCOVER_MODE_ACTIVE,
medium:deviceManager.ExchangeMedium.COAP,
freq:deviceManager.ExchangeFreq.HIGH,
isSameAccount:false,
isWakeRemote:true,
capability:deviceManager.SubscribeCap.SUBSCRIBE_CAPABILITY_DDMP
}
Logger.info(TAG,`startDeviceDiscovery${subscribeId}`)
try{
// todo 多次啟動發現周邊設備有什么影響嗎?
this.deviceManager.startDeviceDiscovery(info)
}catch(err){
Logger.error(TAG,`startDeviceDiscoveryfailed,codeis${err.code},messageis${err.message}`)
}
}
publicunregisterDeviceListCallback(){
Logger.info(TAG,`stopDeviceDiscovery$subscribeId}`)
this.deviceList=[]
this.discoverList=[]
try{
this.deviceManager.stopDeviceDiscovery(subscribeId)
}catch(err){
Logger.error(TAG,`stopDeviceDiscoveryfailed,codeis${err.code},messageis${err.message}`)
}
this.deviceManager.off('deviceStateChange')
this.deviceManager.off('deviceFound')
this.deviceManager.off('discoverFail')
this.deviceManager.off('serviceDie')
}
publicauthenticateDevice(device,extraInfo,callBack){
Logger.info(TAG,`authenticateDevice${JSON.stringify(device)}`)
for(leti=0;i{
if(err){
Logger.error(TAG,`authenticateDeviceerror:${JSON.stringify(err)}`)
this.authCallback=null
return
}
Logger.info(TAG,`authenticateDevicesucceed:${JSON.stringify(data)}`)
this.authCallback=callBack
})
}catch(err){
Logger.error(TAG,`authenticateDevicefailed,codeis${err.code},messageis${err.message}`)
}
}
}
/**
*已認證設備列表
*/
publicgetDeviceList():Array{
returnthis.deviceList
}
/**
*發現設備列表
*/
publicgetDiscoverList():Array{
returnthis.discoverList
}
}

getDeviceList() :獲取已認證的設備列表;getDiscoverList:發現周邊設備的列表。

②DeviceDialog.ets

說明:通過 RemoteDeviceModel.getDiscoverList() 和通過 RemoteDeviceModel.getDeviceList() 獲取到所有周邊設備列表,用戶通過點擊"切換設備"按鈕彈窗顯示所有設備列表信息

importdeviceManagerfrom'@ohos.distributedHardware.deviceManager';
constTAG='DeviceDialog'
//分布式設備選擇彈窗
@CustomDialog
exportstructDeviceDialog{
privatecontroller?:CustomDialogController//彈窗控制器
@LinkdeviceList:Array//設備列表
@LinkselectIndex:number//選中的標簽
build(){
Column(){
List(){
ForEach(this.deviceList,(item:deviceManager.DeviceInfo,index)=>{
ListItem(){
Row(){
Text(item.deviceName)
.fontSize(22)
.width(350)
.fontColor(Color.Black)
Image(index===this.selectIndex?$r('app.media.checked'):$r('app.media.uncheck'))
.width(35)
.objectFit(ImageFit.Contain)
}
.height(55)
.onClick(()=>{
console.info(`${TAG}selectdevice${item.deviceId}`)
if(index===this.selectIndex){
console.info(`${TAG}devicenotchange`)
}else{
this.selectIndex=index
}
this.controller.close()
})
}
},item=>item.deviceName)
}
.width('100%')
.height(150)
Button(){
Text($r('app.string.cancel'))
.width('100%')
.height(45)
.fontSize(18)
.fontColor(Color.White)
.textAlign(TextAlign.Center)
}.onClick(()=>{
this.controller.close()
})
.backgroundColor('#ed3c13')
}
.width('100%')
.padding(20)
.backgroundColor(Color.White)
.border({
color:Color.White,
radius:20
})
}
}
③打開設備列表彈窗

說明:在 index.ets 頁面中,點擊“切換設備”按鈕即可以開啟設備列表彈窗,通過 @Watch(‘selectedIndexChange’) 監聽用戶選擇的設備標簽,在 devices 中獲取到具體的 DeviceInfo 對象。

代碼如下:

@State@Watch('selectedIndexChange')selectIndex:number=0
//設備列表
@Statedevices:Array=[]
//設備選擇彈窗
privatedialogController:CustomDialogController=newCustomDialogController({
builder:DeviceDialog({
deviceList:$devices,
selectIndex:$selectIndex,
}),
autoCancel:true,
alignment:DialogAlignment.Center
})


showDialog(){
console.info(`${TAG}RegisterDeviceListCallbackbegin`)
distributed.registerDeviceListCallback(BUNDLE_NAME,()=>{
console.info(`${TAG}RegisterDeviceListCallbackcallbackentered`)
this.devices=[]
//添加本地設備
this.devices.push({
deviceId:Constant.LOCAL_DEVICE_ID,
deviceName:Constant.LOCAL_DEVICE_NAME,
deviceType:0,
networkId:'',
range:1//發現設備的距離
})
letdiscoverList=distributed.getDiscoverList()
letdeviceList=distributed.getDeviceList()
letdiscoveredDeviceSize=discoverList.length
letdeviceSize=deviceList.length
console.info(`${TAG}discoveredDeviceSize:${discoveredDeviceSize}deviceSize:${deviceSize}`)
letdeviceTemp=discoveredDeviceSize>0?discoverList:deviceList
for(letindex=0;index=distributed.getDiscoverList()
if(discoverList.length<=?0)?{
??????this.mCurDeviceID?=?this.devices[this.selectIndex].deviceId
??????await?this.switchDevice()
??????this.devices?=?[]
??????return
????}
????let?selectDeviceName?=?this.devices[this.selectIndex].deviceName
????let?extraInfo?=?{
??????'targetPkgName':?BUNDLE_NAME,
??????'appName':?APP_NAME,
??????'appDescription':?APP_NAME,
??????'business':?'0'
????}
????distributed.authenticateDevice(this.devices[this.selectIndex],?extraInfo,?async?()?=>{
//獲取到相關的設備ID,啟動遠程應用
for(varindex=0;index

④重新加載相機

說明:根據用戶選擇的設備標簽獲取到當前用戶需要切換的相機設備對象,重新加載相機,重新加載需要釋放原有的相機資源,然后重新構建 createCameraInput、createPreviewOutput、createSession。 可能你注意到這里好像沒有執行 createPhotoOutput,這是因為在實踐過程中發現,添加了一個當前設備所支持的拍照配置到會話管理(CaptureSession.addOutput())時,系統會返回當前拍照配置流不支持,并關閉相機,導致相機預覽黑屏,所以這里沒有添加。

issues:遠程相機拍照失敗 not found in supported streams

https://gitee.com/openharmony/distributedhardware_distributed_camera/issues/I6E5ZX
mCameraService:這個是相機管理類,代碼可以查看上一篇:OpenHarmony 分布式相機(上)中查看。

代碼如下:

/**
*切換攝像頭
*同一臺設備上切換不同攝像頭
*/
asyncswitchCamera(){
console.info(`${TAG}switchCamera`)
letcameraList=this.mCameraService.getDeviceCameras(this.mCurDeviceID)
if(cameraList&&cameraList.length>1){
letcameraCount:number=cameraList.length
console.info(`${TAG}cameralist${cameraCount}}`)
if(this.mCurCameraIndex

⑤加載過度動畫

說明:在相機切換中會需要釋放原相機的資源,在重啟新相機,在通過軟總線通道同步遠程相機的預覽數據。 這里需要一些時間,根據目前測試,在網絡穩定狀態下,切換時間 3~5s,網絡不穩定狀態下,切換最長需要 13s,當然有時候會出現無法切換成功,這種情況可能是遠程設備已經下線,無法再獲取到數據。

代碼如下:

@StateisSwitchDeviceing:boolean=false//是否正在切換相機

if(this.isSwitchDeviceing){
Column(){
Image($r('app.media.load_switch_camera'))
.width(400)
.height(306)
.objectFit(ImageFit.Fill)
Text($r('app.string.switch_camera'))
.width('100%')
.height(50)
.fontSize(16)
.fontColor(Color.White)
.align(Alignment.Center)
}
.width('100%')
.height('100%')
.backgroundColor(Color.Black)
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
.onClick(()=>{
})
}
至此,分布式相機的整體流程就已實現完成。下面我們介紹下分布式相機開發中所遇到的問題。

分布式相機問題一覽

對于開發過程中所遇到的一些坑,前面多少有簡單的提到一些,這里做一次規整,也算是一次回顧。

①首次授權成功無法顯示相機預覽

解析:我們正常會在 MainAbility.ts 的 onCreate() 函數加載的時候執行申請授權,在 index.ets 頁面中,當 XComponent 組件 onLoad() 回調后執行初始化相機操作,代碼如下:

MainAbility.ts:

constTAG:string='[DistributedCamera]'
letpermissionList:Array=[
"ohos.permission.MEDIA_LOCATION",
"ohos.permission.READ_MEDIA",
"ohos.permission.WRITE_MEDIA",
"ohos.permission.CAMERA",
"ohos.permission.MICROPHONE",
"ohos.permission.DISTRIBUTED_DATASYNC"
]


exportdefaultclassMainAbilityextendsAbility{
asynconCreate(want,launchParam){
console.info(`${TAG}onCreate`)
globalThis.cameraAbilityContext=this.context
awaitglobalThis.cameraAbilityContext.requestPermissionsFromUser(permissionList)
}
}
index.ets:
//...
//截取部分主要代碼

Column(){
XComponent({
id:'componentId',
type:'surface',
controller:this.XComponentController
}).onLoad(async()=>{
console.info(`${TAG}XComponentonLoadiscalled`)
this.XComponentController.setXComponentSurfaceSize({
surfaceWidth:Resolution.DEFAULT_WIDTH,
surfaceHeight:Resolution.DEFAULT_HEIGHT
})
this.surfaceId=this.XComponentController.getXComponentSurfaceId()
console.info(`${TAG}surfaceId:${this.surfaceId}`)
awaitthis.initCamera()
}).height('100%')
.width('100%')
}
.width('100%')
.height('75%')
.margin({
bottom:20
})

//...

應用啟動后,調用了 requestPermissionsFromUser() 請求權限后,但未手動授權時,查看相關日志:

0694b794-b9cf-11ed-bfe3-dac502259ad0.png

日志告訴我們,page 的生命周期已啟動到 onShow,并且頁面布局也完成了加載,XComponent 組件回調 onLoad()。 但是由于還未授權,導致無法初始化相機,此時即便授權成功,也不會再進行初始化,導致相機無法啟動,無預覽視圖。 知道原因后,我們可以有多種方式解決,重點就是在授權完成后,需要再次觸發初始化相機,讓相機啟動才可以正常預覽。

我的處理方式:

在 index.ets 頁面中處理授權

定義是否已授權的標識,用于判斷是否可以初始化相機

定義是否已經初始化相機標識,防止對此初始化

在 page 頁面初始化函數 aboutToAppear() 中請求權限,并在權限申請結果中添加初始化相機操作

XComponent 組件回調 onLoad() 初始化相機操作不變

index.ets:

privateisInitCamera:boolean=false//是否已初始化相機
privateisPermissions:boolean=false//是否完成授權

asyncaboutToAppear(){
console.info(`${TAG}aboutToAppear`)
globalThis.cameraAbilityContext.requestPermissionsFromUser(permissionList).then(async(data)=>{
console.info(`${TAG}datapermissions:${JSON.stringify(data.permissions)}`)
console.info(`${TAG}dataauthResult:${JSON.stringify(data.authResults)}`)
//判斷授權是否完成
letresultCount:number=0
for(letresultofdata.authResults){
if(result===0){
resultCount+=1
}
}
if(resultCount===permissionList.length){
this.isPermissions=true
}
awaitthis.initCamera()
//獲取縮略圖
this.mCameraService.getThumbnail(this.functionBackImpl)
})
}

相機應用未關閉,系統息屏后重新點亮,重新返回相機應用,無預覽輸出流返回

解析:從現象看,預覽畫面卡在息屏前的狀態,需要退出應用后,重啟應用才能正常預覽。從日志上看沒有查看到具體的原因,只是 camera_host 的數據量日志消失。

猜想:相機在系統息屏后強制關閉,需要重新加載相機才能正常預覽,實現方式如下:

在 page 的 onPageShow() 回調函數中重新初始化相機。

在 page 的 onPageHide() 函數中釋放相機資源,減少系統資源不必要的消耗。

index.ets:

asynconPageShow(){
console.info(`${TAG}onPageShow`)
awaitthis.initCamera()
}
onPageHide(){
console.info(`${TAG}onPageHide`)
this.isSwitchDeviceing=false
this.isInitCamera=false
this.mCameraService.releaseCamera()
}
結論:實踐驗證此方法有效解決息屏后點亮返回相機無法預覽的問題。

③加載遠程相機,在會話管理中添加拍照輸出流,無法拍照,預覽黑屏

解析:兩臺設備 pin 碼認證通過,連接成功,在主控端選擇一臺被控端設備時,加載相機,流程與加載本地相機相同。

流程如下:

createCameraInput()
createPreviewOutput()
createPhotoOutput()
createSession()

*createSession.beginConfig()
*createSession.addInput(CameraInput)
*createSession.addOutput(PreviewOutput)
*createSession.addOutput(PhotoOutput)
*createSession.commitConfig()
*createSession.start()

經過排查,發現日志中返回異常 not found in supported streams,詳情可以查看關聯issues。

https://gitee.com/openharmony/distributedhardware_distributed_camera/issues/I6E5ZX
原因:在創建 PhotoOutput 時需要傳遞支持的拍照配置信息 Profile,這里的 Profile 可以通過CmeraManager.getSupportedOutputCapability()返回的相機輸出能力 CameraOutputCapability 對象獲取,但遠程相機設備拍照輸出能力列表返回空。

但通過查看本地相機拍照輸出能力可知 DAYU200 設備支持的 Profile 信息:

photoProfile{"format":2000,"size":{"width":1280,"height":960}}
通過此將 photoProfile 作為遠程相機設備構建拍照輸出流的入參場景拍照輸出流,并把此添加到拍照會話管理中,但是界面出現不支持此相機配置,最終關閉了相機,導致黑屏。 解決方案:根據此問題,目前只能根據場景判斷是否需要添加拍照輸出流到會話管理,對于本地相機則可以添加拍照輸出流,執行拍照業務,遠程相機則不添加拍照輸出流,這也就不能執行拍照業務,希望社區有解決方案。

④切換不同設備上的相機,相機預覽輸出流出現異常,無法顯示遠程相機的畫面

解析:此問題存在的原因可能有多種,這里我說下我遇到的情況。 (1)分布式連接被斷開,但是因為底層機制,設備之間下線需要在一段時間內才能上報(預計 5 分鐘),所以在應用層看到可以連接的遠端設備,其實已經下線了,這時當然不能切換到遠程相機。 (2)與問題 3 中描述的相同,因為添加了一個無法支持的拍照配置信息導致相機被關閉。

解決方案:

等待線下通知,再重新連接設備,或者等待設備自動完成重連,簡單粗暴就是重啟設備。

待社區反饋。

⑤相機業務在主線程執行,需要將業務移動到子線程,防止 UI 線程堵塞

解析:如題描述,目前可能存在堵塞 UI 線程的可能,需要將一些耗時的操作移動到子線程,比如預覽、拍照保存圖片等。 目前正在修改優化,關于 ets 的異步線程 worker 可以查看之前寫的一篇關于:OpenHarmony stage worker 多線程。

⑥遠程相機預覽數據傳輸存在 500ms 的延遲

解析:在 wifi 環境下,被控端相機將預覽數據通過軟總線傳輸到主控端顯示,有 500ms 左右的延遲,此問題待排查,具體是那個環境出現的延遲。

⑦no permission for function call

解析:用戶動態授予:允許不同設備間的數據(ohos.permission.DISTRIBUTED_DATASYNC) 交換權限后,DeviceManager.startDeviceDiscovery() 啟動發現周邊設備總會出現異常。

日志中提示:

discoverFaildata={"subscribeId":26386,"reason":-20007,"errInfo":"nopermissionforfunctioncall."}

原因:非系統應用無法使用 DeviceManager,詳細可查看:issues。

https://gitee.com/openharmony/distributedhardware_device_manager/issues/I6BYK4
解決方案:系統應用和普通應用是通過簽名來區分,那只要通過修改簽名 UnsgnedReleasedProfileTemplate.json 文件中的 app-feature 值為 ohos_system_app,即為系統應用。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 攝像頭
    +關注

    關注

    59

    文章

    4836

    瀏覽量

    95599
  • 相機
    +關注

    關注

    4

    文章

    1350

    瀏覽量

    53581
  • 設備
    +關注

    關注

    2

    文章

    4502

    瀏覽量

    70598
  • 鴻蒙
    +關注

    關注

    57

    文章

    2339

    瀏覽量

    42805
  • OpenHarmony
    +關注

    關注

    25

    文章

    3713

    瀏覽量

    16254

原文標題:鴻蒙分布式相機“踩坑”分享

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    HarmonyOS鴻蒙操作系統之什么是“基于微內核的全場景分布式操作系統”?

    HarmonyOS鴻蒙操作系統之什么是“基于微內核的全場景分布式操作系統”?即使作為理工科的人咋一眼看上去似乎也不太懂這是什么,就像區塊鏈這個概念剛出來一樣,普通人都是一臉懵B(當然現在我對這個也是
    發表于 09-23 17:06

    鴻蒙分布式任務調度

    鴻蒙分布式任務調度,實現跨設備FA拉起
    發表于 06-12 17:28

    鴻蒙分布式任務調度——數據傳遞

    鴻蒙分布式任務調度之數據傳遞
    發表于 06-12 17:29

    HarmonyOS教程一分布式語音照相機

    文件系統和AI語音識別功能開發了一款分布式語音照相機,這款相機能將拍攝的照片實時共享到同一分布式網絡下的不同設備中,這樣大家都可以看到拍攝的照片,就不需要一窩蜂的跑到一臺手機前,不滿意
    發表于 09-10 09:53

    Linux學習過程過的與如何解決

    Linux記錄記錄Linux學習過程過的與如何解決1解決方法:F10進入BIOS使能
    發表于 11-04 08:44

    分布式系統硬件資源池原理和接入實踐

    提供更好的服務體驗。 圖 3 鴻蒙硬件資源池支持各類消費者場景 2.2 開發者場景 對于開發者來說,由于分布式硬件資源池將跨設備硬件調用的復雜度都封裝在了系統底層,跨設備硬件復用本地硬件的 API
    發表于 12-06 10:02

    什么是鴻蒙分布式游戲?為什么要做分布式游戲?

    鴻蒙”(Harmony)無疑是近期以來最為熱點的話題之一,而在技術層面上,“分布式”又是鴻蒙最核心的關鍵點之一,無論應用還是游戲都與之息息相關。
    的頭像 發表于 01-30 09:49 ?4618次閱讀

    華為鴻蒙系統之分布式游戲詳解

    鴻蒙”(Harmony)無疑是近期以來最為熱點的話題之一,而在技術層面上,“分布式”又是鴻蒙最核心的關鍵點之一,無論應用還是游戲都與之息息相關。
    的頭像 發表于 01-30 10:42 ?7179次閱讀

    鴻蒙分布式怎么理解

    ”,帶來設備內和設備間高吞吐、低時延、高可靠的流暢連接體驗。 ? 1. 介紹 鴻蒙分布式軟總線致力于實現近場設備間統一的分布式通信能力,提供不區分鏈路的設備發現和傳輸接口,具備快速發現并連接設備,高效分發任務和傳輸數據。作為多終
    的頭像 發表于 07-08 14:47 ?4496次閱讀

    鴻蒙系統底層架構 鴻蒙系統分布式架構

    鴻蒙系統是一款面向未來、面向全場景的分布式操作系統,鴻蒙系統開創性地提出了基于同一套系統能力、適配多種終端形態的分布式理念,在這個理念加持下,可支持多種終端設備。
    的頭像 發表于 07-08 14:35 ?1.3w次閱讀

    分享一個有趣的鴻蒙分布式小游戲

    ?? 今天給大家分享一個有趣的鴻蒙分布式小游戲:你畫我猜。 ??? ? 開發心得(如有錯誤還請大佬及時指正): ? 分布式流轉: 一個 APP 應用在設備之間互相拉起遷移,只在一個終端上運行
    的頭像 發表于 11-01 14:29 ?2541次閱讀
    分享一個有趣的<b class='flag-5'>鴻蒙</b><b class='flag-5'>分布式</b>小游戲

    嵌入Linux記錄

    Linux記錄記錄Linux學習過程過的與如何解決1解決方法:F10進入BIOS使能
    發表于 11-01 17:21 ?10次下載
    嵌入<b class='flag-5'>式</b>Linux<b class='flag-5'>踩</b><b class='flag-5'>坑</b>記錄

    鴻蒙版JS如何實現分布式仿抖音應用

    ?? 之前大家看過了 Java 版的《 HarmonyOS 分布式之仿抖音應用 》,現在講講 JS 如何實現分布式仿抖音應用,通過 JS 方式開發視頻播放,分布式設備遷移,評論,通過 Java
    的頭像 發表于 11-15 09:44 ?2362次閱讀

    OpenHarmony技術論壇:分布式相機分布式圖庫功能

    《OpenHarmony Tech Day·技術日》 技術論壇 新增分布式相機分布式圖庫功能 相比OpenHarmony 3.0版本,OpenHarmony 3.1版本的相機框架新增
    的頭像 發表于 04-25 15:06 ?1819次閱讀
    OpenHarmony技術論壇:<b class='flag-5'>分布式</b><b class='flag-5'>相機</b>和<b class='flag-5'>分布式</b>圖庫功能

    鴻蒙OS 分布式任務調度

    鴻蒙OS 分布式任務調度概述 在 HarmonyO S中,分布式任務調度平臺對搭載 HarmonyOS 的多設備構筑的“超級虛擬終端”提供統一的組件管理能力,為應用定義統一的能力基線、接口
    的頭像 發表于 01-29 16:50 ?487次閱讀
    主站蜘蛛池模板: 久久热免费观看视频| 国产精品自产拍在线观看网站| 99re8热视频这在线视频| 97在线精品视频免费| xart欧美一区在线播放| 福利啪啪吧| 果冻传媒视频在线观看完整版免费 | 成人手机在线| 国产精品乱人无码伦AV在线A | 动漫在线观看免费肉肉| 国产精品一区二区20P| 九九热在线视频| 欧美人xxxxx| 无码成A毛片免费| 一级毛片视频免费| bbbbbxxxxx肥胖| 国产精品三级在线观看| 亚洲国产成人私人影院| 亚洲日本欧美产综合在线| 92午夜免费福利757| 国产 在线 亚洲 欧美 动漫| 狠狠色在在线视频观看| 蜜桃传媒一区二区亚洲AV| 少女亚洲free| 中国bdsmchinesehd| 东北嫖妓对白粗口| 精品国产高清自在线看| 欧美亚洲国产专区在线| 亚洲国产日韩a精品乱码| 99久久精品费精品国产一区二| 国产VA精品午夜福利视频| 久久精品中文騷妇女内射| 秋霞最新高清无码鲁丝片| 亚洲欧美日韩国产手机在线| aaa级黄影片| 精品99久久久久成人网站| 亲胸揉胸膜下刺激视频网站APP| 亚洲AV香蕉一区区二区三区蜜桃| 69精品国产人妻蜜桃国产毛片| 国产精品18久久久久网站 | 旧里番YY6080在线播放|