视频播放开发
场景介绍
视频播放包括播放控制、播放设置和播放查询,如播放的开始/停止、播放速度设置和是否循环播放等。
接口说明
视频播放类Player的主要接口
接口名 | 功能描述 |
---|---|
Player(Context context) | 创建Player实例。 |
setSource(Source source) | 设置媒体源。 |
prepare() | 准备播放。 |
play() | 开始播放。 |
pause() | 暂停播放。 |
stop() | 停止播放。 |
rewindTo(long microseconds) | 拖拽播放。 |
setVolume(float volume) | 调节播放音量。 |
setVideoSurface(Surface surface) | 设置视频播放的窗口。 |
enableSingleLooping(boolean looping) | 设置为单曲循环。 |
isSingleLooping() | 检查是否单曲循环播放。 |
isNowPlaying() | 检查是否播放。 |
getCurrentTime() | 获取当前播放位置。 |
getDuration() | 获取媒体文件总时长。 |
getVideoWidth() | 获取视频宽度。 |
getVideoHeight() | 获取视频高度。 |
setPlaybackSpeed(float speed) | 设置播放速度。 |
getPlaybackSpeed() | 获取播放速度。 |
setAudioStreamType(int type) | 设置音频类型。 |
getAudioStreamType() | 获取音频类型。 |
setNextPlayer(Player next) | 设置当前播放结束后的下一个播放器。 |
reset() | 重置播放器。 |
release() | 释放播放资源。 |
setPlayerCallback(IPlayerCallback callback) | 注册回调,接收播放器的事件通知或异常通知。 |
开发步骤
1. 创建Player实例,可调用Player(Context context),创建本地播放器,用于在本设备播放。
2.构造数据源对象,并调用Player实例的setSource(Source source)方法,设置媒体源,代码示例如下:
private Context context = this;
private HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0xD000500, “MainAblityTest”);
Player player = new Player(context);
File file = new File(“/data/data/xxxx/files/test_audio.mp4”); // 根据实际情况设置文件路径
FileInputStream in = new FileInputStream(file);
FileDescriptor fd = in.getFD(); // 从输入流获取FD对象
Source source = new Source(fd);
player.setSource(source);
player.prepare();
player.setPlayerCallback(new Callback());
player.play();
player.stop();
3. 调用prepare(),准备播放。
4. 构造IPlayerCallback,通过IPlayerCallback,可在相应的回调函数中响应准备完毕、播放结束等事件。代码示例如下:
public class Callback implements Player.IPlayerCallback {
@Override
public void onPrepared() {
HiLog.info(TAG, “Player is now prepared,and ready to play”);
}
@Override
public void onMessage(int i, int i1) {
}
@Override
public void onError(int errorType, int errorCode) {
HiLog.error(TAG, “PlayerCallback onError errorType: %{public}d, errorCode: %{public}d”, errorType, errorCode);
}
@Override
public void onResolutionChanged(int i, int i1) {
}
@Override
public void onPlayBackComplete() {
HiLog.info(TAG, “PlayerCallback onPlayBackComplete”);
}
@Override
public void onRewindToComplete() {
}
@Override
public void onBufferingChange(int i) {
}
@Override
public void onNewTimedMetaData(Player.MediaTimedMetaData mediaTimedMetaData) {
}
@Override
public void onMediaTimeIncontinuity(Player.MediaTimeInfo mediaTimeInfo) {
}
}
-
调用play()方法,开始播放。
-
(可选)调用pause()方法和play()方法,可以实现暂停和恢复播放。
-
(可选)调用rewindTo(long microseconds)方法实现播放中的拖拽功能。
-
(可选)调用getDuration()方法和getCurrentTime()方法,可以实现获取总播放时长以及当前播放位置功能。
-
调用 stop()方法停止播放。
-
播放结束后,调用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() | 释放媒体录制资源。 |
开发步骤
-
调用Recorder()方法,创建Recorder实例。
-
构造数据源对象,并调用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);
-
调用setOutputFormat(int outputFormat)方法,设置录制文件存储格式。
-
(可选)构造音频属性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();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
[外链图片转存中…(img-NhSzW6CE-1712814003993)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!