Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
6460135b
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6460135b
编写于
4月 29, 2022
作者:
H
HelloCrease
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs
Signed-off-by:
N
HelloCrease
<
lian15@huawei.com
>
上级
3fc92cc6
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
156 addition
and
0 deletion
+156
-0
zh-cn/application-dev/application-dev-website.md
zh-cn/application-dev/application-dev-website.md
+1
-0
zh-cn/application-dev/media/Readme-CN.md
zh-cn/application-dev/media/Readme-CN.md
+2
-0
zh-cn/application-dev/media/video-recorder.md
zh-cn/application-dev/media/video-recorder.md
+152
-0
zh-cn/application-dev/website.md
zh-cn/application-dev/website.md
+1
-0
未找到文件。
zh-cn/application-dev/application-dev-website.md
浏览文件 @
6460135b
...
...
@@ -198,6 +198,7 @@
-
[
音频采集开发指导
](
media/audio-capturer.md
)
-
视频
-
[
视频播放开发指导
](
media/video-playback.md
)
-
[
视频录制开发指导
](
media/video-recorder.md
)
-
图片
-
[
图片开发指导
](
media/image.md
)
-
安全
...
...
zh-cn/application-dev/media/Readme-CN.md
浏览文件 @
6460135b
...
...
@@ -9,5 +9,7 @@
-
视频
-
[
视频播放开发指导
](
video-playback.md
)
-
[
视频录制开发指导
](
video-recorder.md
)
-
图片
-
[
图片开发指导
](
image.md
)
zh-cn/application-dev/media/video-recorder.md
0 → 100644
浏览文件 @
6460135b
# 视频录制开发指导
## 场景介绍
视频录制的主要工作是捕获音视频信号,完成音视频编码并保存到文件中,帮助开发者轻松实现音视频录制功能。它允许调用者指定录制的编码格式、封装格式、文件路径等参数。
**图1**
视频录制状态机
![
zh-ch_image_video_recorder_state_machine
](
figures/zh-ch_image_video_recorder_state_machine.png
)
**图2**
视频录制零层图
![
zh-ch_image_video_recorder_zero
](
figures/zh-ch_image_video_recorder_zero.png
)
## 开发步骤
详细API含义可参考:
[
媒体服务API文档VideoRecorder
](
../reference/apis/js-apis-media.md
)
### 全流程场景
包含流程:创建实例,设置录制参数,录制视频,暂停录制,恢复录制,停止录制,释放资源等流程。
```
js
import
media
from
'
@ohos.multimedia.media
'
import
mediaLibrary
from
'
@ohos.multimedia.mediaLibrary
'
export
class
VideoRecorderDemo
{
private
testFdNumber
;
// 用于保存fd地址
// pathName是传入的录制文件名,例如:01.mp4,生成后的文件地址:/storage/media/100/local/files/Video/01.mp4
// 使用mediaLibrary需要添加以下权限, ohos.permission.MEDIA_LOCATION、ohos.permission.WRITE_MEDIA、ohos.permission.READ_MEDIA
async
getFd
(
pathName
)
{
let
displayName
=
pathName
;
const
mediaTest
=
mediaLibrary
.
getMediaLibrary
();
let
fileKeyObj
=
mediaLibrary
.
FileKey
;
let
mediaType
=
mediaLibrary
.
MediaType
.
VIDEO
;
let
publicPath
=
await
mediaTest
.
getPublicDirectory
(
mediaLibrary
.
DirectoryType
.
DIR_VIDEO
);
let
dataUri
=
await
mediaTest
.
createAsset
(
mediaType
,
displayName
,
publicPath
);
if
(
dataUri
!=
undefined
)
{
let
args
=
dataUri
.
id
.
toString
();
let
fetchOp
=
{
selections
:
fileKeyObj
.
ID
+
"
=?
"
,
selectionArgs
:
[
args
],
}
let
fetchFileResult
=
await
mediaTest
.
getFileAssets
(
fetchOp
);
let
fileAsset
=
await
fetchFileResult
.
getAllObject
();
let
fdNumber
=
await
fileAsset
[
0
].
open
(
'
Rw
'
);
this
.
testFdNumber
=
"
fd://
"
+
fdNumber
.
toString
();
}
}
// 当发生错误上上报的错误回调接口
failureCallback
(
error
)
{
console
.
info
(
'
error happened, error name is
'
+
error
.
name
);
console
.
info
(
'
error happened, error code is
'
+
error
.
code
);
console
.
info
(
'
error happened, error message is
'
+
error
.
message
);
}
// 当发生异常时,系统调用的错误回调接口
catchCallback
(
error
)
{
console
.
info
(
'
catch error happened, error name is
'
+
error
.
name
);
console
.
info
(
'
catch error happened, error code is
'
+
error
.
code
);
console
.
info
(
'
catch error happened, error message is
'
+
error
.
message
);
}
async
videoRecorderDemo
()
{
let
videoRecorder
=
null
;
// videoRecorder空对象在createVideoRecorder成功后赋值
let
surfaceID
=
null
;
// 用于保存getInputSurface返回的surfaceID
// 获取需要录制的视频的fd地址
await
this
.
getFd
(
'
01.mp4
'
);
// 录制相关参数配置
let
videoProfile
=
{
audioBitrate
:
48000
,
audioChannels
:
2
,
audioCodec
:
'
audio/mp4a-latm
'
,
audioSampleRate
:
48000
,
fileFormat
:
'
mp4
'
,
videoBitrate
:
48000
,
videoCodec
:
'
video/mp4v-es
'
,
videoFrameWidth
:
640
,
videoFrameHeight
:
480
,
videoFrameRate
:
30
}
let
videoConfig
=
{
audioSourceType
:
1
,
videoSourceType
:
0
,
profile
:
videoProfile
,
url
:
this
.
testFdNumber
,
// testFdNumber由getFd生成
orientationHint
:
0
,
location
:
{
latitude
:
30
,
longitude
:
130
},
}
// 创建videoRecorder对象
await
media
.
createVideoRecorder
().
then
((
recorder
)
=>
{
console
.
info
(
'
case createVideoRecorder called
'
);
if
(
typeof
(
recorder
)
!=
'
undefined
'
)
{
videoRecorder
=
recorder
;
console
.
info
(
'
createVideoRecorder success
'
);
}
else
{
console
.
info
(
'
createVideoRecorder failed
'
);
}
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 调用prepare完成视频录制前的准备工作
await
videoRecorder
.
prepare
(
videoConfig
).
then
(()
=>
{
console
.
info
(
'
prepare success
'
);
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 获取surfaceID并保存下来传递给camera相关接口
await
videoRecorder
.
getInputSurface
().
then
((
surface
)
=>
{
console
.
info
(
'
getInputSurface success
'
);
surfaceID
=
surface
;
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 视频录制依赖相机相关接口,以下需要先调用相机起流接口后才能继续执行,具体的相机接口调用请参考sample用例
// 视频录制启动接口
await
videoRecorder
.
start
().
then
(()
=>
{
console
.
info
(
'
start success
'
);
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 调用pause接口时需要暂停camera出流
await
videoRecorder
.
pause
().
then
(()
=>
{
console
.
info
(
'
pause success
'
);
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 调用resume接口时需要恢复camera出流
await
videoRecorder
.
resume
().
then
(()
=>
{
console
.
info
(
'
resume success
'
);
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 停止camera出流后,停止视频录制
await
videoRecorder
.
stop
().
then
(()
=>
{
console
.
info
(
'
stop success
'
);
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 重置录制相关配置
await
videoRecorder
.
reset
().
then
(()
=>
{
console
.
info
(
'
reset success
'
);
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 释放视频录制相关资源并释放camera对象相关资源
await
videoRecorder
.
release
().
then
(()
=>
{
console
.
info
(
'
release success
'
);
},
this
.
failureCallback
).
catch
(
this
.
catchCallback
);
// 相关对象置null
videoRecorder
=
undefined
;
surfaceID
=
undefined
;
}
}
```
zh-cn/application-dev/website.md
浏览文件 @
6460135b
...
...
@@ -198,6 +198,7 @@
-
[
音频采集开发指导
](
media/audio-capturer.md
)
-
视频
-
[
视频播放开发指导
](
media/video-playback.md
)
-
[
视频录制开发指导
](
media/video-recorder.md
)
-
图片
-
[
图片开发指导
](
media/image.md
)
-
安全
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录