鸿蒙HarmonyOS开发实战—多媒体开发(视频开发 二)_鸿蒙harmoneyos 播放器拉流(1)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    }

    @Override
    public void onRewindToComplete() {

    }

    @Override
    public void onBufferingChange(int i) {

    }

    @Override
    public void onNewTimedMetaData(Player.MediaTimedMetaData mediaTimedMetaData) {

    }

    @Override
    public void onMediaTimeIncontinuity(Player.MediaTimeInfo mediaTimeInfo) {

    }
}


5. 调用play()方法,开始播放。


6. (可选)调用pause()方法和play()方法,可以实现暂停和恢复播放。


7. (可选)调用rewindTo(long microseconds)方法实现播放中的拖拽功能。


8. (可选)调用getDuration()方法和getCurrentTime()方法,可以实现获取总播放时长以及当前播放位置功能。


9. 调用 stop()方法停止播放。


10. 播放结束后,调用release()释放资源。


#### 视频录制开发


##### 场景介绍


视频录制的主要工作是选择视频/音频来源后,录制并生成视频/音频文件。


##### 接口说明


视频录制类Recorder的主要接口




| 接口名 | 功能描述 |
| --- | --- |
| Recorder() | 创建Recorder实例。 |
| setSource(Source source) | 设置音视频源。 |
| setAudioProperty(AudioProperty property) | 设置音频属性。 |
| setVideoProperty(VideoProperty property) | 设置视频属性。 |
| setStorageProperty(StorageProperty property) | 设置音视频存储属性。 |
| prepare() | 准备录制资源。 |
| start() | 开始录制。 |
| stop() | 停止录制。 |
| pause() | 暂停录制。 |
| resume() | 恢复录制。 |
| reset() | 重置录制。 |
| setRecorderLocation(float latitude, float longitude) | 设置视频的经纬度。 |
| setOutputFormat(int outputFormat) | 设置输出文件格式。 |
| getVideoSurface() | 获取视频窗口。 |
| setRecorderProfile(RecorderProfile profile) | 设置媒体录制配置信息。 |
| registerRecorderListener(IRecorderListener listener) | 注册媒体录制回调。 |
| release() | 释放媒体录制资源。 |


##### 开发步骤


1. 调用Recorder()方法,创建Recorder实例。


2. 构造数据源对象,并调用Recorder实例的setSource(Source source)方法,设置媒体源,代码示例如下:



Recorder recorder = new Recorder();
Source source = new Source();
source.setRecorderAudioSource(Recorder.AudioSource.MIC);
source.setRecorderVideoSource(Recorder.VideoSource.SURFACE);
recorder.setSource(source);



3. 调用setOutputFormat(int outputFormat)方法,设置录制[文件存储]( )格式。


4. (可选)构造音频属性AudioProperty对象(不设置音频则是只录视频),并调用Recorder实例的setAudioProperty(AudioProperty property)方法,设置录制的音频属性,代码示例如下:



AudioProperty audioProperty = new AudioProperty.Builder()
.setRecorderNumChannels(2)
.setRecorderSamplingRate(192000)
.setRecorderAudioEncoder(Recorder.AudioEncoder.AAC)
.setRecorderBitRate(48000)
.build();
recorder.setAudioProperty(audioProperty);



5. 构造存储属性StorageProperty对象,并调用Recorder实例的setStorageProperty(StorageProperty property)方法,设置录制的存储属性,代码示例如下



String path = “/sdcard/audiotestRecord.mp4”;
StorageProperty storageProperty = new StorageProperty.Builder()
.setRecorderPath(path)
.setRecorderMaxDurationMs(1000000)
.setRecorderMaxFileSizeBytes(1000000)
.build();
recorder.setStorageProperty(storageProperty);



6. (可选)构造视频属性VideoProperty对象,并调用Recorder实例的setVideoProperty(VideoProperty property)方法,设置录制的视频属性,代码示例如下:



VideoProperty videoProperty = new VideoProperty.Builder()
.setRecorderVideoEncoder(Recorder.VideoEncoder.H264)
.setRecorderWidth(3840)
.setRecorderDegrees(90)
.setRecorderHeight(2160)
.setRecorderBitRate(40000000)
.setRecorderRate(30)
.setRecorderFps(30)
.build();
recorder.setVideoProperty(videoProperty);
recorder.prepare();



7. 调用prepare(),准备录制。


8. (可选)构造录制回调,首先构造对象IRecorderListener,IRecorderListener需要实现onError(int what, int extra),实现录制过程收到错误信息时做相应的操作。下面的代码例子中录制异常时,打印了相关的日志信息,代码示例如下:



private HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0xD000500, “MainAblityTest”);
class RecorderErrorAndInfoListener implements IRecorderListener {
@Override
public void onError(int what, int extra) {
}

@Override
public void onMessage(int what, int extra) {
}

}
IRecorderListener listener = new RecorderErrorAndInfoListener() {
@Override
public void onError(int what, int extra) {
HiLog.error(TAG, “EncodeWriteFileListener onError what:%{public}d, extra:%{public}d”, what, extra);
}
}



9. 调用start()方法,开始录制。


10. (可选)调用pause()方法和resume()方法,可以实现暂停和恢复录制。


11. 调用 stop()方法停止录制。


12. 录制结束后,调用release()释放资源。


#### 媒体提取开发


##### 场景介绍


媒体提取主要工作是将多媒体文件中的音视频数据进行分离,提取出音频、视频数据源。


##### 接口说明


视频提取类Extractor的主要接口




| 接口名 | 功能描述 |
| --- | --- |
| Extractor() | 创建Extractor实例。 |
| setSource(Source source) | 设置媒体播放源。 |
| getStreamFormat(int id) | 获取对应索引的轨道数据的格式。 |
| getTotalStreams() | 获取媒体文件中总轨道数。 |
| specifyStream(int id) | 根据轨道号选择媒体文件中对应的轨道。 |
| unspecifyStream(int id) | 取消轨道选择。 |
| rewindTo(long microseconds, int mode) | 根据时间和mode跳转到指定帧。 |
| next() | 跳转到下一帧。 |
| readBuffer(ByteBuffer buf, int offset) | 读取解复用后的数据。 |
| getStreamId() | 获取当前轨道号。 |
| getFrameTimestamp() | 获取当前媒体数据帧的时间戳。 |
| getFrameSize() | 获取当前媒体数据帧的数据大小。 |
| getFrameType() | 获取当前媒体数据帧的flags。 |
| release() | 释放资源。 |


##### 开发步骤


1. 调用Extractor()方法创建Extractor实例。


2. 构造数据源对象,并调用Extractor实例的setSource(Source source)方法,设置媒体源,代码示例如下:



Extractor extractor = new Extractor();
File file = new File(“/sdcard/test_audio.mp4”); // 根据实际情况设置文件路径
FileInputStream in = new FileInputStream(file);
FileDescriptor fd = in.getFD();
Source source = new Source(fd);
extractor.setSource(source);



3. 调用getTotalStreams()方法获取媒体的轨道数量。


4. 调用specifyStream(int id)方法选择特定轨道的数据,进行提取。


5. (可选)调用unspecifyStream(int id)方法取消选择轨道。


6. (可选)调用rewindTo(long microseconds, int mode)方法实现提取过程中的跳转指定位置。


7. 调用readBuffer(ByteBuffer buf, int offset)方法,可以实现获取提取出来的Buffer数据功能。


8. 调用next()方法,实现提取下一帧的功能。


9. (可选)调用getStreamId()方法,可以实现获取当前选择的轨道编号的功能。


10. (可选)调用getFrameTimestamp()方法,可以实现获取当前轨道内媒体数据帧时间戳的功能。


11. (可选)调用getFrameSize()方法,可以实现获取当前轨道的媒体数据帧大小的功能。


12.(可选)调用getFrameType()方法,可以实现获取当前轨道的媒体数据帧flags的功能。


提取结束后,调用release()释放资源。




---


最后,为了能让大家更好的去学习提升鸿蒙 (Harmony OS) 开发技术,小编连夜整理了一份30个G**纯血版**学习资料(含**视频**、**电子书**、**学习文档**等)以及一份在Github上持续爆火霸榜的《纯血版华为鸿蒙 (Harmony OS)开发手册》(共计890页),希望对大家有所帮助。


## 纯血版鸿蒙 HarmonyOS 4.0 视频学习资料


![](https://img-blog.csdnimg.cn/direct/96278e452e0c4e148a9719152582e3f8.png)


![](https://img-blog.csdnimg.cn/direct/055da709c34041b8b65194f344718ab3.png)


 需要以上视频学习资料小伙伴


请点击→[纯血版全套鸿蒙HarmonyOS学习资料]( )




---


ithub上持续爆火霸榜的《纯血版华为鸿蒙 (Harmony OS)开发手册》(共计890页),希望对大家有所帮助。


## 纯血版鸿蒙 HarmonyOS 4.0 视频学习资料


![](https://img-blog.csdnimg.cn/direct/96278e452e0c4e148a9719152582e3f8.png)


![](https://img-blog.csdnimg.cn/direct/055da709c34041b8b65194f344718ab3.png)


 需要以上视频学习资料小伙伴


请点击→[纯血版全套鸿蒙HarmonyOS学习资料]( )




---


  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值