Skip to content

Commit

Permalink
feat: add videoRendered callback
Browse files Browse the repository at this point in the history
  • Loading branch information
I-m-SuperMan committed Jan 17, 2020
1 parent 5c4420a commit 6c5768b
Show file tree
Hide file tree
Showing 11 changed files with 61 additions and 9 deletions.
25 changes: 21 additions & 4 deletions mediaPlayer/MediaPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ namespace Cicada {
listener.Completion = completionCallback;
listener.FirstFrameShow = firstFrameCallback;
listener.VideoSizeChanged = videoSizeChangedCallback;
listener.VideoRendered = videoRenderedCallback;
listener.PositionUpdate = currentPostionCallback;
listener.BufferPositionUpdate = bufferPostionCallback;
listener.LoadingStart = loadingStartCallback;
Expand Down Expand Up @@ -436,8 +437,8 @@ namespace Cicada {
playerConfig.highBufferDuration = playerConfig.maxDelayTime;
}

if (playerConfig.startBufferDuration > playerConfig.highBufferDuration) {
playerConfig.startBufferDuration = playerConfig.highBufferDuration;
if (playerConfig.startBufferDuration > playerConfig.maxBufferDuration) {
playerConfig.startBufferDuration = playerConfig.maxBufferDuration;
}

//must
Expand Down Expand Up @@ -761,6 +762,13 @@ namespace Cicada {
}
}

void MediaPlayer::videoRenderedCallback(int64_t timeMs, int64_t pts, void *userData)
{
GET_MEDIA_PLAYER
player->mListener.VideoRendered(timeMs, pts, player->mListener.userData);
}


void MediaPlayer::currentPostionCallback(int64_t position, void *userData)
{
GET_MEDIA_PLAYER
Expand Down Expand Up @@ -1035,16 +1043,18 @@ namespace Cicada {
mPlayUrlChangedCallback = urlChangedCallbak;
}

void MediaPlayer::onMediaFrameCallback(void *arg, const unique_ptr<IAFPacket>& frame, StreamType type)
void MediaPlayer::onMediaFrameCallback(void *arg, const unique_ptr<IAFPacket> &frame, StreamType type)
{
MediaPlayer *player = (MediaPlayer *)arg;

if (nullptr == player) {
return;
}

player->mediaFrameCallback(frame, type);
}

void MediaPlayer::mediaFrameCallback(const unique_ptr<IAFPacket>& frame, StreamType type)
void MediaPlayer::mediaFrameCallback(const unique_ptr<IAFPacket> &frame, StreamType type)
{
if (mCacheManager) {
mCacheManager->sendMediaFrame(frame, type);
Expand All @@ -1054,4 +1064,11 @@ namespace Cicada {
mMediaFrameFunc(mMediaFrameArg, frame, type);
}
}


void MediaPlayer::EnableVideoRenderedCallback(bool enable)
{
GET_PLAYER_HANDLE;
CicadaSetOption(handle, "enableVRC", enable ? "1" : "0");
}
}
5 changes: 5 additions & 0 deletions mediaPlayer/MediaPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ namespace Cicada {
}

public:

void EnableVideoRenderedCallback(bool enable);

/*
* set player listener
*/
Expand Down Expand Up @@ -323,6 +326,8 @@ namespace Cicada {

static void videoSizeChangedCallback(int64_t width, int64_t height, void *userData);

static void videoRenderedCallback(int64_t timeMs, int64_t pts, void *userData);

static void currentPostionCallback(int64_t position, void *userData);

static void bufferPostionCallback(int64_t position, void *userData);
Expand Down
17 changes: 14 additions & 3 deletions mediaPlayer/SuperMediaPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,8 @@ namespace Cicada {
} else if (theKey == "description") {
mSet.mOptions.set(theKey, value, options::REPLACE);
return 0;
} else if (theKey == "enableVRC") {
mSet.bEnableVRC = (atoi(value) != 0);
}

return 0;
Expand Down Expand Up @@ -578,6 +580,9 @@ namespace Cicada {
snprintf(value, MAX_OPT_VALUE_LENGTH, "%" PRId64 "", size);
} else if (theKey == "description") {
snprintf(value, MAX_OPT_VALUE_LENGTH, "%s", mSet.mOptions.get("description").c_str());
} else if ( theKey == "renderFps") {
float renderFps = GetVideoRenderFps();
snprintf(value, MAX_OPT_VALUE_LENGTH, "%f", renderFps);
}

return;
Expand Down Expand Up @@ -2586,7 +2591,7 @@ namespace Cicada {
//flush frame queue

while (!mVideoFrameQue.empty()) {
ProcessVideoRenderedMsg(mVideoFrameQue.front()->getInfo().pts, nullptr);
ProcessVideoRenderedMsg(mVideoFrameQue.front()->getInfo().pts, af_getsteady_ms(), nullptr);
mVideoFrameQue.pop();
}

Expand Down Expand Up @@ -3674,6 +3679,7 @@ namespace Cicada {
pHandle->mUtil.render(pts);
MsgParam param;
param.videoRenderedParam.pts = pts;
param.videoRenderedParam.timeMs = af_getsteady_ms();
param.videoRenderedParam.userData = userData;
pHandle->putMsg(MSG_INTERNAL_VIDEO_RENDERED, param, false);
}
Expand All @@ -3688,7 +3694,7 @@ namespace Cicada {
}
}

void SuperMediaPlayer::ProcessVideoRenderedMsg(int64_t pts, void *picUserData)
void SuperMediaPlayer::ProcessVideoRenderedMsg(int64_t pts, int64_t timeMs, void *picUserData)
{
checkFirstRender();

Expand All @@ -3707,6 +3713,11 @@ namespace Cicada {
}

mDemuxerService->SetOption("FRAME_RENDERED", pts);

if (mSet.bEnableVRC) {
mPNotifier->NotifyVideoRendered(timeMs, pts);
}

//TODO packetGotTime
}

Expand Down Expand Up @@ -3960,7 +3971,7 @@ namespace Cicada {
{
while (!mVideoFrameQue.empty()) {
int64_t pts = mVideoFrameQue.front()->getInfo().pts;
ProcessVideoRenderedMsg(pts, nullptr);
ProcessVideoRenderedMsg(pts, af_getsteady_ms(), nullptr);
mVideoFrameQue.pop();
}

Expand Down
2 changes: 1 addition & 1 deletion mediaPlayer/SuperMediaPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ namespace Cicada {

void ProcessSwitchStreamMsg(int index) final;

void ProcessVideoRenderedMsg(int64_t pts, void *picUserData) final;
void ProcessVideoRenderedMsg(int64_t pts, int64_t timeMs , void *picUserData) final;

void ProcessVideoCleanFrameMsg() final;

Expand Down
1 change: 1 addition & 0 deletions mediaPlayer/native_cicada_player_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ typedef struct playerListener_t {

playerType12Callback VideoSizeChanged;
playerType12Callback StatusChanged;
playerType12Callback VideoRendered;

playerType13Callback ErrorCallback;

Expand Down
1 change: 1 addition & 0 deletions mediaPlayer/player_msg_control.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ namespace Cicada {

case MSG_INTERNAL_VIDEO_RENDERED:
mProcessor.ProcessVideoRenderedMsg(msgContent.videoRenderedParam.pts,
msgContent.videoRenderedParam.timeMs,
msgContent.videoRenderedParam.userData);
break;

Expand Down
3 changes: 2 additions & 1 deletion mediaPlayer/player_msg_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ namespace Cicada {

typedef struct _MsgVideoRenderedParam {
int64_t pts;
int64_t timeMs;
void *userData;
} MsgVideoRenderedParam;

Expand Down Expand Up @@ -131,7 +132,7 @@ namespace Cicada {

virtual void ProcessSwitchStreamMsg(int index) = 0;

virtual void ProcessVideoRenderedMsg(int64_t pts, void *picUserData) = 0;
virtual void ProcessVideoRenderedMsg(int64_t pts, int64_t timeMs , void *picUserData) = 0;

virtual void ProcessVideoCleanFrameMsg() = 0;

Expand Down
10 changes: 10 additions & 0 deletions mediaPlayer/player_notifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,16 @@ namespace Cicada {
pushEvent(event);
}

void PlayerNotifier::NotifyVideoRendered(int64_t timeMs, int64_t pts)
{
if (!mEnable || mListener.VideoRendered == nullptr) {
return;
}

auto *event = new player_event(timeMs, pts, mListener.VideoRendered);
pushEvent(event);
}

void PlayerNotifier::NotifyFirstFrame()
{
if (!mEnable || mListener.FirstFrameShow == nullptr) {
Expand Down
1 change: 1 addition & 0 deletions mediaPlayer/player_notifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ namespace Cicada {

void NotifyAutoPlayStart();

void NotifyVideoRendered(int64_t timeMs, int64_t pts);
private:

void NotifyVoidEvent(playerVoidCallback listener);
Expand Down
2 changes: 2 additions & 0 deletions mediaPlayer/player_types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ namespace Cicada {
clearShowWhenStop = false;
bEnableTunnelRender = false;
bEnableHwVideoDecode = true;
// don't need reset for each playback
// bEnableVRC = false;
#if TARGET_OS_IPHONE
lowMemSize = 50 * 1024 * 1024;// 50M
#else
Expand Down
3 changes: 3 additions & 0 deletions mediaPlayer/player_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ namespace Cicada {
int64_t AnalyticsID = -1;
int mDefaultBandWidth = 0;
playerOptions mOptions;


bool bEnableVRC = false;
};
}

Expand Down

0 comments on commit 6c5768b

Please sign in to comment.