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