From 8bc72ebc21e04e3d52f7250716c44d3104bfecfa Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期二, 02 十二月 2025 15:28:10 +0800
Subject: [PATCH] 1.修改文件推流
---
app/src/main/java/com/anyun/h264/MainActivity.kt | 87 ++++++++++++++++++++++++++++++++-----------
1 files changed, 65 insertions(+), 22 deletions(-)
diff --git a/app/src/main/java/com/anyun/h264/MainActivity.kt b/app/src/main/java/com/anyun/h264/MainActivity.kt
index 143808e..fb80784 100644
--- a/app/src/main/java/com/anyun/h264/MainActivity.kt
+++ b/app/src/main/java/com/anyun/h264/MainActivity.kt
@@ -1,7 +1,7 @@
package com.anyun.h264
import android.os.Bundle
-import timber.log.Timber
+import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
@@ -12,25 +12,29 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.anyun.h264.ui.theme.MyApplicationTheme
+import timber.log.Timber
import java.io.File
class MainActivity : ComponentActivity() {
private var h264Encoder: H264Encoder? = null
-
+ private var transmitter: H264FileTransmitter? = null
+ companion object{
+ const val TAG ="MainActivity"
+ }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
-
+
setContent {
var isRunning by remember { mutableStateOf(false) }
-
+
MyApplicationTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
MainScreen(
modifier = Modifier.padding(innerPadding),
isRunning = isRunning,
onStartH264Click = {
- val success = startH264Encoder()
+ val success = startFileTransmitter()
if (success) {
isRunning = true
}
@@ -44,40 +48,79 @@
}
}
}
-
+
override fun onDestroy() {
super.onDestroy()
stopH264Encoder()
}
-
+
+ private fun startFileTransmitter():Boolean {
+
+ if (transmitter != null) {
+ Timber.w("H264Encoder is already running")
+ return false
+ }
+
+
+
+ try {
+ transmitter = H264FileTransmitter()
+ Log.i(TAG,"startFileTransmitter")
+ transmitter?.setServerAddress("192.168.16.138", 1078)
+ transmitter?.setProtocolType(JT1076ProtocolHelper.PROTOCOL_TYPE_TCP) // 鎴� PROTOCOL_TYPE_UDP
+
+
+ // 璁剧疆鍗忚鍙傛暟
+ transmitter?.setProtocolParams("013120122580", 1.toByte())
+
+
+ // 璁剧疆甯х巼锛堢敤浜庤绠楁椂闂存埑闂撮殧锛�
+ transmitter?.setFrameRate(25)
+
+
+ // 鍒濆鍖朣ocket
+ if (transmitter?.initialize()==true) {
+ // 寮�濮嬩紶杈撴枃浠�
+ transmitter?.transmitFile("/storage/emulated/0/Android/data/com.anyun.h264/files/h264_1764574451071.h264")
+ return true
+ }else{
+ return false
+ }
+ } catch (e: Exception) {
+ Timber.e(e, "Failed to start H264Encoder")
+ transmitter = null
+ return false
+ }
+ }
+
private fun startH264Encoder(): Boolean {
if (h264Encoder != null) {
Timber.w("H264Encoder is already running")
return false
}
-
+
try {
// 鍒涘缓缂栫爜鍣�
h264Encoder = H264Encoder()
-
+
// 璁剧疆缂栫爜鍙傛暟
h264Encoder?.setEncoderParams(640, 480, 25, 2000000)
-
+
// 璁剧疆杈撳嚭鏂囦欢锛堝彲閫夛級
val outputFile = File(getExternalFilesDir(null), "test2.h264")
h264Encoder?.setOutputFile(outputFile.absolutePath)
h264Encoder?.setEnableFileOutput(false) // 鍚敤鏂囦欢杈撳嚭
-
+
// 璁剧疆UDP鏈嶅姟鍣ㄥ湴鍧�锛堝彲閫夛級
// h264Encoder?.setServerAddress("58.48.93.67", 11935)
h264Encoder?.setEnableNetworkTransmission(true)
- h264Encoder?.setServerAddress("192.168.16.138", 1078)
- h264Encoder?.setProtocolParams("013120122580", 1)
-
+ h264Encoder?.setServerAddress("192.168.16.138", 1078)
+ h264Encoder?.setProtocolParams("013120122580", 1)
+
// 鍒濆鍖栧苟鍚姩
val cameraIdRange = intArrayOf(1, 2)
val resolution = intArrayOf(640, 480)
-
+
if (h264Encoder?.initialize(cameraIdRange, null, resolution, false) == true) {
h264Encoder?.start()
Timber.d("H264Encoder started successfully")
@@ -94,7 +137,7 @@
return false
}
}
-
+
private fun stopH264Encoder() {
h264Encoder?.let { encoder ->
try {
@@ -126,9 +169,9 @@
text = "H264 缂栫爜鍣�",
style = MaterialTheme.typography.headlineMedium
)
-
+
Spacer(modifier = Modifier.height(32.dp))
-
+
Button(
onClick = onStartH264Click,
enabled = !isRunning,
@@ -138,9 +181,9 @@
) {
Text("鍚姩 H264")
}
-
+
Spacer(modifier = Modifier.height(16.dp))
-
+
Button(
onClick = onStopH264Click,
enabled = isRunning,
@@ -153,9 +196,9 @@
) {
Text("鍋滄 H264")
}
-
+
Spacer(modifier = Modifier.height(32.dp))
-
+
if (isRunning) {
Text(
text = "缂栫爜鍣ㄨ繍琛屼腑...",
--
Gitblit v1.8.0