Comments (3)
你既然是要在mp4录制时截图,那么你可以在mp4录制相关的代码里面截图,
具体代码位置为 Mp4Maker.cpp第246行 :
void Mp4Maker::onTrackFrame(const Frame::Ptr &frame) {
switch (frame->getCodecId()){
case CodecH264:{
inputH264(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize(),frame->stamp());
}
break;
case CodecAAC:{
inputAAC(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize(),frame->stamp());
}
break;
default:
break;
}
}
你可以在输入H264时,提取I帧,然后解码保存截图:
//在Mp4Maker类中新增 List<Frame::Ptr> _frameCached 成员变量
void Mp4Maker::onTrackFrame(const Frame::Ptr &frame) {
switch (frame->getCodecId()){
case CodecH264:{
//这里的代码逻辑是让SPS、PPS、IDR这些时间戳相同的帧打包到一起当做一个帧处理,
if (!_frameCached.empty() && _frameCached.back()->dts() != frame->dts()) {
Frame::Ptr back = _frameCached.back();
Buffer::Ptr merged_frame = back;
if(_frameCached.size() != 1){
string merged;
_frameCached.for_each([&](const Frame::Ptr &frame){
merged.append(frame->data(),frame->size());
});
merged_frame = std::make_shared<BufferString>(std::move(merged));
}
//这里是合并sps pps idr帧的复合帧,可以用于解码成yuv,然后编码成jpeg保存截图
// 数据指针:merged_frame->data(), 数据大小:merged_frame->size()
_frameCached.clear();
}
_frameCached.emplace_back(frame);
inputH264(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize(),frame->stamp());
}
break;
case CodecAAC:{
inputAAC(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize(),frame->stamp());
}
break;
default:
break;
}
}
from zlmediakit.
就是想知道 解码保存截图, 这个是怎么做的?
from zlmediakit.
范例代码都帮你写好了 已经提取到sps、pps、idr帧,剩下的解码成yuv再编码成JPEG你自己不会吗?
不会的话,那你就没必要继续下一步的讨论了
from zlmediakit.
Related Issues (20)
- [技术咨询] hls 和 hls.fmp4 在按需生成时的处理逻辑 HOT 4
- 启动突然报错了,之前都是可以的。 HOT 1
- [BUG] docker 最新镜像运行后提示秘钥错误 HOT 7
- [编译问题] 编译webrtc报错 HOT 6
- [技术咨询] 咨询描述(必填) 国标28181语音对讲在win10上编译的最新版本ZL可以对讲,在linux系统上遇到两款设备不兼容,startsendRTPforPassive这个接口win10和linux上底层网络库有什么区别吗 HOT 6
- Android平台使用mk api 去推流到Android本地的server,尝试了很久没有成功, 一直没有查到ZLMediaKit server有相应的视频流 HOT 5
- [技术咨询] webrtc播放失败 HOT 3
- webrtc点播失败,相应Assertion failed: (!media.empty()), function checkValid, file /opt/ZLMediaKit/webrtc/Sdp.cpp, line 1326. HOT 2
- live.flv 有音频吗? HOT 3
- wvp的页面webrtc一直是黑的,报错Assertion failed: (!media.empty()) HOT 17
- [技术咨询] 关于掉线的视频流,ZLM后台一直拉取,是否会影响性能? HOT 3
- [技术咨询] 大华解码器RTSP播放异常 HOT 8
- [技术咨询] wiki中的Restful接口文档更新 HOT 2
- [BUG] 点播串流 HOT 2
- [技术咨询] 接收国标设备rtp视频转码会消耗多少性能 HOT 4
- ZLM占用内存达13G HOT 6
- [技术咨询] wmv格式视频的点播功能 HOT 2
- 多个摄像头webrtc播放,部分摄像头能播放部分不能播放
- nginx of Docker Image of ZLMediaKit has high risk issue, can upgrade the image? HOT 1
- [技术咨询] 怎么才能利用ZLMEDIAKIT,对多个RTSP视频流读取并提取帧。 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from zlmediakit.