欢迎来到天天文库
浏览记录
ID:42577296
大小:255.55 KB
页数:13页
时间:2019-09-18
《Android WifiDisplay分析三:RTSP交互以及数据传输》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、前面我们分析到WifiDisplaySource会调用ANetworkSession的接口去创建一个socket,并在这个socket上监听是否有客户端的连接请求。先来看看WifiDisplay规范的一些流程图:从之前的一篇文章中,当ANetworkSession创建好RTSP的listensocket后,就会把它加入到selelct中等待对方的连接,那我们首先来看ANetworkSession的threadLoop方法:[java] viewplain copy 1.void ANetworkSession::threadLoop()
2、{ 1. 2. int res = select(maxFd + 1, &rs, &ws, NULL, NULL /* tv */); 3. 4. { 5. Mutex::Autolock autoLock(mLock); 6. 7. List > sessionsToAdd; 8. 9. for (size_t i = mSessions.size(); res > 0 && i-- > 0;) { 10. const
3、 sp &session = mSessions.valueAt(i); 11. 12. int s = session->socket(); 13. 14. if (s < 0) { 15. continue; 16. } 17. 18. if (FD_ISSET(s, &rs)
4、
5、 FD_ISSET(s, &ws)) { 19. --res; 20.
6、 } 21. 22. if (FD_ISSET(s, &rs)) { 23. if (session->isRTSPServer()
7、
8、 session->isTCPDatagramServer()) { 24. struct sockaddr_in remoteAddr; 25. socklen_t remoteAddrLen = sizeof(remoteAddr); 26
9、. 27. int clientSocket = accept( 28. s, (struct sockaddr *)&remoteAddr, &remoteAddrLen); 29. 30. if (clientSocket >= 0) { 31. status_t err = MakeSocketNonBlocking(clientSocket);
10、32. 33. if (err != OK) { 34. 35. } else { 36. in_addr_t addr = ntohl(remoteAddr.sin_addr.s_addr); 37. 38. ALOGI("incoming connection from %d.%d.%d.%d:%d " 39.
11、 "(socket %d)", 1. (addr >> 24), 2. (addr >> 16) & 0xff, 3. (addr >> 8) & 0xff, 4. addr & 0xff, 5.
12、 ntohs(remoteAddr.sin_port), 6. clientSo
此文档下载收益归作者所有