package com.ruoyi.bd.socket.wsctl; import com.ruoyi.bd.service.impl.FFMpegService; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.Payload; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @RestController public class AudioSocketServer { @Resource private FFMpegService ffmpegService; private final ExecutorService executorService = Executors.newSingleThreadExecutor(); private static final String TEMP_FILE_PREFIX = "uploaded_audio_%s"; @MessageMapping("/audio/stream") public void handleSendMessage(@Payload byte[] message, MessageHeaders messageHeaders) throws IOException { // String sessionId = (String) headerAccessor.getSessionAttributes().get("HTTP_SESSION_ID"); Map map = messageHeaders.get("nativeHeaders", Map.class); // System.out.println("sessionId = " + message + ",map" + MapUtil.get(map, "camera", ArrayList.class).get(0)); // 使用 sessionId 处理消息 // 可以通过 sessionManager 获取用户信息 byte[] audioData = message; File tempFile = File.createTempFile(String.format(TEMP_FILE_PREFIX, "1111"), ".g711"); try (FileOutputStream fos = new FileOutputStream(tempFile)) { fos.write(audioData); ffmpegService.writeToRtsp(tempFile.getAbsolutePath()); } catch (IOException | InterruptedException e) { e.printStackTrace(); } finally { // tempFile.delete(); } // executorService.submit(() -> { // try { //// System.out.println("tempFile.getAbsolutePath()" + tempFile.getAbsolutePath()); //// ffmpegService.writeToRtsp(tempFile.getAbsolutePath()); //// } catch (IOException | InterruptedException e) { //// e.printStackTrace(); //// } finally { //// tempFile.delete(); //// } // }); } }