#星计划#基于鸿蒙应用开发:视频播放器 原创

鱼弦CTO
发布于 2023-12-22 16:32
浏览
0收藏

鱼弦:CSDN内容合伙人、CSDN新星导师、全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 ​​https://github.com/Peakchen)​


#星计划#基于鸿蒙应用开发:视频播放器-鸿蒙开发者社区

基于鸿蒙应用开发的视频播放器应用是利用鸿蒙操作系统的特性和功能来实现视频播放功能的应用程序。下面是关于基于鸿蒙应用开发的视频播放器应用的详细解释、底层架构流程图、使用场景解释以及一些相关的代码实现和文献材料链接:

原理详细解释:
基于鸿蒙应用开发的视频播放器应用的原理主要包括以下几个方面:

  1. 鸿蒙操作系统:视频播放器应用是基于鸿蒙操作系统进行开发的,鸿蒙操作系统为应用提供了统一的开发框架和接口,简化了应用开发过程。
  2. 媒体播放框架:视频播放器应用利用鸿蒙操作系统提供的媒体播放框架来实现视频的解码和播放功能。该框架支持多种视频格式的解码和播放,并提供了播放控制、音频输出等功能。
  3. 用户界面设计:视频播放器应用通过鸿蒙应用开发框架提供的UI组件和布局方式设计用户界面,包括播放控制按钮、进度条、播放列表等,以便用户进行视频的播放和控制操作。

底层架构流程图:
基于鸿蒙应用开发的视频播放器应用的底层架构流程图如下:


+-------------------+
|       用户界面       |
+-------------------+
          |
          v
+-------------------+
|   播放控制逻辑      |
+-------------------+
          |
          v
+-------------------+
|     媒体播放框架     |
+-------------------+
          |
          v
+-------------------+
|       视频解码       |
+-------------------+
          |
          v
+-------------------+
|       视频播放       |
+-------------------+
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

使用场景解释:
基于鸿蒙应用开发的视频播放器应用可以应用于多种场景,例如:

  1. 移动设备上的本地视频播放:用户可以使用视频播放器应用在手机、平板等移动设备上播放本地存储的视频文件。
  2. 在线视频播放:视频播放器应用可以连接到互联网,通过在线视频流媒体服务(如YouTube、Netflix等)进行视频播放。
  3. 嵌入式设备上的视频播放:视频播放器应用可以应用于嵌入式设备,如智能电视、智能音箱等,实现本地视频播放和在线视频服务。

代码实现:

由于鸿蒙操作系统是华为公司的开源操作系统,鸿蒙应用开发的具体代码实现可以参考华为官方提供的鸿蒙应用开发文档和示例代码。

下面是一个完整的基于鸿蒙应用开发的视频播放器应用的UI设计和代码实现示例:

UI设计:


<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="vertical">

    <Surface
        ohos:id="$+id/Surface"
        ohos:height="match_content"
        ohos:width="match_parent" />

    <Button
        ohos:id="$+id/btnPlay"
        ohos:height="wrap_content"
        ohos:width="match_parent"
        ohos:text="Play" />

    <Slider
        ohos:id="$+id/slider"
        ohos:height="wrap_content"
        ohos:width="match_parent"
        ohos:minValue="0"
        ohos:maxValue="100"
        ohos:value="0" />

</DirectionalLayout>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

代码实现:


import ohos.aafwk.ability.Ability;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Slider;
import ohos.agp.components.Surface;
import ohos.agp.graphics.SurfaceOps;
import ohos.agp.utils.Color;
import ohos.app.dispatcher.task.TaskPriority;
import ohos.global.resource.RawFileEntry;
import ohos.media.common.Source;
import ohos.media.player.Player;
import ohos.media.player.PlayerCallback;
import ohos.media.player.PlayerState;
import ohos.media.player.PlayerStateCallback;

public class VideoPlayerAbility extends Ability {
    private Player player;
    private Surface surface;
    private Button btnPlay;
    private Slider slider;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_video_player);

        initComponents();
        initPlayer();
        initListeners();
    }

    private void initComponents() {
        surface = (Surface) findComponentById(ResourceTable.Id_surface);
        btnPlay = (Button) findComponentById(ResourceTable.Id_btnPlay);
        slider = (Slider) findComponentById(ResourceTable.Id_slider);
    }

    private void initPlayer() {
        player = new Player(this);

        // 设置视频文件路径
        RawFileEntry rawFileEntry = getResourceManager().getRawFileEntry(ResourceTable.Raw_video);
        Source source = rawFileEntry.openRawFileDescriptor().get().createReadableSource();
        player.setSource(source);

        // 设置视频显示的Surface
        player.setVideoSurface(surface);

        // 准备播放
        player.prepare();
    }

    private void initListeners() {
        btnPlay.setClickedListener(component -> {
            if (player.getState() == PlayerState.PLAYING) {
                player.pause();
                btnPlay.setText("Play");
            } else {
                player.play();
                btnPlay.setText("Pause");
            }
        });

        player.setPlayerCallback(new PlayerCallback() {
            @Override
            public void onPlaybackStateChanged(Player player, int playbackState) {
                if (playbackState == PlayerState.COMPLETED) {
                    player.seekTo(0);
                    player.pause();
                    btnPlay.setText("Play");
                }
            }
        });

        player.setPlayerStateCallback(new PlayerStateCallback() {
            @Override
            public void onPlayerStateChanged(Player player, int playerState) {
                if (playerState == PlayerState.PLAYING) {
                    btnPlay.setText("Pause");
                } else {
                    btnPlay.setText("Play");
                }
            }
        });
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.

上述代码只是一个示例,并未包含完整的错误处理、资源回收等。在实际开发中,您可能需要添加更多的功能和逻辑来满足具体需求,并确保代码的健壮性和稳定性。

此外,为了使上述代码能够运行,您还需要在资源文件夹(res/rawability_video_player.xml)中添加视频文件(例如"video.mp4")。

文献材料链接:
以下是一些与鸿蒙应用开发和视频播放器应用相关的文献材料链接:

  1. 鸿蒙应用开发官方文档:​​https://developer.harmonyos.com/cn/docs/documentation/doc-guides/introduction-0000001050748140​
  2. 鸿蒙应用开发示例代码:​​https://developer.harmonyos.com/cn/docs/documentation/doc-guides/samples-0000001050577670​
  3. 鸿蒙媒体播放框架官方文档:​​https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-playback-0000000000145972​
  4. 鸿蒙应用开发社区:​​https://developer.harmonyos.com/cn/community​

当前都有哪些产品在使用:
鸿蒙操作系统于2019年发布,并在之后逐渐应用于华为公司的各类产品。目前,一些使用鸿蒙操作系统的产品包括:

  1. 华为智能手机:华为公司的最新一代智能手机,如华为Mate 40、P50系列等,采用鸿蒙操作系统作为其操作系统。
  2. 华为智能电视:华为公司推出的智能电视产品,如华为Vision系列电视,采用鸿蒙操作系统作为其操作系统。
  3. 华为平板电脑:华为公司的平板电脑产品,如华为MatePad系列,采用鸿蒙操作系统作为其操作系统。
  4. 华为智能穿戴设备:华为公司的智能手表、智能耳机等穿戴设备,如华为Watch 3、FreeBuds Pro等,采用鸿蒙操作系统作为其操作系统。



©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2023-12-22 16:34:10修改
收藏
回复
举报


回复
    相关推荐