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
d71f1dd2
Commit
d71f1dd2
authored
5 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
本协议拉流代码支持任意编码格式
parent
e095a604
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
64 行增加
和
17 行删除
+64
-17
3rdpart/ZLToolKit
+1
-1
src/Common/MultiMediaSourceMuxer.h
+31
-12
src/Player/PlayerBase.h
+1
-1
src/Player/PlayerProxy.cpp
+30
-3
src/Player/PlayerProxy.h
+1
-0
没有找到文件。
ZLToolKit
@
ea465afe
Subproject commit
03d0953f91e0a75fa8e95fce032ff9d3bef04789
Subproject commit
ea465afe2f114d0b82f9e0869c728146abf5f05e
This diff is collapsed.
Click to expand it.
src/Common/MultiMediaSourceMuxer.h
查看文件 @
d71f1dd2
...
...
@@ -40,11 +40,16 @@ public:
const
string
&
strId
,
float
dur_sec
=
0
.
0
,
bool
bEanbleHls
=
true
,
bool
bEnableMp4
=
false
){
_rtmp
=
std
::
make_shared
<
RtmpMediaSourceMuxer
>
(
vhost
,
strApp
,
strId
,
std
::
make_shared
<
TitleMete
>
(
dur_sec
));
_rtsp
=
std
::
make_shared
<
RtspMediaSourceMuxer
>
(
vhost
,
strApp
,
strId
,
std
::
make_shared
<
TitleSdp
>
(
dur_sec
));
bool
bEnableMp4
=
false
,
bool
bEanbleRtmp
=
true
,
bool
bEanbleRtsp
=
true
){
if
(
bEanbleRtmp
)
{
_rtmp
=
std
::
make_shared
<
RtmpMediaSourceMuxer
>
(
vhost
,
strApp
,
strId
,
std
::
make_shared
<
TitleMete
>
(
dur_sec
));
}
if
(
bEanbleRtsp
)
{
_rtsp
=
std
::
make_shared
<
RtspMediaSourceMuxer
>
(
vhost
,
strApp
,
strId
,
std
::
make_shared
<
TitleSdp
>
(
dur_sec
));
}
_record
=
std
::
make_shared
<
MediaRecorder
>
(
vhost
,
strApp
,
strId
,
bEanbleHls
,
bEnableMp4
);
}
virtual
~
MultiMediaSourceMuxer
(){}
...
...
@@ -54,8 +59,12 @@ public:
* @param track 媒体描述
*/
void
addTrack
(
const
Track
::
Ptr
&
track
)
{
_rtmp
->
addTrack
(
track
);
_rtsp
->
addTrack
(
track
);
if
(
_rtmp
){
_rtmp
->
addTrack
(
track
);
}
if
(
_rtsp
){
_rtsp
->
addTrack
(
track
);
}
_record
->
addTrack
(
track
);
}
...
...
@@ -64,8 +73,12 @@ public:
* @param frame 帧数据
*/
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
{
_rtmp
->
inputFrame
(
frame
);
_rtsp
->
inputFrame
(
frame
);
if
(
_rtmp
)
{
_rtmp
->
inputFrame
(
frame
);
}
if
(
_rtsp
)
{
_rtsp
->
inputFrame
(
frame
);
}
_record
->
inputFrame
(
frame
);
}
...
...
@@ -74,8 +87,12 @@ public:
* @param listener
*/
void
setListener
(
const
std
::
weak_ptr
<
MediaSourceEvent
>
&
listener
){
_rtmp
->
setListener
(
listener
);
_rtsp
->
setListener
(
listener
);
if
(
_rtmp
)
{
_rtmp
->
setListener
(
listener
);
}
if
(
_rtsp
)
{
_rtsp
->
setListener
(
listener
);
}
}
/**
...
...
@@ -83,11 +100,13 @@ public:
* @return
*/
int
readerCount
()
const
{
return
_rtsp
->
readerCount
()
+
_rtmp
->
readerCount
(
);
return
(
_rtsp
?
_rtsp
->
readerCount
()
:
0
)
+
(
_rtmp
?
_rtmp
->
readerCount
()
:
0
);
}
void
setTimeStamp
(
uint32_t
stamp
){
_rtsp
->
setTimeStamp
(
stamp
);
if
(
_rtsp
){
_rtsp
->
setTimeStamp
(
stamp
);
}
}
private
:
RtmpMediaSourceMuxer
::
Ptr
_rtmp
;
...
...
This diff is collapsed.
Click to expand it.
src/Player/PlayerBase.h
查看文件 @
d71f1dd2
...
...
@@ -216,7 +216,7 @@ public:
void
setMediaSouce
(
const
MediaSource
::
Ptr
&
src
)
override
{
if
(
_parser
)
{
return
_parser
->
setMediaSouce
(
src
);
_parser
->
setMediaSouce
(
src
);
}
_pMediaSrc
=
src
;
}
...
...
This diff is collapsed.
Click to expand it.
src/Player/PlayerProxy.cpp
查看文件 @
d71f1dd2
...
...
@@ -126,13 +126,25 @@ void PlayerProxy::play(const string &strUrlTmp) {
}
});
MediaPlayer
::
play
(
strUrlTmp
);
MediaSource
::
Ptr
mediaSource
;
if
(
dynamic_pointer_cast
<
RtspPlayer
>
(
_parser
)){
//rtsp拉流
mediaSource
=
std
::
make_shared
<
RtspMediaSource
>
(
_strVhost
,
_strApp
,
_strSrc
);
}
else
if
(
dynamic_pointer_cast
<
RtmpPlayer
>
(
_parser
)){
//rtmp拉流
mediaSource
=
std
::
make_shared
<
RtmpMediaSource
>
(
_strVhost
,
_strApp
,
_strSrc
);
}
if
(
mediaSource
){
setMediaSouce
(
mediaSource
);
mediaSource
->
setListener
(
shared_from_this
());
}
}
PlayerProxy
::~
PlayerProxy
()
{
_timer
.
reset
();
}
void
PlayerProxy
::
rePlay
(
const
string
&
strUrl
,
int
iFailedCnt
){
auto
iTaskId
=
reinterpret_cast
<
uint64_t
>
(
this
);
auto
iDelay
=
MAX
(
2
*
1000
,
MIN
(
iFailedCnt
*
3000
,
60
*
1000
));
weak_ptr
<
PlayerProxy
>
weakSelf
=
shared_from_this
();
_timer
=
std
::
make_shared
<
Timer
>
(
iDelay
/
1000.0
f
,[
weakSelf
,
strUrl
,
iFailedCnt
]()
{
...
...
@@ -146,8 +158,13 @@ void PlayerProxy::rePlay(const string &strUrl,int iFailedCnt){
return
false
;
},
getPoller
());
}
int
PlayerProxy
::
readerCount
(){
return
(
_mediaMuxer
?
_mediaMuxer
->
readerCount
()
:
0
)
+
(
_pMediaSrc
?
_pMediaSrc
->
readerCount
()
:
0
);
}
bool
PlayerProxy
::
close
(
MediaSource
&
sender
,
bool
force
)
{
if
(
!
_mediaMuxer
||
(
!
force
&&
_mediaMuxer
->
readerCount
()
!=
0
)
){
if
(
!
force
&&
readerCount
()
!=
0
){
return
false
;
}
...
...
@@ -157,6 +174,7 @@ bool PlayerProxy::close(MediaSource &sender,bool force) {
auto
stronSelf
=
weakSlef
.
lock
();
if
(
stronSelf
)
{
stronSelf
->
_mediaMuxer
.
reset
();
stronSelf
->
setMediaSouce
(
nullptr
);
stronSelf
->
teardown
();
if
(
stronSelf
->
_onClose
){
stronSelf
->
_onClose
();
...
...
@@ -197,7 +215,16 @@ private:
};
void
PlayerProxy
::
onPlaySuccess
()
{
_mediaMuxer
.
reset
(
new
MultiMediaSourceMuxer
(
_strVhost
,
_strApp
,
_strSrc
,
getDuration
(),
_bEnableHls
,
_bEnableMp4
));
if
(
dynamic_pointer_cast
<
RtspMediaSource
>
(
_pMediaSrc
))
{
//rtsp拉流代理
_mediaMuxer
.
reset
(
new
MultiMediaSourceMuxer
(
_strVhost
,
_strApp
,
_strSrc
,
getDuration
(),
_bEnableHls
,
_bEnableMp4
,
true
,
false
));
}
else
if
(
dynamic_pointer_cast
<
RtmpMediaSource
>
(
_pMediaSrc
))
{
//rtmp拉流代理
_mediaMuxer
.
reset
(
new
MultiMediaSourceMuxer
(
_strVhost
,
_strApp
,
_strSrc
,
getDuration
(),
_bEnableHls
,
_bEnableMp4
,
false
,
true
));
}
else
{
//其他拉流代理
_mediaMuxer
.
reset
(
new
MultiMediaSourceMuxer
(
_strVhost
,
_strApp
,
_strSrc
,
getDuration
(),
_bEnableHls
,
_bEnableMp4
,
true
,
true
));
}
_mediaMuxer
->
setListener
(
shared_from_this
());
auto
videoTrack
=
getTrack
(
TrackVideo
,
false
);
...
...
This diff is collapsed.
Click to expand it.
src/Player/PlayerProxy.h
查看文件 @
d71f1dd2
...
...
@@ -84,6 +84,7 @@ private:
void
onNoneReader
(
MediaSource
&
sender
)
override
;
void
rePlay
(
const
string
&
strUrl
,
int
iFailedCnt
);
void
onPlaySuccess
();
int
readerCount
()
;
private
:
bool
_bEnableHls
;
bool
_bEnableMp4
;
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论