diff --git a/lib/talk/starChart/constant/talk_constant.dart b/lib/talk/starChart/constant/talk_constant.dart index e6f72519..ff8a6727 100644 --- a/lib/talk/starChart/constant/talk_constant.dart +++ b/lib/talk/starChart/constant/talk_constant.dart @@ -13,7 +13,7 @@ class TalkConstant { audioType: [AudioTypeE.G711], ); static TalkExpectReq H264Expect = TalkExpectReq( - videoType: [VideoTypeE.H264_720P], + videoType: [VideoTypeE.H264], audioType: [AudioTypeE.G711], ); static TalkExpectReq H264_720P_Expect = TalkExpectReq( diff --git a/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart b/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart index 568da186..5aa2ea36 100644 --- a/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart +++ b/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart @@ -81,9 +81,9 @@ class TalkViewNativeDecodeLogic extends BaseGetXController { state.isLoading.value = true; // 创建解码器配置 final config = VideoDecoderConfig( - width: 1280, + width: 864, // 实际视频宽度 - height: 720, + height: 480, codecType: 'h264', ); // 初始化解码器并获取textureId @@ -209,7 +209,8 @@ class TalkViewNativeDecodeLogic extends BaseGetXController { final TalkDataH264Frame_FrameTypeE frameType = frameMap['frameType']; final int frameSeq = frameMap['frameSeq']; final int frameSeqI = frameMap['frameSeqI']; - int pts = DateTime.now().millisecondsSinceEpoch; + int pts = frameMap['pts']; + // int pts = DateTime.now().millisecondsSinceEpoch; // if (frameType == TalkDataH264Frame_FrameTypeE.P) { // // 以frameSeqI为I帧序号标识 @@ -224,12 +225,13 @@ class TalkViewNativeDecodeLogic extends BaseGetXController { // 实时写入h264文件 // _appendH264FrameToFile(frameData, frameType); - final timestamp = DateTime.now().microsecondsSinceEpoch; + // final timestamp = DateTime.now().millisecondsSinceEpoch; + // final timestamp64 = timestamp is int ? timestamp : timestamp.toInt(); VideoDecodePlugin.sendFrame( frameData: frameData, frameType: frameType == TalkDataH264Frame_FrameTypeE.I ? 0 : 1, frameSeq: frameSeq, - timestamp: timestamp, + timestamp: pts, splitNalFromIFrame: true, refIFrameSeq: frameSeqI, ); diff --git a/lib/talk/starChart/views/native/talk_view_native_decode_state.dart b/lib/talk/starChart/views/native/talk_view_native_decode_state.dart index e3408141..9528671c 100644 --- a/lib/talk/starChart/views/native/talk_view_native_decode_state.dart +++ b/lib/talk/starChart/views/native/talk_view_native_decode_state.dart @@ -109,8 +109,8 @@ class TalkViewNativeDecodeState { // H264帧缓冲区相关 final List> h264FrameBuffer = >[]; // H264帧缓冲区,存储帧数据和类型 - final int maxFrameBufferSize = 15; // 最大缓冲区大小 - final int targetFps = 25; // 目标解码帧率,只是为了快速填充native的缓冲区 + final int maxFrameBufferSize = 30; // 最大缓冲区大小 + final int targetFps = 30; // 目标解码帧率,只是为了快速填充native的缓冲区 Timer? frameProcessTimer; // 帧处理定时器 bool isProcessingFrame = false; // 是否正在处理帧 int lastProcessedTimestamp = 0; // 上次处理帧的时间戳