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