• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import media from '@ohos.multimedia.media'
17import * as mediaTestBase from './MediaTestBase.js';
18
19export async function playVideoSource(url, width, height, duration, playTime, done) {
20    console.info(`case media source url: ${url}`)
21    let videoPlayer = null;
22    let surfaceID = globalThis.value;
23    await media.createVideoPlayer().then((video) => {
24        if (typeof (video) != 'undefined') {
25            console.info('case createVideoPlayer success');
26            videoPlayer = video;
27        } else {
28            console.error('case createVideoPlayer failed');
29            expect().assertFail();
30            done();
31        }
32    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
33
34    videoPlayer.on('videoSizeChanged', (w, h) => {
35        console.info('case videoSizeChanged  width: ' + w + ' height: ' + h);
36    });
37
38    videoPlayer.on('error', (err) => {
39        console.error(`case error called, errMessage is ${err.message}`);
40        expect().assertFail();
41        videoPlayer.release();
42        done();
43    });
44    videoPlayer.url = url;
45    await videoPlayer.setDisplaySurface(surfaceID).then(() => {
46        console.info('case setDisplaySurface success, surfaceID: ' + surfaceID);
47    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
48
49
50    await videoPlayer.prepare().then(() => {
51        console.info('case prepare called');
52        expect(Math.abs(videoPlayer.duration - duration)).assertLess(500);
53        if (width != null & height != null) {
54            expect(videoPlayer.width).assertEqual(width);
55            expect(videoPlayer.height).assertEqual(height);
56        }
57    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
58
59    await videoPlayer.getTrackDescription().then((arrayList) => {
60        console.info('case getTrackDescription called');
61        if (typeof (arrayList) != 'undefined') {
62            for (let i = 0; i < arrayList.length; i++) {
63                mediaTestBase.printDescription(arrayList[i]);
64            }
65        } else {
66            console.error('case getTrackDescription failed');
67            expect().assertFail();
68        }
69    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
70
71    let startTime = videoPlayer.currentTime;
72    await videoPlayer.play().then(() => {
73        console.info('case play called');
74        expect(videoPlayer.state).assertEqual('playing');
75        mediaTestBase.msleep(playTime);
76    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
77    let endTime = videoPlayer.currentTime;
78    expect(Math.abs(endTime - startTime - playTime)).assertLess(1000);
79
80    await videoPlayer.seek(videoPlayer.duration / 3).then((seekDoneTime) => {
81        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
82        expect(videoPlayer.state).assertEqual('playing');
83        mediaTestBase.msleep(playTime);
84    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
85
86    await videoPlayer.pause().then(() => {
87        console.info('case pause called');
88        expect(videoPlayer.state).assertEqual('paused');
89    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
90
91    videoPlayer.loop = true;
92    await videoPlayer.seek(0, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
93        expect(videoPlayer.state).assertEqual('paused');
94        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
95    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
96
97    await videoPlayer.play().then(() => {
98        console.info('case play called');
99        expect(videoPlayer.state).assertEqual('playing');
100        mediaTestBase.msleep(playTime);
101    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
102
103    await videoPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X).then((speedMode) => {
104        console.info('case setSpeed called and speedMode is ' + speedMode);
105        mediaTestBase.msleep(playTime);
106    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
107
108    await videoPlayer.setVolume(0.5).then(() => {
109        console.info('case setVolume called');
110    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
111
112    await videoPlayer.seek(videoPlayer.duration, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
113        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
114        mediaTestBase.msleep(videoPlayer.duration - seekDoneTime);
115        videoPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_1_00_X);
116        expect(videoPlayer.state).assertEqual('playing');
117    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
118
119    videoPlayer.loop = false;
120    await videoPlayer.seek(videoPlayer.duration, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
121        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
122        if (seekDoneTime != 0){
123            mediaTestBase.msleep((videoPlayer.duration - seekDoneTime) + playTime);
124            expect(videoPlayer.state).assertEqual('stopped');
125        }
126    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
127
128    await videoPlayer.play().then(() => {
129        console.info('case play called');
130        expect(videoPlayer.state).assertEqual('playing');
131    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
132
133    await videoPlayer.stop().then(() => {
134        console.info('case stop called');
135        expect(videoPlayer.state).assertEqual('stopped');
136    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
137
138    await videoPlayer.reset().then(() => {
139        console.info('case reset called');
140    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
141
142    videoPlayer.url = url;
143
144    await videoPlayer.prepare().then(() => {
145        console.info('case prepare called');
146    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
147
148    await videoPlayer.play().then(() => {
149        console.info('case play called');
150        expect(videoPlayer.state).assertEqual('playing');
151    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
152
153    await videoPlayer.pause().then(() => {
154        console.info('case pause called');
155        expect(videoPlayer.state).assertEqual('paused');
156    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
157
158    await videoPlayer.stop().then(() => {
159        console.info('case stop called');
160        expect(videoPlayer.state).assertEqual('stopped');
161    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
162
163    await videoPlayer.release().then(() => {
164        console.info('case release called');
165    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
166}
167
168export async function testVideoSeek(url, duration, playTime, done) {
169    console.info(`case media source url: ${url}`)
170    let videoPlayer = null;
171    let surfaceID = globalThis.value;
172    await media.createVideoPlayer().then((video) => {
173        if (typeof (video) != 'undefined') {
174            console.info('case createVideoPlayer success');
175            videoPlayer = video;
176        } else {
177            console.error('case createVideoPlayer failed');
178            expect().assertFail();
179            done();
180        }
181    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
182
183    videoPlayer.on('videoSizeChanged', (w, h) => {
184        console.info('case videoSizeChanged  width: ' + w + ' height: ' + h);
185    });
186
187    videoPlayer.on('error', (err) => {
188        console.error(`case error called, errMessage is ${err.message}`);
189        expect().assertFail();
190        videoPlayer.release();
191        done();
192    });
193    videoPlayer.url = url;
194    await videoPlayer.setDisplaySurface(surfaceID).then(() => {
195    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
196    await videoPlayer.prepare().then(() => {}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
197    await videoPlayer.play().then(() => {
198        console.info('case play called');
199        expect(videoPlayer.state).assertEqual('playing');
200    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
201
202    // pause when seeking
203    videoPlayer.seek(videoPlayer.duration / 3).then((seekDoneTime) => {
204        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
205    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
206    expect(Math.abs(videoPlayer.duration - duration)).assertLess(500);
207    await videoPlayer.pause().then(() => {
208        console.info('case pause called');
209        expect(videoPlayer.state).assertEqual('paused');
210    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
211
212    // play when seeking
213    videoPlayer.seek(0).then((seekDoneTime) => {
214        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
215    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
216    await videoPlayer.play().then(() => {
217        console.info('case play called');
218        expect(videoPlayer.state).assertEqual('playing');
219        mediaTestBase.msleep(playTime);
220    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
221
222    // setVolume when setSpeeding
223    videoPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X).then((speedMode) => {
224        console.info('case setSpeed called and speedMode is ' + speedMode);
225        expect(speedMode).assertEqual(media.PlaybackSpeed.SPEED_FORWARD_2_00_X);
226    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
227    expect(Math.abs(videoPlayer.duration - duration)).assertLess(500);
228    await videoPlayer.setVolume(0.5).then(() => {
229        console.info('case setVolume called');
230    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
231
232    // setSpeed when seeking
233    videoPlayer.seek(0, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
234        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
235    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
236    await videoPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_1_00_X).then((speedMode) => {
237        console.info('case setSpeed called and speedMode is ' + speedMode);
238        expect(speedMode).assertEqual(media.PlaybackSpeed.SPEED_FORWARD_1_00_X);
239    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
240
241    // seek when pausing
242    videoPlayer.pause().then(() => {
243        console.info('case pause called');
244        expect(videoPlayer.state).assertEqual('paused');
245    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
246    await videoPlayer.seek(0, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
247        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
248    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
249
250    // seek when playing
251    videoPlayer.play().then(() => {
252        console.info('case pause called');
253        expect(videoPlayer.state).assertEqual('playing');
254    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
255    await videoPlayer.seek(videoPlayer.duration / 3, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
256        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
257    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
258
259    // seek when seeking
260    videoPlayer.seek(videoPlayer.duration / 3, media.SeekMode.SEEK_PREV_SYNC).then((seekDoneTime) => {
261        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
262    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
263    await videoPlayer.seek(0, media.SeekMode.SEEK_NEXT_SYNC).then((seekDoneTime) => {
264        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
265    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
266
267    // stop when seeking
268    videoPlayer.seek(videoPlayer.duration, media.SeekMode.SEEK_PREV_SYNC).then((seekDoneTime) => {
269        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
270    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
271    await videoPlayer.stop().then(() => {
272        console.info('case stop called');
273        expect(videoPlayer.state).assertEqual('stopped');
274    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
275    await videoPlayer.reset().then(() => {
276        console.info('case reset called');
277    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
278
279    videoPlayer.url = url;
280    await videoPlayer.prepare().then(() => {
281        console.info('case prepare called');
282    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
283    await videoPlayer.play().then(() => {
284        console.info('case play called');
285        expect(videoPlayer.state).assertEqual('playing');
286    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
287
288    // reset when seeking
289    videoPlayer.seek(videoPlayer.duration, media.SeekMode.SEEK_PREV_SYNC).then((seekDoneTime) => {
290        console.info('case seek called and seekDoneTime is ' + seekDoneTime);
291    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
292    await videoPlayer.reset().then(() => {
293        console.info('case reset called');
294    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
295
296    videoPlayer.url = url;
297    await videoPlayer.prepare().then(() => {
298        console.info('case prepare called');
299    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
300    await videoPlayer.play().then(() => {
301        console.info('case play called');
302        expect(videoPlayer.state).assertEqual('playing');
303    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
304
305    // release when seeking
306    videoPlayer.seek(videoPlayer.duration, media.SeekMode.SEEK_PREV_SYNC);
307    await videoPlayer.release().then(() => {
308        console.info('case release called');
309    }, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
310}