微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 视频播放正常流程和反复切换播 放和暂停时UI与画面的同步

视频播放正常流程和反复切换播 放和暂停时UI与画面的同步

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
在播放RTSP视频时,正常播放流程及log打印如下。当反复的切换播放和暂停,由于客制化或者第三方的问题,会出现UI与画面的不同步现象,如UI显示“正在播放”,实际上画面是暂停的等,可以参考下面正常的流程来排查原因。
[SOLUTION]
1. 准备播放视频的流程:
Step 1:
10-11 14:27:21.557 2383 2383 W mtkVideoView: openVideo setDataSource()
app层setDataSource()
10-11 14:27:21.572 145 434 D MediaPlayerService: setDataSource(rtsp://stream.tclta.
com/mp4_aac_128_96_v50_10_a16_22_m.mp4)
10-11 14:27:21.584 145 434 D MediaPlayerService: setDataSource(rtsp://stream.tclta.
com/mp4_aac_128_96_v50_10_a16_22_m.mp4) done
native层返回setDataSource()成功
Step 2:
10-11 14:27:21.587 2383 2383 W MTKVideoView: openVideo prepareAsync()
app层prepareAsync()
10-11 14:27:21.588 145 434 D MediaPlayerService: [6] prepareAsync
native层开始响应prepareAsync, 成功后会notify一个消息,并回调上层onPrepared()
10-11 14:27:21.879 145 4641 D MediaPlayerService: [6] notify (0x42a23fd0, 1, 0, 0)
10-11 14:27:21.898 2383 2383 V MTKVideoView: mPreparedListener.onPrepared(
android.media.MediaPlayer@4220a7f0)
Step 3:
10-11 14:27:22.011 2383 2383 D MediaPlayer: start() mSourceType: 1
app层start()
10-11 14:27:22.013 145 145 D MediaPlayerService: [6] start
native层来响应start,播放视频
流媒体:
10-11 14:27:26.306 145 4641 D MediaPlayerService: [6] notify (0x42a23fd0, 200, 702, 0)
缓冲完成,会回调app层onBufferingUpdate()
10-11 14:27:26.309 2383 2383 V MTKVideoView: onBufferingUpdate() Buffering percent: 100
2.正常Pause:
10-11 14:27:29.690 2383 2383 V Gallery3D/MovieControllerOverlay:
onCLIck(android.widget.ImageView{420ebea0 VFED..C. ...P.... 201,775-279,876})
listener=com.jrdcom.android.gallery3d.app.MovieActivity$5@421a8340, state=PLAYING,
canReplay=false
10-11 14:27:29.692 2383 2383 V MoviePlayer: pauseVideo()
app层pauseVideo
10-11 14:27:29.693 145 145 D MediaPlayerService: [6] pause
native层pause
10-11 14:27:29.715 2383 2383 V Gallery3D/MovieControllerOverlay: setViewEnabled is
false
app层将play/pause按钮设置为不可点击
10-11 14:27:29.781 145 4641 D MediaPlayerService: [6] notify (0x42a23fd0, 600, 0, 0)
native层返回pause成功
10-11 14:27:29.790 2383 2383 V MTKVideoView: onInfo() what:858 extra:0
app层收到pause成功
10-11 14:27:29.790 2383 2383 V MoviePlayer: onInfo is PAUSE PLAY COMPLETED
10-11 14:27:29.790 2383 2383 V Gallery3D/MovieControllerOverlay: setViewEnabled is true app层将play/pause按钮设置为可点击,即在收到底层pause完成的消息之前, play/pause按钮是不可点击的,这个时候UI也就不会做相应的错误更新,即不会出现画面是暂停的, 但UI却显示"正在播放"
3.正常Play:
10-11 14:27:29.841 2383 2383 V MoviePlayer: playVideo()
app层playVideo
10-11 14:27:29.846 145 433 D MediaPlayerService: [6] start
native层play
10-11 14:27:29.850 2383 2383 V Gallery3D/MovieControllerOverlay: showMainView()
enableScrubbing=true, state=PLAYING
10-11 14:27:29.850 2383 2383 V Gallery3D/TimeBar: setInfo(Playing)
10-11 14:27:29.878 2383 2383 V Gallery3D/MovieControllerOverlay: setViewEnabled is
false
app层将play/pause按钮设置为不可点击
10-11 14:27:29.982 145 4641 D MediaPlayerService: [6] notify (0x42a23fd0, 601, 0, 0)
native层返回play成功
10-11 14:27:29.986 2383 2383 V MTKVideoView: onInfo() what:859 extra:0
app层收到play成功
10-11 14:27:29.986 2383 2383 V MoviePlayer: onInfo() what:859 extra:0
10-11 14:27:29.986 2383 2383 V MoviePlayer: onInfo is PAUSE PLAY COMPLETED
10-11 14:27:29.986 2383 2383 V Gallery3D/MovieControllerOverlay: setViewEnabled is true app层将play/pause按钮设置为可点击, 即在收到底层play完成的消息之前, play/pause按钮是不可点击的,这个时候UI也就不会做相应的错误更新,即不会出现画面是播放的, 但UI却显示play的icon。
4.第三方如何接收底层notify的pause完成和play完成的消息? 可以参看:
在MediaPlayer.java中有接收到Play/Pause complete的消息:
private static final int MEDIA_PAUSE_COMPLETE = 600;
private static final int MEDIA_PLAY_COMPLETE = 601;
在EventHandler 的handleMessage()中有两个case语句:
case MEDIA_PAUSE_COMPLETE
case MEDIA_PLAY_COMPLETE
用默认的播放器时,这里在MTKVideoView.java的onInfo()中会有响应, 然后在具体走到各个Listener做具体处理。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top