mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-14 12:05:58 +08:00
各协议全面支持vp8/vp9/av1编码,ertmp新增支持opus编码 (#4498)
实现功能: - rtp 增加vp8,vp9和av1编码支持 - 实现MP4录像所需的extra_data接口 - 扩展rtmp增加对opus、vp8、vp9和av1的支持 已知问题: - 开启enhance rtmp后,ffmpeg暂时不支持播放vp8编码格式,其他格式的支持 - vp9和av1开始播放时容易遇到卡顿情况,过几秒后好了,原因暂时未知 --------- Co-authored-by: xia-chu <771730766@qq.com>
This commit is contained in:
@@ -13,18 +13,35 @@
|
||||
#include "Extension/Factory.h"
|
||||
#include "Extension/CommonRtp.h"
|
||||
#include "Extension/CommonRtmp.h"
|
||||
|
||||
#include "riff-acm.h"
|
||||
using namespace std;
|
||||
using namespace toolkit;
|
||||
|
||||
namespace mediakit {
|
||||
|
||||
Track::Ptr G711Track::clone() const {
|
||||
return std::make_shared<G711Track>(*this);
|
||||
Buffer::Ptr G711Track::getExtraData() const {
|
||||
struct wave_format_t wav = {0};
|
||||
wav.wFormatTag = getCodecId() == CodecG711A ? WAVE_FORMAT_ALAW : WAVE_FORMAT_MULAW;
|
||||
wav.nChannels = getAudioChannel();
|
||||
wav.nSamplesPerSec = getAudioSampleRate();
|
||||
wav.nAvgBytesPerSec = 8000;
|
||||
wav.nBlockAlign = 1;
|
||||
wav.wBitsPerSample = 8;
|
||||
auto buff = BufferRaw::create(18 + wav.cbSize);
|
||||
wave_format_save(&wav, (uint8_t*)buff->data(), buff->size());
|
||||
return buff;
|
||||
}
|
||||
|
||||
Sdp::Ptr G711Track::getSdp(uint8_t payload_type) const {
|
||||
return std::make_shared<DefaultSdp>(payload_type, *this);
|
||||
void G711Track::setExtraData(const uint8_t *data, size_t size) {
|
||||
struct wave_format_t wav;
|
||||
if (wave_format_load(data, size, &wav) > 0) {
|
||||
// Successfully parsed Opus header
|
||||
_sample_rate = wav.nSamplesPerSec;
|
||||
_channels = wav.nChannels;
|
||||
_codecid = (wav.wFormatTag == WAVE_FORMAT_ALAW) ? CodecG711A : CodecG711U;
|
||||
} else {
|
||||
WarnL << "Failed to parse G711 extra data";
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
Reference in New Issue
Block a user