반응형

분류 전체보기 88

안드로이드 화면을 WebRTC로 캡쳐 해서 Janus 서버에 스트리밍 하는 법

오늘도 개발을 이어가던중 이전에 개발한 코드에서 문제가 생겼다그것은 바로 테블릿을 한서버에 미러링을 통한 내화면을 공유해야함.문제는 알고보니 800대 이상 한서버에 동시에 스트리밍을 하기 때문에이전의 코드는 WebRTC로 캡쳐해서 ByteArray에 담아 보내는 방식이었기 때문에 서버에서 부담이 될수 밖에 없는 상황 그래서 다음 방법으로 대체하며 내용을 정리 하려고 한다. 목적은 Android에서 화면을 실시간으로 캡처하고,WebRTC를 통해 Janus 서버(ws://내서버)에 videoroom 방식으로 스트리밍 구성 요소구성 요소설명MediaProjectionAndroid 화면 캡처 권한/세션WebRTC화면 인코딩 ..

kotlin 2025.07.17

window.addFlags 를 활용한 앱이 계속 켜져있게 하기

https://pub.dev/packages/wakelock_plus wakelock_plus | Flutter packagePlugin that allows you to keep the device screen awake, i.e. prevent the screen from sleeping on Android, iOS, macOS, Windows, Linux, and web.pub.dev flutter 에서 wakelock_plus 와 같이 앱을 계속 켜져 있게 하기 그밖의 기능으로 화면 꺼진 상태에서 앱 실행, 잠금 화면 상태에서 표시 하기 ※ 샤오미등 특정 os의 경우 앱이 꺼질수있음. 본 내용은 그밖의 디바이스들만 해당하는 사항아래 참고 요망https://hajun2ya.tistory.com/92..

kotlin 2025.07.01

Foreground 를 통한 안드로이드 시스템이 앱을 백그라운드로 밀거나 강제 종료하는 걸 막는 방법

말그대로 Foreground 알림을 통한 앱이 강제 종료하는 걸 막는 방법 이렇게 하는 이유 기존에는 wakelock_plus 패키지를 통해 앱이 종료되지 않고 계속 실행되게 처리했음 하지만 os중 샤오미의 경우 샤오미는 MIUI 기반으로 작동하는데, MIUI는 앱 절전 및 백그라운드 관리가 굉장히 공격적인 편따라서 다음과 같은 조건에서 앱이 강제로 종료되거나 기능이 제한 샤오미 미패드 6에서 앱이 종료되거나 제한되는 경우 조건 동작일정 시간 터치가 없고, 화면이 켜진 채 유지될 경우화면 꺼짐 방지 무시하거나 앱 프로세스 종료 시도앱이 백그..

kotlin 2025.07.01

flutter 에서 kotlin 연결 후 YOLO 모델을 사용해 안경(glasses) 착용 여부 감지

사용자가 카메라를 실행해서 코틀린에서 flutter 로 안경 및 선글라스를 착용했는지 여부는 YOLO를 이용해 실시간으로 감지 하는 기능을 만들어 봤습니다. 순서 flutter 이벤트 호출 ImageProxy → Bitmap 변환YOLO 모델로 Bitmap 분석결과 중 "glasses" 클래스가 있는지 확인Flutter로 결과 전송 (EventSink)receiveBroadcastStream로 결과 값 실시간 수신자원 정리 (imageProxy.close()) 작성이의 경우 flutter 에서 초기에 이벤트를 호출 합니다.// 안드로이드 안경 감지 yolo static const EventChannel _androidGlassesEventChannel = EventChannel("native_glas..

kotlin 2025.06.19

flutter - kotlin MediaProject를 이용한 실시간 내 디바이스 화면 web에 공유 (2부)

네 안녕하세요 죽지도 않고 돌아온 저 입니다 *^.^* 저번 작업에 이어서 웹에서 처리해여 할 작업들을 정리 하겠습니다. 저같은 경우는 node기반으로 웹을 작업했는데요. 다른분은들 편한걸로 사용하시면 될것 같아요 먼저 node 를 설치해 줍니다.https://nodejs.org/ko Node.js — 어디서든 JavaScript를 실행하세요Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.nodejs.org 설치 완료시 노드 설치가 종료되면원하는 경로에 웹을 실행할 관련 js 파일들과 html 파일을 만들어줍니다.저의 경우 프로젝트를 새로 파서 만들어줬어요 폴더 안에js 파일을 만들어줍니다.저의 경우 이렇게두가지 만들어 ..

kotlin 2025.06.09

flutter - kotlin MediaProject를 이용한 실시간 내 디바이스 화면 web에 공유 (1부)

코틀린을 이용해서 실시간으로 웹에 내 디바이스 화면을 송출 하는 방법을 정리 하려고 합니다.처음 하는 작업이라 이상한 점도 있고 어려움은 있었지만 우여곡절끝에 작업은 마무리 했습니다. 우선 MediaProject을 이용해서 사용해볼텐데요 자세한 내용은https://developer.android.com/media/grow/media-projection?hl=ko 미디어 프로젝션 | Android media | Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 미디어 프로젝션 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 5 (API 수준 21)에 도입된 android.medeveloper.an..

kotlin 2025.06.09

Unsupported class file major version 65

아래의 오류가 난다면? BUG! exception in phase 'semantic analysis' in source unit 'C:\workspace\flutter_3.22.0\flutter\packages\flutter_tools\gradle\src\main\groovy\app_plugin_loader.groovy' Unsupported class file major version 65 Java 21에서 컴파일된 .class 파일을 의미Gradle이 Java 21을 지원하지 않아서 생기는 오류임 Java 버전 17로 맞추기https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html Java Archive Download..

Android 관련 2025.05.22

Flutter 자동화 테스트 함수 정리

기본 테스트 함수setUp 각 테스트 시작 전에 실행할 코드 setUp(() { 초기화 코드 });test 하나의 단위 테스트를 작성할 때 사용 test('2 + 3은 5여야 해', () { expect(2 + 3, 5); });group 여러 테스트를 논리적으로 묶을 때 사용 group('수학 계산', () { test(...); test(...); });등등 검증 함수expect(actual, matcher) 결과(actual)가 기대(matcher)와 일치하는지 확인 expect(2 + 3, equals(5));ex) // 특정 위젯 있는지 체크final heroFinder = find.byKey(const Key('work_out_level'));expect(heroFinder, findsOneW..

flutter 2025.04.28

flutte 에서의 명명 규칙

변수 명명 (camelCase) final userName = 'ha_jun';var isLoggedIn = false;int itemCount = 0; 소문자로 시작하고 단어 경계마다 대문자 (camelCase)불리언 변수는 is, has, can, should 같은 접두어 사용user_name, IsLogin, temp1 는 Dart에서는 권장되지 않음 메서드 명명 (camelCase)void fetchUserData() {}bool validateForm() {}void onLoginPressed() {} 동사로 시작 + 동작이 잘 드러나야 함onXxx, handleXxx 같은 UI 이벤트 핸들러 표현도 일반적Fetch_Data(), Submitbtn() 는 안됨 클래스 명명 (PascalCas..

flutter 2025.04.17
반응형