Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
3bc0769c
Commit
3bc0769c
authored
Sep 27, 2021
by
ziyue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善mk_media接口
parent
c493f0da
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
77 行增加
和
64 行删除
+77
-64
api/include/mk_media.h
+14
-7
api/source/mk_media.cpp
+14
-14
src/Common/Device.cpp
+40
-33
src/Common/Device.h
+8
-9
src/Rtp/PSEncoder.cpp
+1
-1
没有找到文件。
api/include/mk_media.h
查看文件 @
3bc0769c
...
...
@@ -46,8 +46,9 @@ API_EXPORT void API_CALL mk_media_release(mk_media ctx);
* @param width 视频宽度
* @param height 视频高度
* @param fps 视频fps
* @return 1代表成功,0失败
*/
API_EXPORT
void
API_CALL
mk_media_init_video
(
mk_media
ctx
,
int
codec_id
,
int
width
,
int
height
,
float
fps
);
API_EXPORT
int
API_CALL
mk_media_init_video
(
mk_media
ctx
,
int
codec_id
,
int
width
,
int
height
,
float
fps
);
/**
* 添加音频轨道
...
...
@@ -56,8 +57,9 @@ API_EXPORT void API_CALL mk_media_init_video(mk_media ctx, int codec_id, int wid
* @param channel 通道数
* @param sample_bit 采样位数,只支持16
* @param sample_rate 采样率
* @return 1代表成功,0失败
*/
API_EXPORT
void
API_CALL
mk_media_init_audio
(
mk_media
ctx
,
int
codec_id
,
int
sample_rate
,
int
channels
,
int
sample_bit
);
API_EXPORT
int
API_CALL
mk_media_init_audio
(
mk_media
ctx
,
int
codec_id
,
int
sample_rate
,
int
channels
,
int
sample_bit
);
/**
* 添加静音音频轨道
...
...
@@ -80,8 +82,9 @@ API_EXPORT void API_CALL mk_media_init_complete(mk_media ctx);
* @param len 单帧H264数据字节数
* @param dts 解码时间戳,单位毫秒
* @param pts 播放时间戳,单位毫秒
* @return 1代表成功,0失败
*/
API_EXPORT
void
API_CALL
mk_media_input_h264
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
);
API_EXPORT
int
API_CALL
mk_media_input_h264
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
);
/**
* 输入单帧H265视频,帧起始字节00 00 01,00 00 00 01均可
...
...
@@ -90,8 +93,9 @@ API_EXPORT void API_CALL mk_media_input_h264(mk_media ctx, const void *data, int
* @param len 单帧H265数据字节数
* @param dts 解码时间戳,单位毫秒
* @param pts 播放时间戳,单位毫秒
* @return 1代表成功,0失败
*/
API_EXPORT
void
API_CALL
mk_media_input_h265
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
);
API_EXPORT
int
API_CALL
mk_media_input_h265
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
);
/**
* 输入单帧AAC音频(单独指定adts头)
...
...
@@ -100,8 +104,9 @@ API_EXPORT void API_CALL mk_media_input_h265(mk_media ctx, const void *data, int
* @param len 单帧AAC数据字节数
* @param dts 时间戳,毫秒
* @param adts adts头,可以为null
* @return 1代表成功,0失败
*/
API_EXPORT
void
API_CALL
mk_media_input_aac
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
void
*
adts
);
API_EXPORT
int
API_CALL
mk_media_input_aac
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
void
*
adts
);
/**
* 输入单帧PCM音频,启用ENABLE_FAAC编译时,该函数才有效
...
...
@@ -109,8 +114,9 @@ API_EXPORT void API_CALL mk_media_input_aac(mk_media ctx, const void *data, int
* @param data 单帧PCM数据
* @param len 单帧PCM数据字节数
* @param dts 时间戳,毫秒
* @return 1代表成功,0失败
*/
API_EXPORT
void
API_CALL
mk_media_input_pcm
(
mk_media
ctx
,
void
*
data
,
int
len
,
uint32_t
pts
);
API_EXPORT
int
API_CALL
mk_media_input_pcm
(
mk_media
ctx
,
void
*
data
,
int
len
,
uint32_t
pts
);
/**
* 输入单帧OPUS/G711音频帧
...
...
@@ -118,8 +124,9 @@ API_EXPORT void API_CALL mk_media_input_pcm(mk_media ctx, void *data, int len, u
* @param data 单帧音频数据
* @param len 单帧音频数据字节数
* @param dts 时间戳,毫秒
* @return 1代表成功,0失败
*/
API_EXPORT
void
API_CALL
mk_media_input_audio
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
);
API_EXPORT
int
API_CALL
mk_media_input_audio
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
);
/**
* MediaSource.close()回调事件
...
...
api/source/mk_media.cpp
查看文件 @
3bc0769c
...
...
@@ -174,7 +174,7 @@ API_EXPORT void API_CALL mk_media_release(mk_media ctx) {
delete
obj
;
}
API_EXPORT
void
API_CALL
mk_media_init_video
(
mk_media
ctx
,
int
codec_id
,
int
width
,
int
height
,
float
fps
){
API_EXPORT
int
API_CALL
mk_media_init_video
(
mk_media
ctx
,
int
codec_id
,
int
width
,
int
height
,
float
fps
){
assert
(
ctx
);
MediaHelper
::
Ptr
*
obj
=
(
MediaHelper
::
Ptr
*
)
ctx
;
VideoInfo
info
;
...
...
@@ -182,10 +182,10 @@ API_EXPORT void API_CALL mk_media_init_video(mk_media ctx, int codec_id, int wid
info
.
iFrameRate
=
fps
;
info
.
iWidth
=
width
;
info
.
iHeight
=
height
;
(
*
obj
)
->
getChannel
()
->
initVideo
(
info
);
return
(
*
obj
)
->
getChannel
()
->
initVideo
(
info
);
}
API_EXPORT
void
API_CALL
mk_media_init_audio
(
mk_media
ctx
,
int
codec_id
,
int
sample_rate
,
int
channels
,
int
sample_bit
){
API_EXPORT
int
API_CALL
mk_media_init_audio
(
mk_media
ctx
,
int
codec_id
,
int
sample_rate
,
int
channels
,
int
sample_bit
){
assert
(
ctx
);
MediaHelper
::
Ptr
*
obj
=
(
MediaHelper
::
Ptr
*
)
ctx
;
AudioInfo
info
;
...
...
@@ -193,7 +193,7 @@ API_EXPORT void API_CALL mk_media_init_audio(mk_media ctx, int codec_id, int sam
info
.
iSampleRate
=
sample_rate
;
info
.
iChannel
=
channels
;
info
.
iSampleBit
=
sample_bit
;
(
*
obj
)
->
getChannel
()
->
initAudio
(
info
);
return
(
*
obj
)
->
getChannel
()
->
initAudio
(
info
);
}
API_EXPORT
void
API_CALL
mk_media_init_mute_audio
(
mk_media
ctx
)
{
...
...
@@ -208,34 +208,34 @@ API_EXPORT void API_CALL mk_media_init_complete(mk_media ctx){
(
*
obj
)
->
getChannel
()
->
addTrackCompleted
();
}
API_EXPORT
void
API_CALL
mk_media_input_h264
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
API_EXPORT
int
API_CALL
mk_media_input_h264
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
assert
(
ctx
&&
data
&&
len
>
0
);
MediaHelper
::
Ptr
*
obj
=
(
MediaHelper
::
Ptr
*
)
ctx
;
(
*
obj
)
->
getChannel
()
->
inputH264
((
const
char
*
)
data
,
len
,
dts
,
pts
);
return
(
*
obj
)
->
getChannel
()
->
inputH264
((
const
char
*
)
data
,
len
,
dts
,
pts
);
}
API_EXPORT
void
API_CALL
mk_media_input_h265
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
API_EXPORT
int
API_CALL
mk_media_input_h265
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
assert
(
ctx
&&
data
&&
len
>
0
);
MediaHelper
::
Ptr
*
obj
=
(
MediaHelper
::
Ptr
*
)
ctx
;
(
*
obj
)
->
getChannel
()
->
inputH265
((
const
char
*
)
data
,
len
,
dts
,
pts
);
return
(
*
obj
)
->
getChannel
()
->
inputH265
((
const
char
*
)
data
,
len
,
dts
,
pts
);
}
API_EXPORT
void
API_CALL
mk_media_input_aac
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
void
*
adts
)
{
API_EXPORT
int
API_CALL
mk_media_input_aac
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
,
void
*
adts
)
{
assert
(
ctx
&&
data
&&
len
>
0
&&
adts
);
MediaHelper
::
Ptr
*
obj
=
(
MediaHelper
::
Ptr
*
)
ctx
;
(
*
obj
)
->
getChannel
()
->
inputAAC
((
const
char
*
)
data
,
len
,
dts
,
(
char
*
)
adts
);
return
(
*
obj
)
->
getChannel
()
->
inputAAC
((
const
char
*
)
data
,
len
,
dts
,
(
char
*
)
adts
);
}
API_EXPORT
void
API_CALL
mk_media_input_pcm
(
mk_media
ctx
,
void
*
data
,
int
len
,
uint32_t
pts
){
API_EXPORT
int
API_CALL
mk_media_input_pcm
(
mk_media
ctx
,
void
*
data
,
int
len
,
uint32_t
pts
){
assert
(
ctx
&&
data
&&
len
>
0
);
MediaHelper
::
Ptr
*
obj
=
(
MediaHelper
::
Ptr
*
)
ctx
;
(
*
obj
)
->
getChannel
()
->
inputPCM
((
char
*
)
data
,
len
,
pts
);
return
(
*
obj
)
->
getChannel
()
->
inputPCM
((
char
*
)
data
,
len
,
pts
);
}
API_EXPORT
void
API_CALL
mk_media_input_audio
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
){
API_EXPORT
int
API_CALL
mk_media_input_audio
(
mk_media
ctx
,
const
void
*
data
,
int
len
,
uint32_t
dts
){
assert
(
ctx
&&
data
&&
len
>
0
);
MediaHelper
::
Ptr
*
obj
=
(
MediaHelper
::
Ptr
*
)
ctx
;
(
*
obj
)
->
getChannel
()
->
inputAudio
((
const
char
*
)
data
,
len
,
dts
);
return
(
*
obj
)
->
getChannel
()
->
inputAudio
((
const
char
*
)
data
,
len
,
dts
);
}
API_EXPORT
void
API_CALL
mk_media_start_send_rtp
(
mk_media
ctx
,
const
char
*
dst_url
,
uint16_t
dst_port
,
const
char
*
ssrc
,
int
is_udp
,
on_mk_media_send_rtp_result
cb
,
void
*
user_data
){
...
...
src/Common/Device.cpp
查看文件 @
3bc0769c
...
...
@@ -33,7 +33,7 @@ DevChannel::DevChannel(const string &vhost, const string &app, const string &str
DevChannel
::~
DevChannel
()
{}
void
DevChannel
::
inputYUV
(
char
*
apcYuv
[
3
],
int
aiYuvLen
[
3
],
uint32_t
uiStamp
)
{
bool
DevChannel
::
inputYUV
(
char
*
apcYuv
[
3
],
int
aiYuvLen
[
3
],
uint32_t
uiStamp
)
{
#ifdef ENABLE_X264
//TimeTicker1(50);
if
(
!
_pH264Enc
)
{
...
...
@@ -46,16 +46,20 @@ void DevChannel::inputYUV(char* apcYuv[3], int aiYuvLen[3], uint32_t uiStamp) {
if
(
_pH264Enc
)
{
H264Encoder
::
H264Frame
*
pOut
;
int
iFrames
=
_pH264Enc
->
inputData
(
apcYuv
,
aiYuvLen
,
uiStamp
,
&
pOut
);
bool
ret
=
false
;
for
(
int
i
=
0
;
i
<
iFrames
;
i
++
)
{
inputH264
((
char
*
)
pOut
[
i
].
pucData
,
pOut
[
i
].
iLength
,
uiStamp
)
;
ret
=
inputH264
((
char
*
)
pOut
[
i
].
pucData
,
pOut
[
i
].
iLength
,
uiStamp
)
?
true
:
ret
;
}
return
ret
;
}
return
false
;
#else
WarnL
<<
"h264编码未启用,该方法无效,编译时请打开ENABLE_X264选项"
;
return
false
;
#endif //ENABLE_X264
}
void
DevChannel
::
inputPCM
(
char
*
pcData
,
int
iDataLen
,
uint32_t
uiStamp
)
{
bool
DevChannel
::
inputPCM
(
char
*
pcData
,
int
iDataLen
,
uint32_t
uiStamp
)
{
#ifdef ENABLE_FAAC
if
(
!
_pAacEnc
)
{
_pAacEnc
.
reset
(
new
AACEncoder
());
...
...
@@ -68,15 +72,17 @@ void DevChannel::inputPCM(char* pcData, int iDataLen, uint32_t uiStamp) {
unsigned
char
*
pucOut
;
int
iRet
=
_pAacEnc
->
inputData
(
pcData
,
iDataLen
,
&
pucOut
);
if
(
iRet
>
7
)
{
inputAAC
((
char
*
)
pucOut
+
7
,
iRet
-
7
,
uiStamp
,
(
char
*
)
pucOut
);
return
inputAAC
((
char
*
)
pucOut
+
7
,
iRet
-
7
,
uiStamp
,
(
char
*
)
pucOut
);
}
}
return
false
;
#else
WarnL
<<
"aac编码未启用,该方法无效,编译时请打开ENABLE_FAAC选项"
;
return
false
;
#endif //ENABLE_FAAC
}
void
DevChannel
::
inputH264
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
bool
DevChannel
::
inputH264
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
if
(
dts
==
0
){
dts
=
(
uint32_t
)
_aTicker
[
0
].
elapsedTime
();
}
...
...
@@ -92,10 +98,10 @@ void DevChannel::inputH264(const char *data, int len, uint32_t dts, uint32_t pts
frame
->
_pts
=
pts
;
frame
->
_buffer
.
assign
(
data
,
len
);
frame
->
_prefix_size
=
prefixSize
(
data
,
len
);
inputFrame
(
frame
);
return
inputFrame
(
frame
);
}
void
DevChannel
::
inputH265
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
bool
DevChannel
::
inputH265
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
)
{
if
(
dts
==
0
){
dts
=
(
uint32_t
)
_aTicker
[
0
].
elapsedTime
();
}
...
...
@@ -111,7 +117,7 @@ void DevChannel::inputH265(const char *data, int len, uint32_t dts, uint32_t pts
frame
->
_pts
=
pts
;
frame
->
_buffer
.
assign
(
data
,
len
);
frame
->
_prefix_size
=
prefixSize
(
data
,
len
);
inputFrame
(
frame
);
return
inputFrame
(
frame
);
}
class
FrameAutoDelete
:
public
FrameFromPtr
{
...
...
@@ -128,52 +134,53 @@ public:
}
};
void
DevChannel
::
inputAAC
(
const
char
*
data_without_adts
,
int
len
,
uint32_t
dts
,
const
char
*
adts_header
){
bool
DevChannel
::
inputAAC
(
const
char
*
data_without_adts
,
int
len
,
uint32_t
dts
,
const
char
*
adts_header
){
if
(
dts
==
0
)
{
dts
=
(
uint32_t
)
_aTicker
[
1
].
elapsedTime
();
}
if
(
adts_header
)
{
if
(
adts_header
+
ADTS_HEADER_LEN
==
data_without_adts
)
{
//adts头和帧在一起
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
_audio
->
codecId
,
(
char
*
)
data_without_adts
-
ADTS_HEADER_LEN
,
len
+
ADTS_HEADER_LEN
,
dts
,
0
,
ADTS_HEADER_LEN
));
}
else
{
//adts头和帧不在一起
char
*
data_with_adts
=
new
char
[
len
+
ADTS_HEADER_LEN
];
memcpy
(
data_with_adts
,
adts_header
,
ADTS_HEADER_LEN
);
memcpy
(
data_with_adts
+
ADTS_HEADER_LEN
,
data_without_adts
,
len
);
inputFrame
(
std
::
make_shared
<
FrameAutoDelete
>
(
_audio
->
codecId
,
data_with_adts
,
len
+
ADTS_HEADER_LEN
,
dts
,
0
,
ADTS_HEADER_LEN
));
}
}
else
{
if
(
!
adts_header
)
{
//没有adts头
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
_audio
->
codecId
,
(
char
*
)
data_without_adts
,
len
,
dts
,
0
,
0
));
return
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
_audio
->
codecId
,
(
char
*
)
data_without_adts
,
len
,
dts
,
0
,
0
));
}
if
(
adts_header
+
ADTS_HEADER_LEN
==
data_without_adts
)
{
//adts头和帧在一起
return
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
_audio
->
codecId
,
(
char
*
)
data_without_adts
-
ADTS_HEADER_LEN
,
len
+
ADTS_HEADER_LEN
,
dts
,
0
,
ADTS_HEADER_LEN
));
}
//adts头和帧不在一起
char
*
data_with_adts
=
new
char
[
len
+
ADTS_HEADER_LEN
];
memcpy
(
data_with_adts
,
adts_header
,
ADTS_HEADER_LEN
);
memcpy
(
data_with_adts
+
ADTS_HEADER_LEN
,
data_without_adts
,
len
);
return
inputFrame
(
std
::
make_shared
<
FrameAutoDelete
>
(
_audio
->
codecId
,
data_with_adts
,
len
+
ADTS_HEADER_LEN
,
dts
,
0
,
ADTS_HEADER_LEN
));
}
void
DevChannel
::
inputAudio
(
const
char
*
data
,
int
len
,
uint32_t
dts
){
bool
DevChannel
::
inputAudio
(
const
char
*
data
,
int
len
,
uint32_t
dts
){
if
(
dts
==
0
)
{
dts
=
(
uint32_t
)
_aTicker
[
1
].
elapsedTime
();
}
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
_audio
->
codecId
,
(
char
*
)
data
,
len
,
dts
,
0
));
return
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
_audio
->
codecId
,
(
char
*
)
data
,
len
,
dts
,
0
));
}
void
DevChannel
::
initVideo
(
const
VideoInfo
&
info
)
{
bool
DevChannel
::
initVideo
(
const
VideoInfo
&
info
)
{
_video
=
std
::
make_shared
<
VideoInfo
>
(
info
);
switch
(
info
.
codecId
){
case
CodecH265
:
addTrack
(
std
::
make_shared
<
H265Track
>
());
break
;
case
CodecH264
:
addTrack
(
std
::
make_shared
<
H264Track
>
());
break
;
default
:
WarnL
<<
"不支持该类型的视频编码类型:"
<<
info
.
codecId
;
break
;
case
CodecH265
:
return
addTrack
(
std
::
make_shared
<
H265Track
>
())
;
case
CodecH264
:
return
addTrack
(
std
::
make_shared
<
H264Track
>
())
;
default
:
WarnL
<<
"不支持该类型的视频编码类型:"
<<
info
.
codecId
;
return
false
;
}
}
void
DevChannel
::
initAudio
(
const
AudioInfo
&
info
)
{
bool
DevChannel
::
initAudio
(
const
AudioInfo
&
info
)
{
_audio
=
std
::
make_shared
<
AudioInfo
>
(
info
);
switch
(
info
.
codecId
)
{
case
CodecAAC
:
addTrack
(
std
::
make_shared
<
AACTrack
>
());
break
;
case
CodecAAC
:
return
addTrack
(
std
::
make_shared
<
AACTrack
>
())
;
case
CodecG711A
:
case
CodecG711U
:
addTrack
(
std
::
make_shared
<
G711Track
>
(
info
.
codecId
,
info
.
iSampleRate
,
info
.
iChannel
,
info
.
iSampleBit
));
break
;
case
CodecOpus
:
addTrack
(
std
::
make_shared
<
OpusTrack
>
());
break
;
default
:
WarnL
<<
"不支持该类型的音频编码类型:"
<<
info
.
codecId
;
break
;
case
CodecG711U
:
return
addTrack
(
std
::
make_shared
<
G711Track
>
(
info
.
codecId
,
info
.
iSampleRate
,
info
.
iChannel
,
info
.
iSampleBit
))
;
case
CodecOpus
:
return
addTrack
(
std
::
make_shared
<
OpusTrack
>
())
;
default
:
WarnL
<<
"不支持该类型的音频编码类型:"
<<
info
.
codecId
;
return
false
;
}
}
...
...
src/Common/Device.h
查看文件 @
3bc0769c
...
...
@@ -58,14 +58,14 @@ public:
* 相当于MultiMediaSourceMuxer::addTrack(VideoTrack::Ptr );
* @param info 视频相关信息
*/
void
initVideo
(
const
VideoInfo
&
info
);
bool
initVideo
(
const
VideoInfo
&
info
);
/**
* 初始化音频Track
* 相当于MultiMediaSourceMuxer::addTrack(AudioTrack::Ptr );
* @param info 音频相关信息
*/
void
initAudio
(
const
AudioInfo
&
info
);
bool
initAudio
(
const
AudioInfo
&
info
);
/**
* 输入264帧
...
...
@@ -74,7 +74,7 @@ public:
* @param dts 解码时间戳,单位毫秒;等于0时内部会自动生成时间戳
* @param pts 播放时间戳,单位毫秒;等于0时内部会赋值为dts
*/
void
inputH264
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
=
0
);
bool
inputH264
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
=
0
);
/**
* 输入265帧
...
...
@@ -83,7 +83,7 @@ public:
* @param dts 解码时间戳,单位毫秒;等于0时内部会自动生成时间戳
* @param pts 播放时间戳,单位毫秒;等于0时内部会赋值为dts
*/
void
inputH265
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
=
0
);
bool
inputH265
(
const
char
*
data
,
int
len
,
uint32_t
dts
,
uint32_t
pts
=
0
);
/**
* 输入aac帧
...
...
@@ -92,7 +92,7 @@ public:
* @param dts 时间戳,单位毫秒
* @param adts_header adts头
*/
void
inputAAC
(
const
char
*
data_without_adts
,
int
len
,
uint32_t
dts
,
const
char
*
adts_header
);
bool
inputAAC
(
const
char
*
data_without_adts
,
int
len
,
uint32_t
dts
,
const
char
*
adts_header
);
/**
* 输入OPUS/G711音频帧
...
...
@@ -100,7 +100,7 @@ public:
* @param len 帧数据长度
* @param dts 时间戳,单位毫秒
*/
void
inputAudio
(
const
char
*
data
,
int
len
,
uint32_t
dts
);
bool
inputAudio
(
const
char
*
data
,
int
len
,
uint32_t
dts
);
/**
* 输入yuv420p视频帧,内部会完成编码并调用inputH264方法
...
...
@@ -108,8 +108,7 @@ public:
* @param aiYuvLen
* @param uiStamp
*/
void
inputYUV
(
char
*
apcYuv
[
3
],
int
aiYuvLen
[
3
],
uint32_t
uiStamp
);
bool
inputYUV
(
char
*
apcYuv
[
3
],
int
aiYuvLen
[
3
],
uint32_t
uiStamp
);
/**
* 输入pcm数据,内部会完成编码并调用inputAAC方法
...
...
@@ -117,7 +116,7 @@ public:
* @param iDataLen
* @param uiStamp
*/
void
inputPCM
(
char
*
pcData
,
int
iDataLen
,
uint32_t
uiStamp
);
bool
inputPCM
(
char
*
pcData
,
int
iDataLen
,
uint32_t
uiStamp
);
private
:
MediaOriginType
getOriginType
(
MediaSource
&
sender
)
const
override
;
...
...
src/Rtp/PSEncoder.cpp
查看文件 @
3bc0769c
...
...
@@ -80,7 +80,7 @@ bool PSEncoder::addTrack(const Track::Ptr &track) {
break
;
}
default
:
WarnL
<<
"mpeg-ps 不支持该编码格式,已忽略:"
<<
track
->
getCodecName
();
return
false
;
;
default
:
WarnL
<<
"mpeg-ps 不支持该编码格式,已忽略:"
<<
track
->
getCodecName
();
return
false
;
}
//尝试音视频同步
stampSync
();
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论