diff --git a/QtScrcpy/device/device.cpp b/QtScrcpy/device/device.cpp index ff05964..a91c4fd 100644 --- a/QtScrcpy/device/device.cpp +++ b/QtScrcpy/device/device.cpp @@ -197,7 +197,6 @@ void Device::startServer() //m_server->start("192.168.0.174:5555", 27183, m_maxSize, m_bitRate, ""); // only one devices, serial can be null // mark: crop input format: "width:height:x:y" or - for no crop, for example: "100:200:0:0" - // sendFrameMeta for recorder mp4 Server::ServerParams params; params.serial = m_params.serial; params.localPort = m_params.localPort; @@ -205,7 +204,6 @@ void Device::startServer() params.bitRate = m_params.bitRate; params.maxFps = m_params.maxFps; params.crop = "-"; - params.sendFrameMeta = m_recorder ? true : false; params.control = true; params.useReverse = m_params.useReverse; m_server->start(params); diff --git a/QtScrcpy/device/recorder/recorder.cpp b/QtScrcpy/device/recorder/recorder.cpp index f8ee961..0cc6a61 100644 --- a/QtScrcpy/device/recorder/recorder.cpp +++ b/QtScrcpy/device/recorder/recorder.cpp @@ -105,12 +105,23 @@ void Recorder::close() bool Recorder::write(AVPacket *packet) { if (!m_headerWritten) { + if (packet->pts != AV_NOPTS_VALUE) { + qCritical("The first packet is not a config packet"); + return false; + } bool ok = recorderWriteHeader(packet); if (!ok) { return false; } m_headerWritten = true; + return true; } + + if (packet->pts == AV_NOPTS_VALUE) { + // ignore config packets + return true; + } + recorderRescalePacket(packet); return av_write_frame(m_formatCtx, packet) >= 0; } @@ -154,9 +165,6 @@ bool Recorder::recorderWriteHeader(const AVPacket* packet) int ret = avformat_write_header(m_formatCtx, NULL); if (ret < 0) { qCritical("Failed to write header recorder file"); - free(extradata); - avio_close(m_formatCtx->pb); - avformat_free_context(m_formatCtx); return false; } return true; diff --git a/QtScrcpy/device/server/server.cpp b/QtScrcpy/device/server/server.cpp index cdc53c5..a4f3d96 100644 --- a/QtScrcpy/device/server/server.cpp +++ b/QtScrcpy/device/server/server.cpp @@ -142,7 +142,7 @@ bool Server::execute() } else { args << m_params.crop; } - args << (m_params.sendFrameMeta ? "true" : "false"); + args << "true"; // always send frame meta (packet boundaries + timestamp) args << (m_params.control ? "true" : "false"); // adb -s P7C0218510000537 shell CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / com.genymobile.scrcpy.Server 0 8000000 false diff --git a/QtScrcpy/device/server/server.h b/QtScrcpy/device/server/server.h index d3e5f36..33a13ba 100644 --- a/QtScrcpy/device/server/server.h +++ b/QtScrcpy/device/server/server.h @@ -29,7 +29,6 @@ public: quint32 bitRate = 8000000; // 视频比特率 quint32 maxFps = 60; // 视频最大帧率 QString crop = "-"; // 视频裁剪 - bool sendFrameMeta = false; // 是否发送mp4帧数据 bool control = true; // 安卓端是否接收键鼠控制 bool useReverse = true; // true:先使用adb reverse,失败后自动使用adb forward;false:直接使用adb forward };