[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] WFD 连接做connect和disconnect,手机概率性的没有反应以及重启相关推荐

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

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

  2. [WFD][UIBC]连接Wifi display后,有时会自动启动物理键盘

    [WFD][UIBC]连接Wifi display后,有时会自动启动物理键盘 [DESCRIPTION] 目前KK版本支持WIFI Display的load有时连接Wifi display dongl ...

  3. 手机黑屏微信连接不上服务器,华为手机黑屏收不到微信?“老司机”竟然是这么做的!...

    作为手机党,基本上可以说是手机不离手的,而我们在使用手机时,用的最多的不是微信,就是QQ.但是最近,有很多"花粉"表示:手机黑屏后就收不到信息啦!老板.领导.女朋友的重要消息万一错 ...

  4. Qt断开信号与槽的方法,Qt信号的处理 (connect和disconnect和blockSignals的使用方法)

    关于信号与槽的研究 DisConnect: bool QObject::disconnect(const QObject * sender, const char * signal, const QO ...

  5. 服务器运行多个安卓系统,一台服务器可以做几个云手机

    一台服务器可以做几个云手机 内容精选 换一换 本文介绍使用云手机服务时需要了解的基本概念.云手机是一台包含原生安卓操作系统,具有虚拟手机功能的云服务器,简单来说,云手机=云服务器+Android OS ...

  6. 怎样用笔记本的无线网卡做一个AP 实现笔记本做wifi热点供手机、平板电脑wifi上网而不用无线路由器

    怎样用笔记本的无线网卡做一个AP  实现笔记本做wifi热点供手机.平板电脑wifi上网而不用无线路由器 首先前提是:笔记本要带无线网卡的! 利用WIndows 7的hostednetwork创建无线 ...

  7. 手机秒变鸿蒙,华为雄心不小!鸿蒙要做PC系统?手机秒变“电脑主机”

    原标题:华为雄心不小!鸿蒙要做PC系统?手机秒变"电脑主机" 最近科技界对于鸿蒙系统的呼声越来越高,华为也基本确定6月2日正式推送鸿蒙OS2.0系统,首批推送机型涵盖麒麟9000芯 ...

  8. 做锤子区块链手机的4种方法(行业观察)

    为了避免区块链变成皇帝的新衣,趁还没有被皇帝穿上时,我觉有必要发声当个傻小孩也是不错的,这不,可怜的老罗就被人套路进去了,做锤子区块链手机啊! 很久没有更新文章,是觉目前这个状态下似乎很少有人喜欢研究 ...

  9. 手机无法与电脑360助手连接到服务器失败,360手机助手怎么连接不上手机怎么办...

    360手机助手有时候无法连接到手机助手,这个确实是很多用户经常遇见的问题,特别是你想要传送关键资料和文件的时候,心情特别糟糕,希望可以尽快解决这个问题,根据不同的手机和设定,连接中会出现非常大差异的变 ...

最新文章

  1. 手机拍视频最怕抖,只能靠AI拯救了
  2. 【有奖辩论】工程师和销售创业谁更有优势?
  3. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)
  4. Spring Boot国际化支持
  5. python方格染色_Luogu P3631 [APIO2011]方格染色
  6. MySQL--SQL中的安全问题
  7. 数论 —— 线性同余方程
  8. SqlHelper操纵数据库工具类
  9. 【kafka】Unexpected handshake request with client mechanism GSSAPI, enabled mechanisms are
  10. 数据库扩容 mysql_mysql数据库怎么扩容
  11. 深入浅出ExtJS 第六章 布局
  12. shell截取字符串的方法
  13. 中华石杉Java面试突击第一季笔记三(分布式缓存)
  14. 云服务器选择、腾讯云轻量应用服务器面板介绍
  15. MATLAB-蒙特卡罗方法
  16. mac误删文件恢复可靠教程
  17. 1.从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该年没有举办世界杯,则输出:没有举办世界杯。2. 读入一支球队的名字,输出该球队夺冠的年份列表。
  18. python - 数据类型
  19. ssdt函数索引号_获得SSDT函数名和索引号的代码
  20. ​快来Pick你最喜欢的项目,飞桨黑客松Coding Party项目投票通道已开启!

热门文章

  1. POJ3538 Domestic Networks DP+MST
  2. 自建cdn搭建_如何自己架设部署CDN?
  3. 远程服务器返回错误 (401) 未经授权 解决方案
  4. 2021-04-05 计算机网络——什么是可靠传输
  5. netty自定义url过滤器抛引用异常
  6. 电容笔和触控笔有什么区别?平价好用的电容笔排行榜
  7. idea设置实现类生成方法_7种实现位设置的方法
  8. C语言编码规范汇总篇
  9. mysql数据库参数配置_MySQL数据库配置参数优化及参数对应的解释
  10. 浙江工业大学校赛 画图游戏 BugZhu抽抽抽!!