Автор «Nuts», эксперт Huawei Cloud Enjoy, автор по контракту InfoQ, эксперт Runhe Software KOL, энтузиаст электроники Хунмэн MVP, блоггер-эксперт 51CTO, эксперт блога Alibaba Cloud, один из участников проекта с открытым исходным кодом gin-vue-admin
Поскольку в проектах часто используются видеоресурсы, в конце этого руководства создается простой проигрыватель.
Поскольку использование локальных видеофайлов повлияет на размер пакета приложения, наши видеофайлы обычно поступают с сетевых адресов, и нам необходимо добавить разрешение на использование сети ohos.permission.INTERNET в «способностях», соответствующих config или Module.json.
"abilities":[
{
"permissions": ["ohos.permission.INTERNET"],
}
]
При использовании объект VideoController может управлять одним или несколькими видео.
//Объект VideoController может управлять одним или несколькими видео.
controller: VideoController = new VideoController();
declare interface VideoOptions {
src?: string | Resource;
currentProgressRate?: number | string | PlaybackSpeed;
previewUri?: string | PixelMap | Resource;
controller?: VideoController;
}
image-20220813095416631
из которых толькоsrc( Путь к источнику воспроизведения видео ) Этот параметр является обязательным.
currentProgressRate:number Скорость воспроизведения видео увеличена вдвое, поддерживаются версии 0,75, 1,0, 1,25, 1,75, 2,0.
previewUri:string Путь к изображению предварительного просмотра можно использовать в качестве обложки, когда видео не воспроизводится.
controller:VideoController контроллер. Объект VideoController может управлять одним или несколькими видео Если вам нужно управлять воспроизведением видео через код.、Пауза и подождите,Вы можете установить этот параметр для компонента Видео.,Затем управляйте статусом воспроизведения видео через следующий интерфейс контроллера:
Здесь мне для пояснения нужно разделить PlaybackSpeed и VideoController.
Speed_Forward_0_75_X | Играйте на скорости 0,75x. |
---|---|
Speed_Forward_1_00_X | Играйте на скорости 1x. |
Speed_Forward_1_25_X | Воспроизведение со скоростью 1,25x. |
Speed_Forward_1_75_X | Играйте на скорости 1,75x. |
Speed_Forward_2_00_X | Играйте на скорости 2x. |
имя | описывать |
declare enum PlaybackSpeed {
Speed_Forward_0_75_X,
Speed_Forward_1_00_X,
Speed_Forward_1_25_X,
Speed_Forward_1_75_X,
Speed_Forward_2_00_X,
}
Объект VideoController может управлять одним или несколькими видео.
Здесь мне также нужно отделить setCurrentTime
setCurrentTime(value: number, seekMode: SeekMode)
Укажите позицию прогресса воспроизведения видео и укажите режим перехода.
declare enum SeekMode {
PreviousKeyframe,
NextKeyframe,
ClosestKeyframe,
Accurate,
}
отключен звук (отключить звук), autoPlay (автоматическое воспроизведение), элементы управления (панель управления), objectFit (режим отображения), цикл (зацикливание воспроизведения). Среди них, если для параметра objectFit установлено значение ImageFit.Cover, весь контейнер будет покрыт.
Подробное введение
.muted(boolean) Значение по умолчанию ложь Заглушать или нет.
.autoPlay(boolean) Значение по умолчанию ложь Будет ли играть автоматически.
.controls(boolean) Значение по умолчанию true Отображается ли панель управления воспроизведением видео.
.loop(boolean) Будет ли одно видео воспроизводиться циклично.
.objectFit(ImageFit) Значение по умолчаниюCover Установите режим отображения видео. ImageFit имеет следующие значения перечисления на выбор
имя | описывать |
---|---|
Cover | Сохраните соотношение сторон и уменьшите или увеличьте изображение так, чтобы обе стороны изображения были больше или равны границе дисплея. |
Contain | Сохраняйте соотношение сторон и уменьшите или увеличьте изображение, чтобы оно полностью отображалось в границах дисплея. |
Fill | Увеличение и уменьшение масштаба без сохранения соотношения сторон, чтобы изображение заполнило границы дисплея. |
None | Сохраняйте исходный размер дисплея. Обычно используется вместе с атрибутом objectRepeat. |
ScaleDown | Сохраняйте соотношение сторон дисплея, картинка сжимается или остается прежней. |
onStart() => void Это событие срабатывает во время игры。
onPause() => void Это событие срабатывает при паузе。
onFinish() => void Это событие срабатывает, когда воспроизведение заканчивается.
onError() => void Это срабатывает, когда воспроизведение не удается。
onFullscreenChange(event?: { fullscreen: boolean }) => void) Это срабатывает, когда видео входит и выходит из полноэкранного режима.
onPrepared(event?: { duration: number }) => void Это срабатывает, когда видео готово.,Вы можете получить продолжительность видео через продолжительность,Единица измерения — секунды (с).
onSeeking(event?: { time: number }) => void Информация о времени сообщается при работе с индикатором выполнения, единица измерения — с.
onSeeked(event?: { time: number }) => void После завершения работы индикатора выполнения операции информация о времени воспроизведения отображается в секундах.
onUpdate(event?: { time: number }) => void Это срабатывает, когда изменяется ход воспроизведения.,Единица измерения: с.,Интервал обновления составляет 250 мс.
лист
имя | Функцияописывать |
---|---|
onStart() => void | Это событие срабатывает во время игры。 |
onPause() => void | Это событие срабатывает при паузе。 |
onFinish() => void | Это событие срабатывает, когда воспроизведение заканчивается. |
onError() => void | Это срабатывает, когда воспроизведение не удается。 |
onPrepared(event?: { duration: number }) => void | Это срабатывает, когда видео готово.,Вы можете получить продолжительность видео через продолжительность,Единица измерения — секунды (с). |
onSeeking(event?: { time: number }) => void | Информация о времени сообщается при работе с индикатором выполнения, единица измерения — с. |
onSeeked(event?: { time: number }) => void | После завершения работы индикатора выполнения операции информация о времени воспроизведения отображается в секундах. |
onUpdate(event?: { time: number }) => void | Это срабатывает, когда изменяется ход воспроизведения.,Единица измерения: с.,Интервал обновления составляет 250 мс. |
@Entry
@Component
struct Index {
@State message: string = «Предварительный просмотр видео»
@State previewUris: Resource = $r('app.media.openharmony'); //предварительный просмотр обложки
controller: VideoController = new VideoController();
@State currentProgressRate: number = 1
@State muted: boolean = false
@State autoPlay: boolean = true
@State controls: boolean = true
@State startStatus: boolean = true
@State loop: boolean = true
aboutToAppear() {
this.controller.requestFullscreen(true)
this.controller.start()
}
build() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Video({
src: $r('app.media.video'),
previewUri: this.previewUris, // Видео обложка
currentProgressRate: this.currentProgressRate, // Скорость воспроизведения видео
controller: this.controller,
})
.muted(this.muted) // Отключить ли звук
.autoPlay(this.autoPlay) // Играть ли автоматически
.controls(this.controls) // Отображается ли панель управления, управляющая воспроизведением видео
.objectFit(ImageFit.Contain) // Режим отображения видео
.loop(this.loop) // Зацикливать ли одно видео
.height("60%")
.onStart(() => {
// Это событие срабатывает во время игры
console.info('onStart');
})
.onPause(() => {
// Это событие срабатывает при паузе
console.info('onPause');
})
.onFinish(() => {
console.info('onFinish');
})
.onError(() => {
// Это срабатывает, когда воспроизведение не удается
console.error('onError');
})
.onFullscreenChange((e) => {
console.info('Это срабатывает, когда видео переходит в полноэкранный режим и выходит из него:' + e.fullscreen)
})
.onPrepared((e) => {
console.info('Это срабатывает, когда видео готово:' + e.duration)
})
.onSeeking((e) => {
console.info('Сообщать информацию о времени при работе с индикатором выполнения:' + e.time)
})
.onSeeked((e) => {
console.info('После завершения работы индикатора выполнения операции сообщите информацию о времени воспроизведения:' + e.time)
})
.onUpdate((e) => {
console.info('Это срабатывает, когда изменяется ход воспроизведения:' + e.time)
})
Row({}) {
Flex({ wrap: FlexWrap.Wrap, justifyContent: FlexAlign.SpaceAround, alignItems: ItemAlign.Center }) {
Кнопка («играть»)
.onClick(() => {
this.controller.start()
}).margin(8)
Кнопка («Пауза»)
.onClick(() => {
this.controller.pause()
})
Кнопка("Петля")
.onClick(() => {
this.loop=!this.loop
})
Кнопка("2x скорость")
.onClick(() => {
this.currentProgressRate=2
})
Кнопка («Отключить звук»)
.onClick(() => {
this.muted=!this.muted
})
Кнопка («Стоп»)
.onClick(() => {
this.controller.stop()
})
Кнопка("Воспроизвести в полноэкранном режиме")
.onClick(() => {
this.controller.requestFullscreen(true)
})
Кнопка("Выйти из полноэкранного режима")
.onClick(() => {
this.controller.exitFullscreen()
}).margin(8)
Button("Отображается ли панель управления")
.onClick(() => {
this.controls = !this.controls
}).margin(8)
Кнопка("Указать ход воспроизведения видео")
.onClick(() => {
this.controller.setCurrentTime(9)
})
}
}
}
.width('100%').height('100%')
}
}