提交 65bf740f 编写于 作者: C chenjiahuan

<新增avPlayer>

Signed-off-by: Nchenjiahuan <chenjiahuan@huawei.com>
上级 4fe4394d
...@@ -47,6 +47,7 @@ group("multimedia") { ...@@ -47,6 +47,7 @@ group("multimedia") {
"media/media_js_standard/audioRecorder:audio_recorder_js_hap", "media/media_js_standard/audioRecorder:audio_recorder_js_hap",
"media/media_js_standard/recorderFormat:recorder_format_js_hap", "media/media_js_standard/recorderFormat:recorder_format_js_hap",
"media/media_js_standard/videoPlayer:video_player_js_hap", "media/media_js_standard/videoPlayer:video_player_js_hap",
"media/media_js_standard/avPlayer:avplayer_js_hap",
"medialibrary/mediaLibrary_album:mediaLibrary_album_hap", "medialibrary/mediaLibrary_album:mediaLibrary_album_hap",
"medialibrary/mediaLibrary_base:mediaLibrary_base_hap", "medialibrary/mediaLibrary_base:mediaLibrary_base_hap",
"medialibrary/mediaLibrary_favorite:mediaLibrary_favorite_hap", "medialibrary/mediaLibrary_favorite:mediaLibrary_favorite_hap",
......
此差异已折叠。
/*
* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import featureAbility from '@ohos.ability.featureAbility'
import { UiDriver, BY, PointerMatrix } from '@ohos.uitest'
const CODECMIMEVALUE = ['video/avc', 'audio/mp4a-latm', 'audio/mpeg']
export async function getPermission(permissionNames) {
featureAbility.getContext().requestPermissionsFromUser(permissionNames, 0, async (data) => {
console.info("case request success" + JSON.stringify(data));
})
}
export async function driveFn(num) {
console.info(`case come in driveFn 111`);
let driver = UiDriver.create();
console.info(`case come in driveFn 222`);
console.info(`driver is ${JSON.stringify(driver)}`);
await msleepAsync(2000);
console.info(`UiDriver start`);
for (let i = 0; i < num; i++) {
let button = await driver.findComponent(BY.text('允许'));
console.info(`button is ${JSON.stringify(button)}`);
await msleepAsync(2000);
await button.click();
}
await msleepAsync(2000);
}
// File operation
export async function getFileDescriptor(fileName) {
let fileDescriptor = undefined;
let mgr = globalThis.abilityContext.resourceManager
await mgr.getRawFileDescriptor(fileName).then(value => {
fileDescriptor = {fd: value.fd, offset: value.offset, length: value.length};
console.log('case getRawFileDescriptor success fileName: ' + fileName);
}).catch(error => {
console.log('case getRawFileDescriptor err: ' + error);
});
return fileDescriptor;
}
export async function closeFileDescriptor(fileName) {
await globalThis.abilityContext.resourceManager.closeRawFileDescriptor(fileName).then(()=> {
console.log('case closeRawFileDescriptor ' + fileName);
}).catch(error => {
console.log('case closeRawFileDescriptor err: ' + error);
});
}
// wait asynchronously
export async function msleepAsync(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export function assertErr(opera, err, done) {
console.info(`case ${opera} error,errMessage is ${err.message}`);
expect().assertFail();
done();
}
// callback function for promise call back error
export function failureCallback(error) {
expect().assertFail();
console.info(`case failureCallback promise called,errMessage is ${error.message}`);
}
// callback function for promise catch error
export function catchCallback(error) {
expect().assertFail();
console.info(`case error catch called,errMessage is ${error.message}`);
}
export function checkDescription(actualDescription, descriptionKey, descriptionValue) {
for (let i = 0; i < descriptionKey.length; i++) {
let property = actualDescription[descriptionKey[i]];
console.info('case key is '+ descriptionKey[i]);
console.info('case actual value is '+ property);
console.info('case hope value is '+ descriptionValue[i]);
if (descriptionKey[i] == 'codec_mime') {
expect(property).assertEqual(CODECMIMEVALUE[descriptionValue[i]]);
} else {
expect(property).assertEqual(descriptionValue[i]);
}
}
}
export async function getFd(pathName, fileType) {
let fdObject = {
fileAsset : null,
fdNumber : null
}
let displayName = pathName;
console.info('[mediaLibrary] fileType is ' + fileType);
const mediaTest = mediaLibrary.getMediaLibrary(globalThis.abilityContext);
let fileKeyObj = mediaLibrary.FileKey;
let mediaType;
let publicPath;
if (fileType == 'audio') {
mediaType = mediaLibrary.MediaType.AUDIO;
publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_AUDIO);
} else {
mediaType = mediaLibrary.MediaType.VIDEO;
publicPath = await mediaTest.getPublicDirectory(mediaLibrary.DirectoryType.DIR_VIDEO);
}
console.info('[mediaLibrary] publicPath is ' + publicPath);
let dataUri = await mediaTest.createAsset(mediaType, displayName, publicPath);
if (dataUri != undefined) {
let args = dataUri.id.toString();
let fetchOp = {
selections : fileKeyObj.ID + "=?",
selectionArgs : [args],
}
let fetchFileResult = await mediaTest.getFileAssets(fetchOp);
fdObject.fileAsset = await fetchFileResult.getAllObject();
fdObject.fdNumber = await fdObject.fileAsset[0].open('rw');
console.info('case getFd number is: ' + fdObject.fdNumber);
}
return fdObject;
}
export async function closeFd(fileAsset, fdNumber) {
if (fileAsset != null) {
await fileAsset[0].close(fdNumber).then(() => {
console.info('[mediaLibrary] case close fd success');
}).catch((err) => {
console.info('[mediaLibrary] case close fd failed');
});
} else {
console.info('[mediaLibrary] case fileAsset is null');
}
}
{
"app":{
"bundleName":"ohos.acts.multimedia.avplayer",
"vendor":"huawei",
"versionCode":1000000,
"versionName":"1.0.0",
"debug":false,
"icon":"$media:icon",
"label":"$string:app_name",
"description":"$string:description_application",
"distributedNotificationEnabled":true,
"keepAlive":true,
"singleUser":true,
"minAPIVersion":8,
"targetAPIVersion":8,
"car":{
"apiCompatibleVersion":8,
"singleUser":false
}
}
}
{
"string":[
{
"name":"app_name",
"value":"ohosProject"
}
]
}
\ No newline at end of file
# Copyright (c) 2022 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//test/xts/tools/build/suite.gni")
ohos_js_hap_suite("avplayer_js_hap") {
hap_profile = "entry/src/main/module.json"
js_build_mode = "debug"
deps = [
":ActsAVPlayerTest_js_assets",
":ActsAVPlayerTest_resources",
]
ets2abc = true
certificate_profile = "signature/openharmony_sx.p7b"
hap_name = "ActsAVPlayerTest"
subsystem_name = "ability"
part_name = "ability_runtime"
}
ohos_app_scope("ActsAVPlayerTest_app_profile") {
app_profile = "AppScope/app.json"
sources = [ "AppScope/resources" ]
}
ohos_js_assets("ActsAVPlayerTest_js_assets") {
source_dir = "entry/src/main/ets"
}
ohos_resources("ActsAVPlayerTest_resources") {
sources = [ "entry/src/main/resources" ]
deps = [ ":ActsAVPlayerTest_app_profile" ]
hap_profile = "entry/src/main/module.json"
}
{
"description": "Configuration for hjunit demo Tests",
"driver": {
"type": "OHJSUnitTest",
"test-timeout": "180000",
"bundle-name": "ohos.acts.multimedia.avplayer",
"module-name": "phone",
"shell-timeout": "600000",
"testcase-timeout": 70000
},
"kits": [
{
"test-file-name": [
"ActsAVPlayerTest.hap"
],
"type": "AppInstallKit",
"cleanup-apps": true
},
{
"type": "ShellKit",
"run-command": [
"remount",
"mkdir /data/test"
]
},
{
"type": "PushKit",
"push": [
"ActsAVPlayerTest.hap->/data/ActsAVPlayerTest.hap",
"./resource/audio/H264_AAC.mp4 -> /data/app/el2/100/base/ohos.acts.multimedia.avplayer/haps/phone/files/"
]
},
{
"type": "ShellKit",
"run-command": [
"chmod 644 /data/test/*.hap",
"scanner",
"param set persist.ace.testmode.enabled 1"
]
}
]
}
\ No newline at end of file
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import AbilityStage from "@ohos.app.ability.AbilityStage"
export default class MyAbilityStage extends AbilityStage {
onCreate() {
console.log("[Demo] MyAbilityStage onCreate")
globalThis.stageOnCreateRun = 1;
globalThis.stageContext = this.context;
}
}
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Ability from '@ohos.app.ability.UIAbility'
export default class MainAbility extends Ability {
onCreate(want,launchParam){
// Ability is creating, initialize resources for this ability
console.log("[Demo] MainAbility onCreate")
globalThis.abilityWant = want;
}
onDestroy() {
// Ability is destroying, release resources for this ability
console.log("[Demo] MainAbility onDestroy")
}
onWindowStageCreate(windowStage) {
// Main window is created, set main page for this ability
console.log("[Demo] MainAbility onWindowStageCreate")
globalThis.abilityContext = this.context
console.log("[Demo] MainAbility onWindowStageCreate windowStage="+ windowStage)
windowStage.setUIContent(this.context, "MainAbility/pages/index/index", null)
}
onWindowStageDestroy() {
//Main window is destroyed, release UI related resources
console.log("[Demo] MainAbility onWindowStageDestroy")
}
onForeground() {
// Ability has brought to foreground
console.log("[Demo] MainAbility onForeground")
}
onBackground() {
// Ability has back to background
console.log("[Demo] MainAbility onBackground")
}
};
\ No newline at end of file
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import file from '@system.file';
import { Core, ExpectExtend, InstrumentLog, ReportExtend } from "deccjsunit/index"
import testsuite from "../../../test/List.test.ets"
import featureAbility from "@ohos.ability.featureAbility"
import { UiDriver, BY } from '@ohos.uitest'
var mXComponentController: XComponentController = new XComponentController()
var surfaceId: any
@Entry
@Component
struct Index {
aboutToAppear() {
console.info("start run testcase!!!!");
}
build() {
Flex() {
XComponent({
id: 'xcomponent',
type: 'surface',
libraryname: '',
controller: mXComponentController
})
.onLoad(() => {
console.info('CameraModuleTest: OnLoad() is called!')
mXComponentController.setXComponentSurfaceSize({ surfaceWidth: 1920, surfaceHeight: 1080 });
surfaceId = mXComponentController.getXComponentSurfaceId()
globalThis.value = surfaceId
console.info('CameraModuleTest: XComponent onLoad surfaceId: ' + globalThis.value)
const core = Core.getInstance()
const expectExtend = new ExpectExtend({
'id': 'extend'
})
core.addService('expect', expectExtend)
const reportExtend = new ReportExtend(file)
core.addService('report', reportExtend)
core.init()
core.subscribeEvent('task', reportExtend)
const configService = core.getDefaultService('config')
globalThis.abilityWant.parameters.timeout = 70000;
configService.setConfig(globalThis.abilityWant.parameters)
console.info('testsuite()---->')
testsuite()
core.execute()
console.info('core.execute()---->')
})
.width('1920px')
.height('1080px')
}
}
}
\ No newline at end of file
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
@Entry
@Component
struct Second {
private content: string = "Second Page"
build() {
Flex({ direction: FlexDirection.Column,alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Text(`${this.content}`)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button() {
Text('back to index')
.fontSize(20)
.fontWeight(FontWeight.Bold)
}.type(ButtonType.Capsule)
.margin({
top: 20
})
.backgroundColor('#0D9FFB')
.onClick(() => {
router.back()
})
}
.width('100%')
.height('100%')
}
}
\ No newline at end of file
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Ability from '@ohos.application.Ability'
export default class TestAbility extends Ability {
onCreate(want, launchParam) {
console.log('TestAbility onCreate')
}
onDestroy() {
console.log('TestAbility onDestroy')
}
onWindowStageCreate(windowStage) {
console.log('TestAbility onWindowStageCreate')
windowStage.loadContent("TestAbility/pages/index", (err, data) => {
if (err.code) {
console.error('Failed to load the content. Cause:' + JSON.stringify(err));
return;
}
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data))
});
globalThis.abilityContext = this.context;
}
onWindowStageDestroy() {
console.log('TestAbility onWindowStageDestroy')
}
onForeground() {
console.log('TestAbility onForeground')
}
onBackground() {
console.log('TestAbility onBackground')
}
};
\ No newline at end of file
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@ohos.router';
@Entry
@Component
struct Index {
aboutToAppear() {
console.info('TestAbility index aboutToAppear')
}
@State message: string = 'Hello World'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button() {
Text('next page')
.fontSize(20)
.fontWeight(FontWeight.Bold)
}.type(ButtonType.Capsule)
.margin({
top: 20
})
.backgroundColor('#0D9FFB')
.width('35%')
.height('5%')
.onClick(()=>{
})
}
.width('100%')
}
.height('100%')
}
}
\ No newline at end of file
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import TestRunner from '@ohos.application.testRunner'
import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
var abilityDelegator = undefined
var abilityDelegatorArguments = undefined
function translateParamsToString(parameters) {
const keySet = new Set([
'-s class', '-s notClass', '-s suite', '-s it',
'-s level', '-s testType', '-s size', '-s timeout',
'-s dryRun'
])
let targetParams = '';
for (const key in parameters) {
if (keySet.has(key)) {
targetParams = `${targetParams} ${key} ${parameters[key]}`
}
}
return targetParams.trim()
}
async function onAbilityCreateCallback() {
console.log("onAbilityCreateCallback");
}
async function addAbilityMonitorCallback(err: any) {
console.info("addAbilityMonitorCallback : " + JSON.stringify(err))
}
export default class OpenHarmonyTestRunner implements TestRunner {
constructor() {
}
onPrepare() {
console.info("OpenHarmonyTestRunner OnPrepare ")
}
async onRun() {
console.log('OpenHarmonyTestRunner onRun run')
abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
var testAbilityName = abilityDelegatorArguments.bundleName + '.MainAbility'
let lMonitor = {
abilityName: testAbilityName,
onAbilityCreate: onAbilityCreateCallback,
};
abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback)
var cmd = 'aa start -d 0 -a ohos.acts.multimedia.avplayer.MainAbility' + ' -b ' + abilityDelegatorArguments.bundleName
cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters)
var debug = abilityDelegatorArguments.parameters["-D"]
if (debug == 'true')
{
cmd += ' -D'
}
console.info('cmd : '+cmd)
abilityDelegator.executeShellCommand(cmd,
(err: any, d: any) => {
console.info('executeShellCommand : err : ' + JSON.stringify(err));
console.info('executeShellCommand : data : ' + d.stdResult);
console.info('executeShellCommand : data : ' + d.exitCode);
})
console.info('OpenHarmonyTestRunner onRun end')
}
};
\ No newline at end of file
/*
* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import media from '@ohos.multimedia.media'
import * as mediaTestBase from '../../../../../../MediaTestBaseAV';
import * as AVPlayerTestBase from '../../../../../../AVPlayerTestBase.js';
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index';
export default function AVPlayerHlsFuncTest() {
describe('AVPlayerHlsFuncTest', function () {
const HTTP_PATH = 'http://xxx.xx.xx.xx:xxxx/';
const PLAY_TIME = 3000;
let avPlayer = null;
let expectBitrateArray = [];
let videoSizeArray = [];
let videoSizeId = -1;
let bitrateArray = [];
let setBitrateState = '';
let surfaceID = globalThis.value;
beforeAll(async function() {
console.info('beforeAll case');
})
beforeEach(async function() {
console.info('beforeEach case');
})
afterEach(async function() {
console.info('afterEach case');
})
afterAll(async function() {
console.info('afterAll case');
if (avPlayer != null) {
avPlayer.release().then(() => {
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
})
function checkArray(realArray, expectArray) {
expect(realArray.length).assertEqual(expectArray.length);
for (let i = 0; i < expectArray.length; i++) {
console.info('case expect ' + expectArray[i]);
expect(realArray[i]).assertEqual(expectArray[i]);
}
}
async function initAVPlayer(src, done) {
let availableBitratesCnt = 0;
let bitrateDoneCnt = 0;
await media.createAVPlayer().then((video) => {
if (typeof (video) != 'undefined') {
console.info('case createAVPlayer success');
avPlayer = video;
} else {
console.error('case createAVPlayer failed');
expect().assertFail();
done();
}
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
avPlayer.on('stateChange', async (state, reason) => {
console.info(`case stateChange called, state is ${state}, reason is ${reason}`);
if (reason == media.StateChangeReason.BACKGROUND && state != AVPlayerTestBase.AV_PLAYER_STATE.COMPLETED) {
console.info(`case media.StateChangeReason.BACKGROUND`);
await avPlayer.release().then(() => {
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
console.info(`case state is ${state}`);
if (setBitrateState == state) {
avPlayer.setBitrate(expectBitrateArray[videoSizeId]);
}
switch (state) {
case AVPlayerTestBase.AV_PLAYER_STATE.IDLE:
break;
case AVPlayerTestBase.AV_PLAYER_STATE.INITIALIZED:
console.info(`case AVPlayerTestBase.AV_PLAYER_STATE.INITIALIZED`);
expect(avPlayer.state).assertEqual(AVPlayerTestBase.AV_PLAYER_STATE.INITIALIZED);
avPlayer.surfaceId = surfaceID;
avPlayer.prepare().then(() => {
console.info('case prepare called');
expect(avPlayer.state).assertEqual(AVPlayerTestBase.AV_PLAYER_STATE.PREPARED);
expect(avPlayer.currentTime).assertEqual(0);
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
break;
case AVPlayerTestBase.AV_PLAYER_STATE.PREPARED:
expect(avPlayer.state).assertEqual(AVPlayerTestBase.AV_PLAYER_STATE.PREPARED);
expect(avPlayer.currentTime).assertEqual(0)
avPlayer.loop = true;
avPlayer.play();
break;
case AVPlayerTestBase.AV_PLAYER_STATE.PAUSED:
avPlayer.play();
break;
case AVPlayerTestBase.AV_PLAYER_STATE.COMPLETED:
avPlayer.play();
break;
case AVPlayerTestBase.AV_PLAYER_STATE.RELEASED:
expect(availableBitratesCnt).assertLarger(0);
avPlayer = null;
done();
break;
case AVPlayerTestBase.AV_PLAYER_STATE.ERROR:
expect().assertFail();
avPlayer.release().then(() => {
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
break;
default:
break;
}
});
avPlayer.on('bitrateDone', (bitrate) => {
console.info(`case bitrateDone called, bitrate is ${bitrate}`);
expect(bitrate).assertEqual(expectBitrateArray[videoSizeId]);
bitrateDoneCnt++;
});
avPlayer.on('videoSizeChange', (w, h) => {
console.info('case videoSizeChange width: ' + w + ' height: ' + h + 'videoSizeId: ' + videoSizeId);
if (w == videoSizeArray[videoSizeId][0] && h == videoSizeArray[videoSizeId][1]) {
avPlayer.release().then(() => {
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
});
avPlayer.on('availableBitrates', (bitrates) => {
bitrateArray = bitrates;
checkArray(bitrateArray, expectBitrateArray);
availableBitratesCnt++;
});
console.info(`case src is ${src}`);
avPlayer.url = src;
}
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0100
* @tc.name : 001.test hls
* @tc.desc : HLS setBitrate test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level2
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0100', 0, async function (done) {
await initAVPlayer(HTTP_PATH + '05.hls/hls_variant/index.m3u8', done);
expectBitrateArray = [165340, 344388, 387360, 765178, 1676816];
setBitrateState = AVPlayerTestBase.AV_PLAYER_STATE.PREPARED;
videoSizeId = 1;
videoSizeArray = [ [256, 144], [426, 240], [640, 360], [854, 480], [1280, 720] ];
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0200
* @tc.name : 001.test hls
* @tc.desc : HLS setBitrate test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level2
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0200', 0, async function (done) {
await initAVPlayer(HTTP_PATH + '05.hls/hls_variant/index.m3u8', done);
expectBitrateArray = [165340, 344388, 387360, 765178, 1676816];
setBitrateState = AVPlayerTestBase.AV_PLAYER_STATE.PLAYING;
videoSizeId = 1;
videoSizeArray = [ [256, 144], [426, 240], [640, 360], [854, 480], [1280, 720] ];
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0300
* @tc.name : 001.test hls
* @tc.desc : HLS setBitrate test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level2
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0300', 0, async function (done) {
await initAVPlayer(HTTP_PATH + '05.hls/hls_variant/index.m3u8', done);
expectBitrateArray = [165340, 344388, 387360, 765178, 1676816];
setBitrateState = AVPlayerTestBase.AV_PLAYER_STATE.PAUSED;
videoSizeId = 1;
videoSizeArray = [ [256, 144], [426, 240], [640, 360], [854, 480], [1280, 720] ];
await mediaTestBase.msleepAsync(PLAY_TIME);
avPlayer.pause();
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0400
* @tc.name : 001.test hls
* @tc.desc : HLS setBitrate test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level2
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0400', 0, async function (done) {
await initAVPlayer(HTTP_PATH + '05.hls/hls_variant/index.m3u8', done);
expectBitrateArray = [165340, 344388, 387360, 765178, 1676816];
setBitrateState = AVPlayerTestBase.AV_PLAYER_STATE.COMPLETED;
videoSizeId = 1;
videoSizeArray = [ [256, 144], [426, 240], [640, 360], [854, 480], [1280, 720] ];
await mediaTestBase.msleepAsync(PLAY_TIME);
avPlayer.loop = false;
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0500
* @tc.name : 001.test hls
* @tc.desc : HLS setBitrate test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level2
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HLS_setBitrate_0500', 0, async function (done) {
await initAVPlayer(HTTP_PATH + '05.hls/hls_variant/index.m3u8', done);
expectBitrateArray = [165340, 344388, 387360, 765178, 1676816];
setBitrateState = AVPlayerTestBase.AV_PLAYER_STATE.PREPARED;
videoSizeId = 3;
videoSizeArray = [ [256, 144], [426, 240], [640, 360], [854, 480], [1280, 720] ];
})
});
}
\ No newline at end of file
/*
* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {testAVPlayerFun} from '../../../../../../AVPlayerTestBase.js';
import * as mediaTestBase from '../../../../../../MediaTestBaseAV';
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index';
export default function AVPlayerHttpCompatibilityTest() {
describe('AVPlayerHttpCompatibilityTest', function () {
const HTTP_PATH = 'http://xxx.xx.xx.xx:xxxx/';
const VIDEO_PATH = HTTP_PATH + '01.video/';
const AUDIO_PATH = HTTP_PATH + '02.audio/';
const VIDEOPLAYER_PATH = HTTP_PATH + '03.videoplayer/';
const AUDIOPLAYER_PATH = HTTP_PATH + '04.audioplayer/';
const PLAY_TIME = 3000;
let avPlayer = null;
let avPlayTest = {
width: 0,
height: 0,
duration: -1,
}
beforeAll(async function() {
console.info('beforeAll case');
})
beforeEach(async function() {
console.info('beforeEach case');
})
afterEach(async function() {
console.info('afterEach case');
})
afterAll(async function() {
console.info('afterAll case');
if (avPlayer != null) {
avPlayer.release().then(() => {
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_MP4_0100
* @tc.name : 001.H264_AAC
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_MP4_0100', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mp4/h264_aac_640x320_30r.mp4';
avPlayTest = { width: 640, height: 320, duration: 10100 };
testAVPlayerFun(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_MP4_0200
* @tc.name : 002.H264_MP3
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_MP4_0200', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mp4/h264_mp3_640x480_25r.mp4';
avPlayTest = { width: 640, height: 480, duration: 10080 };
testAVPlayerFun(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_TS_0100
* @tc.name : 001.H264_AAC
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_TS_0100', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mpeg_ts/h264_aac_640x480_30r.ts';
avPlayTest = { width: 640, height: 480, duration: 10161 };
testAVPlayerFun(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_TS_0200
* @tc.name : 002.H264_MP3
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_TS_0200', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mpeg_ts/h264_mp3_640x480_25r.ts';
avPlayTest = { width: 640, height: 480, duration: 10169 };
testAVPlayerFun(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_MKV_0100
* @tc.name : 001.H264_AAC
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_FORMAT_MKV_0100', 0, async function (done) {
let path = VIDEO_PATH + 'H264_AAC.mkv';
avPlayTest = { width: 720, height: 480, duration: 10057 };
testAVPlayerFun(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
});
}
\ No newline at end of file
/*
* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {testAVPlayerSeek} from '../../../../../../AVPlayerTestBase.js';
import * as mediaTestBase from '../../../../../../MediaTestBaseAV';
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index';
export default function AVPlayerHttpSeekTest() {
describe('AVPlayerHttpSeekTest', function () {
const HTTP_PATH = 'http://xxx.xx.xx.xx:xxxx/';
const VIDEO_PATH = HTTP_PATH + '01.video/';
const AUDIO_PATH = HTTP_PATH + '02.audio/';
const VIDEOPLAYER_PATH = HTTP_PATH + '03.videoplayer/';
const AUDIOPLAYER_PATH = HTTP_PATH + '04.audioplayer/';
const PLAY_TIME = 3000;
let avPlayer = null;
let avPlayTest = {
width: 0,
height: 0,
duration: -1,
}
beforeAll(async function() {
console.info('beforeAll case');
})
beforeEach(async function() {
console.info('beforeEach case');
})
afterEach(async function() {
console.info('afterEach case');
})
afterAll(async function() {
console.info('afterAll case');
if (avPlayer != null) {
avPlayer.release().then(() => {
}, mediaTestBase.failureCallback).catch(mediaTestBase.catchCallback);
}
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_MP4_0100
* @tc.name : 001.H264_AAC
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_MP4_0100', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mp4/h264_aac_640x320_30r.mp4';
avPlayTest = { width: 640, height: 320, duration: 10100 };
testAVPlayerSeek(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_MP4_0200
* @tc.name : 002.H264_MP3
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_MP4_0200', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mp4/h264_mp3_640x480_25r.mp4';
avPlayTest = { width: 640, height: 480, duration: 10080 };
testAVPlayerSeek(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_TS_0100
* @tc.name : 001.H264_AAC
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_TS_0100', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mpeg_ts/h264_aac_640x480_30r.ts';
avPlayTest = { width: 640, height: 480, duration: 10161 };
testAVPlayerSeek(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_TS_0200
* @tc.name : 002.H264_MP3
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_TS_0200', 0, async function (done) {
let path = VIDEOPLAYER_PATH + 'mpeg_ts/h264_mp3_640x480_25r.ts';
avPlayTest = { width: 640, height: 480, duration: 10169 };
testAVPlayerSeek(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
/* *
* @tc.number : SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_MKV_0100
* @tc.name : 001.H264_AAC
* @tc.desc : Http playback control test
* @tc.size : MediumTest
* @tc.type : Function test
* @tc.level : Level1
*/
it('SUB_MULTIMEDIA_MEDIA_AVPLAYER_HTTP_SEEK_FORMAT_MKV_0100', 0, async function (done) {
let path = VIDEO_PATH + 'H264_AAC.mkv';
avPlayTest = { width: 720, height: 480, duration: 10057 };
testAVPlayerSeek(path, avPlayer, avPlayTest, PLAY_TIME, done);
})
});
}
\ No newline at end of file
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import AVPlayerHlsFuncTest from './AVPlayerHlsFuncTest.test.js'
import AVPlayerHttpCompatibilityTest from './AVPlayerHttpCompatibilityTest.test.ets'
import AVPlayerHttpSeekTest from './AVPlayerHttpSeekTest.test.ets'
import AVPlayerLocalTest from './AVPlayerLocalTest.test.js'
export default function testsuite() {
// AVPlayerHlsFuncTest()
// AVPlayerHttpCompatibilityTest();
// AVPlayerHttpSeekTest();
AVPlayerLocalTest();
}
\ No newline at end of file
{
"module": {
"name": "phone",
"type": "entry",
"srcEntrance": "./ets/Application/AbilityStage.ts",
"description": "$string:phone_entry_dsc",
"mainElement": "MainAbility",
"deviceTypes": [
"default",
"tablet"
],
"deliveryWithInstall": true,
"installationFree": false,
"uiSyntax": "ets",
"pages": "$profile:main_pages",
"abilities": [
{
"name": "ohos.acts.multimedia.avplayer.MainAbility",
"srcEntrance": "./ets/MainAbility/MainAbility.ts",
"description": "$string:phone_entry_main",
"icon": "$media:icon",
"label": "$string:entry_label",
"visible": true,
"orientation": "portrait",
"skills": [
{
"actions": [
"action.system.home"
],
"entities":[
"entity.system.home"
]
}
]
}
],
"requestPermissions": [
{
"name": "ohos.permission.GRANT_SENSITIVE_PERMISSIONS",
"reason": "use ohos.permission.GRANT_SENSITIVE_PERMISSIONS"
},
{
"name" : "ohos.permission.MEDIA_LOCATION",
"reason" : "use ohos.permission.MEDIA_LOCATION"
},
{
"name" : "ohos.permission.READ_MEDIA",
"reason" : "use ohos.permission.READ_MEDIA"
},
{
"name" : "ohos.permission.WRITE_MEDIA",
"reason" : "use ohos.permission.WRITE_MEDIA"
}
]
}
}
{
"string": [
{
"name": "phone_entry_dsc",
"value": "i am an entry for phone"
},
{
"name": "phone_entry_main",
"value": "the phone entry ability"
},
{
"name": "entry_label",
"value": "ActsContextTest"
},
{
"name": "form_description",
"value": "my form"
},
{
"name": "serviceability_description",
"value": "my whether"
},
{
"name": "description_application",
"value": "demo for test"
},
{
"name": "app_name",
"value": "Demo"
}
]
}
{
"src": [
"MainAbility/pages/index/index",
"MainAbility/pages/second/second"
]
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册