From 3d0d377e1e8cfa2c47f3c4f32b68e30797e38d2a Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期六, 29 十一月 2025 15:28:50 +0800
Subject: [PATCH] 1.h264 aac 这些
---
app/src/main/java/com/anyun/h264/MainActivity.kt | 158 ++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 138 insertions(+), 20 deletions(-)
diff --git a/app/src/main/java/com/anyun/h264/MainActivity.kt b/app/src/main/java/com/anyun/h264/MainActivity.kt
index 398a53e..5de8803 100644
--- a/app/src/main/java/com/anyun/h264/MainActivity.kt
+++ b/app/src/main/java/com/anyun/h264/MainActivity.kt
@@ -1,47 +1,165 @@
package com.anyun.h264
import android.os.Bundle
+import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
import com.anyun.h264.ui.theme.MyApplicationTheme
+import java.io.File
class MainActivity : ComponentActivity() {
+ private var h264Encoder: H264Encoder? = null
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
+
setContent {
+ var isRunning by remember { mutableStateOf(false) }
+
MyApplicationTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
- Greeting(
- name = "Android",
- modifier = Modifier.padding(innerPadding)
+ MainScreen(
+ modifier = Modifier.padding(innerPadding),
+ isRunning = isRunning,
+ onStartH264Click = {
+ val success = startH264Encoder()
+ if (success) {
+ isRunning = true
+ }
+ },
+ onStopH264Click = {
+ stopH264Encoder()
+ isRunning = false
+ }
)
}
}
}
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ stopH264Encoder()
+ }
+
+ private fun startH264Encoder(): Boolean {
+ if (h264Encoder != null) {
+ Log.w("MainActivity", "H264Encoder is already running")
+ return false
+ }
+
+ try {
+ // 鍒涘缓缂栫爜鍣�
+ h264Encoder = H264Encoder()
+
+ // 璁剧疆缂栫爜鍙傛暟
+ h264Encoder?.setEncoderParams(640, 480, 25, 2000000)
+
+ // 璁剧疆杈撳嚭鏂囦欢锛堝彲閫夛級
+ val outputFile = File(getExternalFilesDir(null), "test.h264")
+ h264Encoder?.setOutputFile(outputFile.absolutePath)
+ h264Encoder?.setEnableFileOutput(true) // 鍚敤鏂囦欢杈撳嚭
+
+ // 璁剧疆UDP鏈嶅姟鍣ㄥ湴鍧�锛堝彲閫夛級
+ h264Encoder?.setServerAddress("192.168.1.100", 8888)
+ h264Encoder?.setProtocolParams("123456789012", 1)
+
+ // 鍒濆鍖栧苟鍚姩
+ val cameraIdRange = intArrayOf(1, 2)
+ val resolution = intArrayOf(640, 480)
+
+ if (h264Encoder?.initialize(cameraIdRange, null, resolution, false) == true) {
+ h264Encoder?.start()
+ Log.d("MainActivity", "H264Encoder started successfully")
+ Log.d("MainActivity", "Output file: ${outputFile.absolutePath}")
+ return true
+ } else {
+ Log.e("MainActivity", "Failed to initialize H264Encoder")
+ h264Encoder = null
+ return false
+ }
+ } catch (e: Exception) {
+ Log.e("MainActivity", "Failed to start H264Encoder", e)
+ h264Encoder = null
+ return false
+ }
+ }
+
+ private fun stopH264Encoder() {
+ h264Encoder?.let { encoder ->
+ try {
+ encoder.stop()
+ Log.d("MainActivity", "H264Encoder stopped")
+ } catch (e: Exception) {
+ Log.e("MainActivity", "Failed to stop H264Encoder", e)
+ }
+ h264Encoder = null
+ }
+ }
}
@Composable
-fun Greeting(name: String, modifier: Modifier = Modifier) {
- Text(
- text = "Hello $name!",
+fun MainScreen(
+ modifier: Modifier = Modifier,
+ isRunning: Boolean,
+ onStartH264Click: () -> Unit,
+ onStopH264Click: () -> Unit
+) {
+ Column(
modifier = modifier
- )
-}
-
-@Preview(showBackground = true)
-@Composable
-fun GreetingPreview() {
- MyApplicationTheme {
- Greeting("Android")
+ .fillMaxSize()
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+ Text(
+ text = "H264 缂栫爜鍣�",
+ style = MaterialTheme.typography.headlineMedium
+ )
+
+ Spacer(modifier = Modifier.height(32.dp))
+
+ Button(
+ onClick = onStartH264Click,
+ enabled = !isRunning,
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(56.dp)
+ ) {
+ Text("鍚姩 H264")
+ }
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Button(
+ onClick = onStopH264Click,
+ enabled = isRunning,
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(56.dp),
+ colors = ButtonDefaults.buttonColors(
+ containerColor = MaterialTheme.colorScheme.error
+ )
+ ) {
+ Text("鍋滄 H264")
+ }
+
+ Spacer(modifier = Modifier.height(32.dp))
+
+ if (isRunning) {
+ Text(
+ text = "缂栫爜鍣ㄨ繍琛屼腑...",
+ style = MaterialTheme.typography.bodyMedium,
+ color = MaterialTheme.colorScheme.primary
+ )
+ }
}
}
\ No newline at end of file
--
Gitblit v1.8.0