mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 12:37:09 +08:00
Merge branch 'master' of github.com:ZLMediaKit/ZLMediaKit
This commit is contained in:
commit
caf6ddf554
26
.github/ISSUE_TEMPLATE/bug--.md
vendored
26
.github/ISSUE_TEMPLATE/bug--.md
vendored
@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
name: bug反馈
|
|
||||||
about: 反馈zlmediakit代码本身的bug
|
|
||||||
title: "[BUG]"
|
|
||||||
labels: bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**bug现象**
|
|
||||||
- bug产生时服务器的异常行为(例如: 崩溃/无法访问/丢包花屏)
|
|
||||||
- bug产生时,打印的上下文日志(可以截图或粘贴文本)
|
|
||||||
- 调试core文件时,崩溃触发点的函数调用栈(可以截图或粘贴文本)
|
|
||||||
|
|
||||||
**bug产生时的使用场景**
|
|
||||||
- 产生bug时,您正在使用zlm的什么功能模块?
|
|
||||||
|
|
||||||
**bug是否可以复现,怎么复现**
|
|
||||||
- 请描述bug复现时的操作步骤
|
|
||||||
|
|
||||||
**zlm代码git commit hash值**
|
|
||||||
- git log查看
|
|
||||||
|
|
||||||
**操作系统环境**
|
|
||||||
- 什么类型的操作系统,32位,64位?
|
|
||||||
- 什么cpu类型?
|
|
80
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
80
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
name: bug 反馈
|
||||||
|
about: 反馈 ZLMediaKit 代码本身的 bug
|
||||||
|
title: "[BUG]: <BUG 现象描述>"
|
||||||
|
labels: bug
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
请仔细阅读相关注释提示, 请务必根据提示填写相关信息.
|
||||||
|
1. 信息不完整会影响问题的解决速度.
|
||||||
|
1. 乱七八糟的渲染格式也会影响开发者心情, 同样会影响问题的解决. 提交前请务必点击 Preview/预览下反馈的显示效果.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
markdown 语法参考:
|
||||||
|
* https://docs.github.com/cn/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
|
||||||
|
* https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
|
||||||
|
-->
|
||||||
|
|
||||||
|
### 现象描述
|
||||||
|
|
||||||
|
<!--
|
||||||
|
在使用什么功能产生的问题? 其异常表现是什么?
|
||||||
|
如: 在测试 WebRTC 功能时, 使用 Chrome 浏览器访问 ZLMediait 自带网页播放 FFmpeg 以 RTSP 协议推送的图像有卡顿/花屏.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### 如何复现?
|
||||||
|
|
||||||
|
<!--
|
||||||
|
明确的复现步骤对快速解决问题极有帮助.
|
||||||
|
格式参考:
|
||||||
|
1. 首先 ...
|
||||||
|
1. 然后 ...
|
||||||
|
1. 期望 ..., 结果 ...
|
||||||
|
-->
|
||||||
|
|
||||||
|
### 相关日志或截图
|
||||||
|
|
||||||
|
<!--
|
||||||
|
由于日志通长较长, 建议将日志信息填写到下面的 "日志内容..."
|
||||||
|
|
||||||
|
如果是程序异常崩溃/终止, 相关调用栈信息也极为有用, 可复制下面的格式, 添加相关调用栈信息.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>展开查看详细日志</summary>
|
||||||
|
<pre>
|
||||||
|
日志内容...
|
||||||
|
</pre>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 配置
|
||||||
|
|
||||||
|
<!--
|
||||||
|
部分常见问题是由于配置错误导致的, 建议仔细阅读配置文件中的注释信息
|
||||||
|
-->
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>展开查看详细配置</summary>
|
||||||
|
<pre>
|
||||||
|
配置内容...
|
||||||
|
</pre>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 各种环境信息
|
||||||
|
|
||||||
|
<!--
|
||||||
|
请填写相关环境信息, 详细的环境信息有助于快速复现定位问题.
|
||||||
|
|
||||||
|
* 代码提交记录, 可使用命令 `git rev-parse HEAD` 进行查看.
|
||||||
|
* 操作系统及版本, 如: Windows 10, CentOS 7, ...
|
||||||
|
* 硬件信息, 如: Intel, AMD, ARM, 飞腾, 龙芯, ...
|
||||||
|
-->
|
||||||
|
|
||||||
|
* **代码提交记录/git commit hash**:
|
||||||
|
* **操作系统及版本**:
|
||||||
|
* **硬件信息**:
|
||||||
|
* **其他需要补充的信息**:
|
@ -33,10 +33,10 @@ std::shared_ptr<AVPacket> alloc_av_packet(){
|
|||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
template<bool decoder = true, typename ...ARGS>
|
template<bool decoder = true, typename ...ARGS>
|
||||||
AVCodec *getCodec(ARGS ...names);
|
const AVCodec *getCodec(ARGS ...names);
|
||||||
|
|
||||||
template<bool decoder = true>
|
template<bool decoder = true>
|
||||||
AVCodec *getCodec(const char *name) {
|
const AVCodec *getCodec(const char *name) {
|
||||||
auto codec = decoder ? avcodec_find_decoder_by_name(name) : avcodec_find_encoder_by_name(name);
|
auto codec = decoder ? avcodec_find_decoder_by_name(name) : avcodec_find_encoder_by_name(name);
|
||||||
if (codec) {
|
if (codec) {
|
||||||
InfoL << (decoder ? "got decoder:" : "got encoder:") << name;
|
InfoL << (decoder ? "got decoder:" : "got encoder:") << name;
|
||||||
@ -45,7 +45,7 @@ AVCodec *getCodec(const char *name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<bool decoder = true>
|
template<bool decoder = true>
|
||||||
AVCodec *getCodec(enum AVCodecID id) {
|
const AVCodec *getCodec(enum AVCodecID id) {
|
||||||
auto codec = decoder ? avcodec_find_decoder(id) : avcodec_find_encoder(id);
|
auto codec = decoder ? avcodec_find_decoder(id) : avcodec_find_encoder(id);
|
||||||
if (codec) {
|
if (codec) {
|
||||||
InfoL << (decoder ? "got decoder:" : "got encoder:") << avcodec_get_name(id);
|
InfoL << (decoder ? "got decoder:" : "got encoder:") << avcodec_get_name(id);
|
||||||
@ -54,7 +54,7 @@ AVCodec *getCodec(enum AVCodecID id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<bool decoder = true, typename First, typename ...ARGS>
|
template<bool decoder = true, typename First, typename ...ARGS>
|
||||||
AVCodec *getCodec(First first, ARGS ...names) {
|
const AVCodec *getCodec(First first, ARGS ...names) {
|
||||||
auto codec = getCodec<decoder>(names...);
|
auto codec = getCodec<decoder>(names...);
|
||||||
if (codec) {
|
if (codec) {
|
||||||
return codec;
|
return codec;
|
||||||
@ -139,9 +139,11 @@ FFmpegFrame::Ptr FFmpegSwr::inputFrame(const FFmpegFrame::Ptr &frame) {
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
FFmpegDecoder::FFmpegDecoder(const Track::Ptr &track) {
|
FFmpegDecoder::FFmpegDecoder(const Track::Ptr &track) {
|
||||||
|
#if (LIBAVCODEC_VERSION_MAJOR < 58)
|
||||||
avcodec_register_all();
|
avcodec_register_all();
|
||||||
AVCodec *codec = nullptr;
|
#endif
|
||||||
AVCodec *codec_default = nullptr;
|
const AVCodec *codec = nullptr;
|
||||||
|
const AVCodec *codec_default = nullptr;
|
||||||
switch (track->getCodecId()) {
|
switch (track->getCodecId()) {
|
||||||
case CodecH264:
|
case CodecH264:
|
||||||
codec_default = getCodec(AV_CODEC_ID_H264);
|
codec_default = getCodec(AV_CODEC_ID_H264);
|
||||||
@ -181,7 +183,9 @@ FFmpegDecoder::FFmpegDecoder(const Track::Ptr &track) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//保存AVFrame的引用
|
//保存AVFrame的引用
|
||||||
|
#ifdef FF_API_OLD_ENCDEC
|
||||||
_context->refcounted_frames = 1;
|
_context->refcounted_frames = 1;
|
||||||
|
#endif
|
||||||
_context->flags |= AV_CODEC_FLAG_LOW_DELAY;
|
_context->flags |= AV_CODEC_FLAG_LOW_DELAY;
|
||||||
_context->flags2 |= AV_CODEC_FLAG2_FAST;
|
_context->flags2 |= AV_CODEC_FLAG2_FAST;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user