[WFD] WFD 连接做connect和disconnect,手机概率性的没有反应以及重启

原创 2016年05月31日 16:34:40

[WFD] WFD 连接做connect和disconnect,手机概率性的没有反应以及重启

[DESCRIPTION]

连续操作手机,做WFD connect和disconnect 的动作,手机会概率发生没有反应以及重
启的问题。
从log 发生来看,WindowManager 这边会卡在RemoteDisplay.nativeDispose()。具体
的CallStack 如下。
"WindowManager" prio=5 tid=12 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x420f6530 self=0x5ce662a8
| sysTid=710 nice=-4 sched=0/0 cgrp=apps handle=1558603520
| state=S schedstat=( 11487599370 9157963355 38440 ) utm=877 stm=271
core=2
#00 pc 000247e8 /system/lib/libc.so (__ioctl+8)
#01 pc 00038248 /system/lib/libc.so (ioctl+28)
#02 pc 0001d3a9 /system/lib/libbinder.so
(android::IPCThreadState::talkWithDriver(bool)+140)
#03 pc 0001d8c3 /system/lib/libbinder.so
(android::IPCThreadState::waitForResponse(android:arcel*, int*)+42)
#04 pc 0001dacb /system/lib/libbinder.so
(android::IPCThreadState::transact(int, unsigned int, android:arcel
const&, android:arcel*, unsigned int)+118)
#05 pc 00019797 /system/lib/libbinder.so
(android::BpBinder::transact(unsigned int, android:arcel const&,
android:arcel*, unsigned int)+36)
#06 pc 00064b35 /system/lib/libmedia.so
#07 pc 00088863 /system/lib/libandroid_runtime.so
#08 pc 0001e74c /system/lib/libdvm.so (dvmPlatformInvoke+112)
#09 pc 0004fa91 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int
const*, JValue*, Method const*, Thread*)+484)
#10 pc 00027b28 /system/lib/libdvm.so
#11 pc 0002f100 /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
#12 pc 0002c5e4 /system/lib/libdvm.so (dvmInterpret(Thread*, Method
const*, JValue*)+188)
#13 pc 00062e6d /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method
const*, Object*, bool, JValue*, std::__va_list)+340)
#14 pc 00062e91 /system/lib/libdvm.so (dvmCallMethod(Thread*, Method
const*, Object*, JValue*, ...)+20)
#15 pc 000574a5 /system/lib/libdvm.so
#16 pc 0000d600 /system/lib/libc.so (__thread_entry+72)
at android.media.RemoteDisplay.nativeDispose(Native Method)
at android.media.RemoteDisplay.dispose(RemoteDisplay.JAVA:137)
at android.media.RemoteDisplay.dispose(RemoteDisplay.java:113)
at
com.android.server.display.WIFIDisplayController.updateConnection(WifiDisp
layController.java:1042)
at
com.android.server.display.WifiDisplayController.disconnect(WifiDisplayCon
troller.java:1005)
at
com.android.server.display.WifiDisplayController.requestDisconnect(WifiDis
playController.java:608)
at
com.android.server.display.WifiDisplayAdapter$7.run(WifiDisplayAdapter.jav
a:247)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:61)
从具体分析log来看,有两种case 会导致这种状况:
Ø Case 1: WFD disconnect 操作中,Video Source没办法stop成功。
在WifiDisplaySource stop过程中,一直没有红色的log,表示video source一直没有被
stopped。
07-21 10:09:07.028 151 3010 I MediaPuller: MediaPuller(audio/raw)
stopping.
07-21 10:09:07.029 151 3001 I MediaPuller: MediaPuller(video/raw)
stopping.
07-21 10:09:07.103 151 3010 I MediaPuller: MediaPuller(audio/raw) stopped.
MediaPuller: MediaPuller(video/raw) stopped.
Ø Case 2: Udp Session 创建失败。
从main log中来看,一直打出如下的error log。
01-01 01:13:05.891 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.898 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.903 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.913 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.923 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.928 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.931 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.934 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.938 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.948 157 11398 E NetworkSession: Error in
createClientOrServer:-101
01-01 01:13:05.951 157 11398 E NetworkSession: Error in
createClientOrServer:-101

[SOLUTION]

Ø 若是Case 1,请麻烦做如下修改(修改的code以红色为标注)。
1) alps/mediatek/frameworks-ext/av/media/libstagefright/wifi-displaymediatek/
source/RepeaterSource.cpp
status_t RepeaterSource::start(MetaData *params) {
CHECK(!mStarted);
//add start
mStop=false;
//add end
..........................
}
status_t RepeaterSource::stop() {
CHECK(mStarted);
ALOGI("stopping");
mStop = true;
if (mBuffer != NULL) {
ALOGV("releasing mbuf %p", mBuffer);
mBuffer->release();
mBuffer = NULL;
}
tatus_t err = mSource->stop();
if (mLooper != NULL) {
mLooper->stop();
mLooper.clear();
mReflector.clear();
}
ALOGI("stopped");
mStarted = false;
return err;
}
void RepeaterSource:nMessageReceived(const sp<AMessage> &msg) {
switch (msg->what()) {
case kWhatRead:
{
MediaBuffer *buffer;
//add start
if (true == mStop) {
break;
}
//add end
#ifdef MTB_SUPPORT
ATRACE_BEGIN("Repeater, KWhatRead");
#endif
#ifndef ANDROID_DEFAULT_CODE
int64_t startUs = ALooper::GetNowUs();
#endif
status_t err = mSource->read(&buffer);
//add start
if (true==mStop) {
if (mBuffer != NULL) {
mBuffer->release();
mBuffer = NULL;
}
if(buffer!=NULL) {
buffer->release();
}
break;
}
//add end
........................
}
2) alps/mediatek/frameworks-ext/av/media/libstagefright/wifi-displaymediatek/
source/RepeaterSource.h
struct RepeaterSource : public MediaSource {
..............
//add start
bool mStop;
//add end
....................
}
&Oslash; 若是case 2 ,请麻烦做如下修改 (修改的code 以红色为标注)。
\alps\mediatek\frameworks-ext\av\media\libstagefright\wifi-displaymediatek\
rtp\RTPSender.cpp
status_t RTPSender::initAsync(
const char *remoteHost,
int32_t remoteRTPPort,
TransportMode rtpMode,
int32_t remoteRTCPPort,
TransportMode rtcpMode,
int32_t *outLocalRTPPort) {
...........................

for (;;) {
修改成
int count =0;
status_t err;
for(;count <6;count ++){
............................
//將err 放在for 循環外面
//status_t err;
}
//add that start
if(count >5)
{
notifyError(err);
return err;
}
//add that end
if(rtpMode == TRANSPORT_UDP){
mRTPConnected =true;
}
.....................
}


相关文章推荐

[WFD][IOT]通过小米盒子连接电视,概率性卡在接受视频数据界面

[WFD][IOT]通过小米盒子连接电视,概率性卡在接受视频数据界面 [DESCRIPTION] 手机通过小米盒子连接电视,电视一直停留在正在接受视频数据界面,手机端一直显示正在连接,过1分钟...

解决手机网站首页右上角菜单点击没有反应的bug

首先上图: 如图,右上角的导航菜单点击之后没有反应,本来应该是向下展开几个菜单的。 经过几番查找,并结合网站源码对比分析,得出了解决方案。 原来是我为了方便修改,查看美观,把原来的一条语句用...

安卓手机插电脑上没有反应?

一.问题很多android手机插入电脑上,我们使用adb devices时,却看不到设备信息。如何解决这个问题呢?二.解决(1)手机端手机端需要在设置里打开“开发者选项”,如果设置里没有,一般在系统信...

【SVN】svn服务器访问失败【由于连接方在一段时间后没有反应】

可以很清楚的告诉你,是由于服务器的端口未打卡或者你的服务根本没有运行。环境: 1,服务器windows2012 2,本机电脑win7 3,svn本地的版本和服务器的版本一致。分为以下两种情况: ...

iPhone/iPad连接电脑(win8.1)没有反应也不充电

iPhone连接电脑后一点反应也没有,也不充电。然后在网上查找以后尝试了很多方法,这是苹果官方网站给出的一些解决办法https://support.apple.com/zh-cn/HT204095重装...

OneDrive卸载后重新安装没有反应的解决办法

自从安装了Onedrive,它的自动安装程序,总是会时不时的占用25%的CPU,然后提示更新失败。 今天又遇到这个问题,一生气直接卸载和删除了Onedrive,之后从官网下载了Onedrive安装文...

Ubuntu12.04-64Bit经典桌面环境右键没有反应问题解决

Ubuntu12.04-64Bit经典桌面环境右键没有反应问题解决 安装完Ubuntu12.04-64Bit版之之后,有时候会出现在桌面上点击鼠标右键没有反应的问题,有不少同学大概以为是安装出了问题,...
  • netwalk
  • netwalk
  • 2013年07月22日 19:41
  • 2456

hibernate 使用注解 查询和添加对象到数据库没有反应

在使用sring和hibernate集成的时候 我们一般可以使用两种方式去配置持久化数据层 1.配置文件 theone/cms/article/entity/c...
  • xwygn
  • xwygn
  • 2012年12月28日 10:08
  • 1712

Httpd2.4响应变慢没有反应的解决方法,甚至造成服务器死机的解决方法

如何解决httpd响应慢、服务器死机的问题,此文版权所有,如需转载请注明出处...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[WFD] WFD 连接做connect和disconnect,手机概率性的没有反应以及重启
举报原因:
原因补充:

(最多只允许输入30个字)