Skip to content

Commit 837993e

Browse files
authored
Merge pull request #132 from ryuujo1573/master
release/4.2.2
2 parents 3083193 + 92e1f52 commit 837993e

File tree

10 files changed

+9367
-6670
lines changed

10 files changed

+9367
-6670
lines changed

Demo/package-lock.json

+9,224-6,623
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Demo/package.json

+30-26
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"name": "multiple-track-demo",
3-
"version": "4.1.9",
3+
"version": "4.2.1",
44
"private": true,
55
"description": "multiple track demo",
6-
"author": "Yao Zhi <yaozhi@qiniu.com>",
6+
"author": "pili-coresdk <pili-coresdk@qiniu.com>",
77
"homepage": "https://demo-rtc.qnsdk.com",
88
"license": "MIT",
99
"repository": {
@@ -17,43 +17,47 @@
1717
"dependencies": {
1818
"@material-ui/core": "^3.8.3",
1919
"@material-ui/icons": "^3.0.2",
20-
"@types/history": "^4.7.2",
21-
"@types/jest": "^23.3.10",
22-
"@types/node": "^10.12.15",
23-
"@types/qs": "^6.5.1",
24-
"@types/react": "^16.7.13",
25-
"@types/react-dom": "^16.0.11",
26-
"@types/react-router-dom": "^4.3.1",
27-
"@types/seedrandom": "^2.4.27",
28-
"@types/store": "^2.0.1",
2920
"clipboard": "^2.0.4",
3021
"core-js": "^2.6.3",
3122
"flv.js": "^1.5.0",
23+
"history": "4.10.1",
3224
"lodash": "^4.17.11",
3325
"mobx": "^5.8.0",
3426
"mobx-react": "^5.4.3",
3527
"mobx-react-router": "^4.0.5",
36-
"qnweb-rtc": "^4.2.0",
28+
"qnweb-rtc": "4.2.2",
3729
"qs": "^6.6.0",
38-
"react": "^16.8.0",
39-
"react-app-polyfill": "^0.2.0",
40-
"react-avatar": "^3.5.0",
41-
"react-dom": "^16.8.0",
42-
"react-router": "^4.3.1",
43-
"react-router-dom": "^4.3.1",
44-
"react-scripts": "^2.1.3",
30+
"react": "16.8.0",
31+
"react-app-polyfill": "0.2.0",
32+
"react-avatar": "3.5.0",
33+
"react-dom": "16.8.0",
34+
"react-router": "4.3.1",
35+
"react-router-dom": "4.3.1",
36+
"react-scripts": "2.1.4",
4537
"seedrandom": "^2.4.4",
46-
"store": "^2.0.12",
47-
"typescript": "^3.2.4"
38+
"store": "^2.0.12"
39+
},
40+
"devDependencies": {
41+
"@types/clipboard": "^2.0.1",
42+
"@types/history": "^4.7.2",
43+
"@types/jest": "^23.3.10",
44+
"@types/lodash": "4",
45+
"@types/node": "^18",
46+
"@types/qs": "^6.5.1",
47+
"@types/react": "^16.7.13",
48+
"@types/react-dom": "^16.0.11",
49+
"@types/react-router": "^4.4.5",
50+
"@types/react-router-dom": "^4.3.1",
51+
"@types/seedrandom": "^2.4.27",
52+
"@types/store": "^2.0.1",
53+
"@types/webpack-env": "^1.13.6",
54+
"prettier": "^2.8.6",
55+
"typescript": "^4.9.4"
4856
},
4957
"browserslist": [
5058
">0.2%",
5159
"not dead",
5260
"not ie <= 11",
5361
"not op_mini all"
54-
],
55-
"devDependencies": {
56-
"@types/clipboard": "^2.0.1",
57-
"@types/webpack-env": "^1.13.6"
58-
}
62+
]
5963
}

Demo/src/components/UserPlayer/index.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ export default class UserPlayer extends React.Component<Props, State> {
4040
handleTrackFullScreen(track: Track) {
4141
const videoElement = track.rtcTrack.mediaElement;
4242
if (!videoElement) return;
43-
videoElement.requestFullscreen();
43+
if ("requestFullscreen" in videoElement) {
44+
videoElement.requestFullscreen();
45+
} else if ("webkitRequestFullscreen" in videoElement) {
46+
(videoElement as any).webkitRequestFullscreen();
47+
}
4448
}
4549

4650
handleCaptureFrame(track: Track, event: React.MouseEvent<HTMLDivElement>) {

Demo/src/pages/live/index.tsx

+24-5
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ import { MessageStore } from '../../stores/messageStore';
1919
import { UserStore } from '../../stores/userStore';
2020
import { verifyRoomId, timeout, retrying } from '../../common/utils';
2121
import { QNRenderMode, QNTranscodingLiveStreamingTrack } from "qnweb-rtc";
22+
import { ResumePlay } from "../../components/ResumePlay";
2223
interface Params {
2324
roomid: string;
2425
}
2526

2627
interface State {
28+
showDialog: boolean;
2729
}
2830

2931
interface Props extends RouteComponentProps<Params> {
@@ -34,11 +36,18 @@ interface Props extends RouteComponentProps<Params> {
3436
isMobile: Boolean;
3537
}
3638

39+
let flvPlayer: any;
40+
3741
@inject('roomStore', 'routerStore', 'messageStore', 'userStore', 'isMobile')
3842
@observer
3943
export default class LivePage extends React.Component<Props, State> {
44+
constructor(props: Props) {
45+
super(props);
46+
this.state = {
47+
showDialog: false
48+
};
49+
}
4050
public video = React.createRef<HTMLDivElement>();;
41-
public flvPlayer?: any;
4251
private stopRetrying?: (err?: any) => void;
4352

4453
public async componentDidMount(): Promise<void> {
@@ -68,7 +77,7 @@ export default class LivePage extends React.Component<Props, State> {
6877

6978
componentWillUnmount() {
7079
if (this.stopRetrying) this.stopRetrying();
71-
if (this.flvPlayer) this.flvPlayer.destroy && this.flvPlayer.destroy();
80+
if (flvPlayer) flvPlayer.destroy && flvPlayer.destroy();
7281
this.props.roomStore.leaveRoom();
7382
this.props.messageStore.hideLoading();
7483
}
@@ -87,13 +96,19 @@ export default class LivePage extends React.Component<Props, State> {
8796
height: "100vh"
8897
}
8998
// @ts-ignore
90-
this.flvPlayer = new QNPlayer.CreatePlayer(config)
99+
flvPlayer = new QNPlayer.CreatePlayer(config);
91100
// @ts-ignore
92-
this.flvPlayer.on("complete", () => {
101+
flvPlayer.on("complete", () => {
102+
flvPlayer.play().catch(() => {
103+
this.setState({
104+
showDialog: true
105+
});
106+
})
107+
93108
this.props.messageStore.hideLoading();
94109
})
95110
// @ts-ignore
96-
this.flvPlayer.on("error", (data) => {
111+
flvPlayer.on("error", (data) => {
97112
this.props.messageStore.hideLoading();
98113
this.props.messageStore.showAlert({
99114
show: true,
@@ -102,11 +117,15 @@ export default class LivePage extends React.Component<Props, State> {
102117
});
103118
})
104119
}
120+
handleResumePlay() {
121+
flvPlayer && flvPlayer.play().then(() => this.setState({showDialog: false}));
122+
}
105123

106124
public render(): JSX.Element {
107125
const { isMobile } = this.props;
108126
return (
109127
<div className={`${styles.container} ${isMobile ? styles.containerMobile : ''}`}>
128+
<ResumePlay open={this.state.showDialog} handleResumePlay={this.handleResumePlay.bind(this)}/>
110129
<p className={styles.roomName}>房间名称: {this.props.match.params.roomid}</p>
111130
<div className={`${isMobile ? styles.videoMobileContainer : styles.videoContainer}`}>
112131
<div id="livedemo"></div>

Demo/src/pages/room.tsx

+10-4
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,10 @@ class Room extends Component<Props & RouteComponentProps<RoomRouterProps>, {}> {
188188
if (roomStore.state !== QNConnectionState.DISCONNECTED) {
189189
return;
190190
}
191-
if (qsobj.appId) {
191+
if (typeof qsobj.appId == 'string') {
192192
roomStore.setAppId(qsobj.appId);
193193
}
194-
let token: string | undefined = qsobj.roomToken;
194+
let token: string | undefined = qsobj.roomToken as string;
195195
let tracks: RTCTrack[] | undefined;
196196
messageStore.showLoading('加入房间中...');
197197
try {
@@ -275,7 +275,6 @@ class Room extends Component<Props & RouteComponentProps<RoomRouterProps>, {}> {
275275
const { roomStore, messageStore } = this.props;
276276
return roomStore.getSelectTracks()
277277
.catch(e => {
278-
console.log(e);
279278
messageStore.hideLoading();
280279
switch (e.code) {
281280
case 11010:
@@ -306,6 +305,13 @@ class Room extends Component<Props & RouteComponentProps<RoomRouterProps>, {}> {
306305
content: '请手动选择系统声音',
307306
});
308307
break;
308+
case 23004:
309+
messageStore.showAlert({
310+
show: true,
311+
title: '没有权限',
312+
content: '获取屏幕录制权限被拒绝,请手动打开录制权限后重新进入房间',
313+
})
314+
break
309315
default:
310316
messageStore.showAlert({
311317
show: true,
@@ -335,7 +341,7 @@ class Room extends Component<Props & RouteComponentProps<RoomRouterProps>, {}> {
335341
this.props.messageStore.showAlert({
336342
show: true,
337343
title: '订阅失败',
338-
content: error.toString(),
344+
content: error instanceof Error ? error.toString() : '',
339345
});
340346
}
341347
};

Demo/src/stores/roomStore.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,11 @@ export class RoomStore {
440440
// 音视频 + 屏幕共享
441441
case TrackCreateMode.C: {
442442
tracks = [
443+
(await QNRTC.createScreenVideoTrack({
444+
encoderConfig: this.screenConfig,
445+
screenVideoTag: "screen",
446+
optimizationMode: QNVideoOptimizationMode.DETAIL
447+
}) as QNScreenVideoTrack),
443448
...await QNRTC.createMicrophoneAndCameraTracks(
444449
{ tag: "microphone", microphoneId: this.audioDeviceId },
445450
{
@@ -453,12 +458,7 @@ export class RoomStore {
453458
bitrate: vConfig.config.video!.bitrate
454459
}
455460
}
456-
),
457-
(await QNRTC.createScreenVideoTrack({
458-
encoderConfig: this.screenConfig,
459-
screenVideoTag: "screen",
460-
optimizationMode: QNVideoOptimizationMode.DETAIL
461-
}) as QNScreenVideoTrack)
461+
)
462462
];
463463
break;
464464
}

Release/qnweb-rtc.js

+10-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ReleaseNotes/release-note-4.2.1.md

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# QNRTC Web v4.2.1
2+
3+
4+
## 简介
5+
6+
QNRTC Web 是七牛云推出的一款 Web 平台实时音视频 SDK,提供了音视频通话、发布、订阅、静音等功能,提供灵活的接口,支持高度定制以及二次开发。
7+
8+
9+
## 功能
10+
11+
### SDK
12+
13+
- 新增本地录制功能
14+
- 新增 QNRTC 配置接口
15+
16+
17+
## 优化
18+
19+
- 增强摄像头切换接口,可通过多种方法选择并切换
20+
- 优化了 TypeScript 类型标注
21+
22+
23+
## 修复
24+
25+
### SDK
26+
27+
- 修复 iOS 15.1 Safari 视频发布/静音导致页面崩溃的问题
28+
29+
### Demo
30+
31+
- 修复 Safari 直播时,无法播放纯音频的问题
32+
- 修复用户在取消屏幕共享时无法退出采集状态的问题
33+
34+
35+
## 备注
36+
37+
- 本地录制功能在部分浏览器下无法使用,详细的浏览器支持情况可查看[MDN文档](https://developer.mozilla.org/en-US/docs/Web/API/Window/showSaveFilePicker#browser_compatibility)
38+
39+
40+
## 问题反馈
41+
42+
当你遇到任何问题时,可以提交 `issue` 来反馈问题,请尽可能地描述你所遇到的问题或异常,并附带相关的日志或错误信息。

ReleaseNotes/release-note-4.2.2.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# QNRTC Web v4.2.2
2+
3+
4+
## 简介
5+
6+
QNRTC Web 是七牛云推出的一款 Web 平台实时音视频 SDK,提供了音视频通话、发布、订阅、静音等功能,提供灵活的接口,支持高度定制以及二次开发。
7+
8+
9+
## 修复
10+
11+
- 修复了 QQ 浏览器上频繁触发权限弹窗的问题
12+
13+
14+
## 问题反馈
15+
16+
当你遇到任何问题时,可以提交 `issue` 来反馈问题,请尽可能地描述你所遇到的问题或异常,并附带相关的日志或错误信息。

yarn.lock

-4
This file was deleted.

0 commit comments

Comments
 (0)