Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
李宁
/
Activity
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 1a3f0393
authored
Dec 15, 2025
by
李宁
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
1
1 parent
8bc9386b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
2 additions
and
70 deletions
huaian/demo.html
huaian/js/demo.js
huaian/demo.html
View file @
1a3f039
...
@@ -365,7 +365,7 @@
...
@@ -365,7 +365,7 @@
var vConsole = new VConsole()
var vConsole = new VConsole()
</script> -->
</script> -->
<
!-- <script defer src="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/livekit-client.min.js"></script> --
>
<
script
defer
src=
"https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/livekit-client.min.js"
></script
>
<script
defer
src=
"https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/aliyun-oss-sdk-6.20.0.min.js"
></script>
<script
defer
src=
"https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/aliyun-oss-sdk-6.20.0.min.js"
></script>
<script
src=
"https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/jquery-3.4.1.min.js"
></script>
<script
src=
"https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/jquery-3.4.1.min.js"
></script>
<script
src=
"https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/axios.min.js"
></script>
<script
src=
"https://xpo.oss-cn-beijing.aliyuncs.com/huaian/js/axios.min.js"
></script>
...
@@ -375,7 +375,7 @@
...
@@ -375,7 +375,7 @@
<script
src=
"js/vue.min.js"
></script>
<script
src=
"js/vue.min.js"
></script>
<script
src=
"js/vant.min.js"
></script>
<script
src=
"js/vant.min.js"
></script>
<script
src=
"js/demo.js?90909"
></script>
<script
src=
"js/demo.js?909
11
09"
></script>
</body>
</body>
</html>
</html>
\ No newline at end of file
\ No newline at end of file
huaian/js/demo.js
View file @
1a3f039
...
@@ -643,74 +643,6 @@ $("#videoSwitch").click(async function(e){
...
@@ -643,74 +643,6 @@ $("#videoSwitch").click(async function(e){
}
}
})
})
async
function
safeSwitchCam
(
camsId
)
{
const
oldTrack
=
localTracks
.
videoTrack
;
if
(
!
oldTrack
)
return
false
;
let
newTrack
=
null
;
try
{
/* 1. 先停掉旧轨道,防止华为 ROM 把设备锁死 */
oldTrack
.
stop
();
// 必须 stop,否则同一个设备再次打开会黑屏
/* 2. 重新创建摄像头轨道 */
newTrack
=
await
AgoraRTC
.
createCameraVideoTrack
({
cameraId
:
camsId
,
encoderConfig
:
{
width
:
1280
,
height
:
720
,
frameRate
:
25
,
},
optimizationMode
:
'detail'
,
});
/* 3. 简单黑帧检测:等 500 ms 后抓一帧,亮度>10 认为 OK */
const
stream
=
new
MediaStream
([
newTrack
.
getMediaStreamTrack
()]);
const
video
=
document
.
createElement
(
'video'
);
video
.
srcObject
=
stream
;
video
.
play
();
await
new
Promise
(
r
=>
setTimeout
(
r
,
500
));
const
canvas
=
document
.
createElement
(
'canvas'
);
canvas
.
width
=
64
;
canvas
.
height
=
64
;
const
ctx
=
canvas
.
getContext
(
'2d'
);
ctx
.
drawImage
(
video
,
0
,
0
,
64
,
64
);
const
img
=
ctx
.
getImageData
(
0
,
0
,
64
,
64
);
let
sum
=
0
;
for
(
let
i
=
0
;
i
<
img
.
data
.
length
;
i
+=
4
)
{
sum
+=
0.299
*
img
.
data
[
i
]
+
0.587
*
img
.
data
[
i
+
1
]
+
0.114
*
img
.
data
[
i
+
2
];
}
const
brightness
=
sum
/
(
64
*
64
);
if
(
brightness
<
10
)
throw
new
Error
(
'black frame'
);
/* 4. 重新发布 */
await
client
.
unpublish
(
oldTrack
);
await
client
.
publish
(
newTrack
);
/* 5. 更新本地引用 & 播放 */
localTracks
.
videoTrack
=
newTrack
;
newTrack
.
play
(
'local-player'
,
{
mirror
:
$
(
'#mirror-check'
).
prop
(
'checked'
)
});
return
true
;
}
catch
(
e
)
{
console
.
warn
(
'[safeSwitchCam] fail:'
,
e
);
newTrack
?.
stop
();
/* 回滚:重新打开原来的设备 */
try
{
const
oldDevice
=
oldTrack
.
getMediaStreamTrack
().
getSettings
().
deviceId
;
const
rollBack
=
await
AgoraRTC
.
createCameraVideoTrack
({
cameraId
:
oldDevice
,
encoderConfig
:
{
width
:
1280
,
height
:
720
,
frameRate
:
25
},
});
await
client
.
unpublish
(
oldTrack
);
await
client
.
publish
(
rollBack
);
localTracks
.
videoTrack
=
rollBack
;
rollBack
.
play
(
'local-player'
,
{
mirror
:
$
(
'#mirror-check'
).
prop
(
'checked'
)
});
}
catch
{}
return
false
;
}
}
function
setStepButt
(){
function
setStepButt
(){
$
(
'.none'
).
hide
()
$
(
'.none'
).
hide
()
if
(
stepId
.
startsWith
(
"start_"
)){
if
(
stepId
.
startsWith
(
"start_"
)){
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment