[AI] 이것저것
Android - CCTV 영상을 서버로 중계 (RTSP - RTMP)
ParkSaJang
2024. 6. 28. 16:03
네트워크 카메라에서 RTSP 스트림을 안드로이드 PC로 받아서 이를 서버로 전달하는 방법은 다음과 같습니다.
1. RTSP 스트림 받기: 안드로이드에서 RTSP 스트림을 받아들이기 위해서 libvlc 라이브러리를 사용할 수 있습니다. 이는 VLC 미디어 플레이어의 안드로이드 라이브러리 버전입니다.
build.gradle 파일에 의존성 추가:
gradle코드 복사
implementation 'org.videolan.android:libvlc-all:3.3.12'
RTSP 스트림 재생 코드:
import org.videolan.libvlc.LibVLC
import org.videolan.libvlc.Media
import org.videolan.libvlc.MediaPlayer
class RTSPStreamActivity : AppCompatActivity() {
private lateinit var libVLC: LibVLC
private lateinit var mediaPlayer: MediaPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_rtsp_stream)
libVLC = LibVLC(this)
mediaPlayer = MediaPlayer(libVLC)
val rtspUrl = "rtsp://your_camera_ip:port/stream"
val media = Media(libVLC, Uri.parse(rtspUrl))
mediaPlayer.media = media
mediaPlayer.attachViews(yourSurfaceView, null, false, false)
mediaPlayer.play()
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer.stop()
mediaPlayer.release()
libVLC.release()
}
}
2. 영상 데이터 인코딩 및 전송:
RTSP 스트림을 받아들이고 나서 이를 서버로 전송하기 위해 인코딩하고 전송해야 합니다. FFmpeg 라이브러리를 사용하여 RTSP 스트림을 RTMP로 변환하고 서버로 전송할 수 있습니다. 안드로이드에서 FFmpeg를 사용하려면 FFmpeg를 JNI를 통해 호출할 수 있습니다.
build.gradle 파일에 FFmpeg 라이브러리 추가:
gradle코드 복사
implementation 'com.arthenica:mobile-ffmpeg-full:4.4'
RTSP를 RTMP로 변환 및 전송하는 코드:
import com.arthenica.mobileffmpeg.FFmpeg
class StreamConverter {
fun convertAndStream(rtspUrl: String, rtmpUrl: String) {
val cmd = "-i $rtspUrl -c:v libx264 -preset veryfast -b:v 1500k -maxrate 1500k -bufsize 3000k -vf format=yuv420p -g 50 -c:a aac -b:a 128k -ar 44100 -ac 2 -f flv $rtmpUrl"
val rc = FFmpeg.execute(cmd)
if (rc == Config.RETURN_CODE_SUCCESS) {
Log.i("FFmpeg", "Command execution completed successfully.")
} else {
Log.e("FFmpeg", "Command execution failed with rc=$rc.")
}
}
}
3. 서버 설정:
Nginx와 RTMP 모듈을 사용하여 RTMP 스트림을 수신하도록 설정합니다. 위에서 제공한 Nginx 설정을 사용하여 RTMP 서버를 구성할 수 있습니다.
Nginx 설정 예시:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}
위의 단계를 통해 안드로이드 PC에서 RTSP 스트림을 받아 서버로 전송할 수 있습니다. 이는 네트워크 카메라에서 실시간 영상을 가져와서 안드로이드 장치에서 처리하고 서버로 전달하는 방식입니다. 이 방법을 통해 실제 CCTV의 영상 정보를 서버로 안전하게 전달할 수 있습니다.
반응형