【入门到实战】OpenHarmony南向子系统开发:音视频播放开发指南

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


音视频播放开发

使用场景

音视频播放是将音视频文件或音视频流数据进行解码并通过输出设备进行播放的过程,同时对播放任务进行管理。

接口说明

音视频播放API接口功能如下,具体的API详见接口文档。

表1 音视频播放API接口

类名接口名描述
Playerint32_t SetSource(const Source &source);设置播放源。
Playerint32_t Prepare();准备播放。
Playerint32_t Play();开始播放。
Playerbool IsPlaying()判断是否播放中。
Playerint32_t Pause();暂停播放。
Playerint32_t Stop();停止播放。
Playerint32_t Rewind(int_64 mSeconds, int32_t mode);改变播放位置。
Playerint32_t SetVolume(float leftVolume, float rightVolume);设置音量,包括左声道和右声道。
Playerint32_t SetVideoSurface(Surface *surface)设置播放窗口。
Playerint32_t EnableSingleLooping(bool loop)设置循环播放。
Playerbool IsSingleLooping();判断是否循环播放。
Playerint32_t GetCurrentTime(int64_t &time) const;获取当前播放时长。
Playerint32_t GetDuration(int64_t &duration) const;获取总播放时长。
Playerint32_t GetVideoWidth(int32_t &videoWidth);获取视频源宽度。
Playerint32_t GetVideoHeight(int32_t &videoHeight);获取视频源高度。
Playerint32_t Reset();重置播放器。
Playerint32_t Release();释放播放器资源。
Playervoid SetPlayerCallback(const std::shared_ptr<PlayerCallback> &cb);设置播放回调函数。
SourceSource(const std::string& uri);基于uri创建Source实例。
SourceSource(const std::shared_ptr<StreamSource> &stream, const Format &formats);基于流创建Source实例。
SourceSourceType GetSourceType() const;获取源类型。
Sourceconst std::string &GetSourceUri() const;获取音视频uri。
Sourceconst std::shared_ptr<StreamSource> &GetSourceStream() const;获取音视频流。
Sourceconst Format &GetSourceStreamFormat() const;获取音视频流格式。
Formatbool PutIntValue(const std::string &key, int32_t value);设置整数类型的元数据。
Formatbool PutLongValue(const std::string &key, int64_t value);设置长整数类型的元数据。
Formatbool PutFloatValue(const std::string &key, float value);设置单精度浮点类型的元数据。
Formatbool PutDoubleValue(const std::string &key, double value);设置双精度浮点类型的元数据。
Formatbool PutStringValue(const std::string &key, const std::string &value);设置字符串类型的元数据。
Formatbool GetIntValue(const std::string &key, int32_t &value) const;获取整数类型的元数据值。
Formatbool GetLongValue(const std::string &key, int64_t &value) const;获取长整数类型的元数据值。
Formatbool GetFloatValue(const std::string &key, float &value) const;获取单精度浮点类型的元数据值。
Formatbool GetDoubleValue(const std::string &key, double &value) const;获取双精度浮点类型的元数据值。
Formatbool GetStringValue(const std::string &key, std::string &value) const;获取字符串类型的元数据值。
Formatconst std::map<std::string, FormatData *> &GetFormatMap() const;获取元数据映射表。
Formatbool CopyFrom(const Format &format);用输入Format设置所有元数据。

约束与限制

输入源为音视频流时,不支持播放进度控制和获取文件时长。

开发步骤

  1. 实现PlayerCallback回调,通过SetPlayerCallback函数进行绑定,用于事件处理。

    class TestPlayerCallback : public PlayerCallback{ 
        void OnPlaybackComplete() override 
        { 
            //此处实现代码用于处理文件播放完成的事件 
        } 
        void OnError(int32_t errorType, int32_t errorCode) override 
        { 
            //此处实现代码处理错误事件 
        } 
        void OnInfo(int type, int extra) override 
        { 
            //此处实现代码处理普通事件 
        } 
        void OnRewindToComplete() override 
        { 
            //此处实现代码处理进度控制完成的事件 
        } 
    };
    
    
  2. 创建Player实例,设置播放源并开始播放。

    Player *player = new Player(); 
    std::shared_ptr<PlayerCallback> callback = std::make_shared<TestPlayerCallback>(); 
    player->SetPlayerCallback(callback);//设置player回调 
    std::string uri(filePath);//此处filePath为本地文件路径 
    Source source(uri);//保存uri到source实例 
    player->SetSource(source);//将source设置到player 
    player->Prepare();//准备播放 
    player->SetVideoSurface(surface);//设置播放窗口
    player->Play();//开始播放
    
  3. 根据场景需要进行播放控制。

    player->SetVolume(lvolume, rvolume);//设置左右声道声音 
    player->EnableSingleLooping(true);//设置循环播放 
    player->Pause();//暂停 
    player->Play();//继续播放
    
  4. 播放任务结束后,进行资源释放。

    player->Stop(); //停止播放
    player->Release();//释放资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值