Compare commits

..

No commits in common. "588d9de2b212ce6630718430ceecd8d05794625c" and "97d2a1fb08886efcbdbfdf0b59c6d1d6904db450" have entirely different histories.

12 changed files with 24 additions and 53 deletions

View File

@ -18,15 +18,10 @@ jobs:
with:
vcpkgDirectory: '${{github.workspace}}/vcpkg'
vcpkgTriplet: arm64-osx
# 2025.07.11
vcpkgGitCommitId: 'efcfaaf60d7ec57a159fc3110403d939bfb69729'
# 2024.06.01
vcpkgGitCommitId: '47364fbc300756f64f7876b549d9422d5f3ec0d3'
vcpkgArguments: 'openssl libsrtp[openssl] usrsctp'
- name: 安装指定 CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '3.30.5'
- name: 编译
uses: lukka/run-cmake@v3
with:

@ -1 +1 @@
Subproject commit 447e3b85f312f0558027d1f41c4334516c6ef643
Subproject commit 0658496d5fc7d238f41e10ea4d0a10113a8eed84

View File

@ -60,8 +60,6 @@ option(ENABLE_WEPOLL "Enable wepoll" ON)
option(ENABLE_VIDEOSTACK "Enable video stack" OFF)
option(DISABLE_REPORT "Disable report to report.zlmediakit.com" OFF)
option(USE_SOLUTION_FOLDERS "Enable solution dir supported" ON)
option(ENABLE_OBJCOPY "Enable use objcopy to generate debug info file" ON)
##############################################################################
# socket256k.0socket,使用系统内核默认值(设置为0仅对linux有效)
# Set the default buffer size of the socket to 256k. If set to 0, the default buffer size of the socket will not be set,
@ -201,8 +199,10 @@ if(UNIX)
set(COMPILE_OPTIONS_DEFAULT ${COMPILE_OPTIONS_DEFAULT} "-g3")
else()
find_program(OBJCOPY_FOUND objcopy)
if (OBJCOPY_FOUND AND ENABLE_OBJCOPY)
if (OBJCOPY_FOUND)
set(COMPILE_OPTIONS_DEFAULT ${COMPILE_OPTIONS_DEFAULT} "-g3")
else()
set(COMPILE_OPTIONS_DEFAULT ${COMPILE_OPTIONS_DEFAULT} "-g0")
endif()
endif()
elseif(WIN32)

View File

@ -84,8 +84,7 @@ if(MSVC)
endif()
#relase debug
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
if(UNIX AND ENABLE_OBJCOPY)
if(UNIX)
if("${CMAKE_BUILD_TYPE_LOWER}" STREQUAL "release")
find_program(OBJCOPY_FOUND objcopy)
if (OBJCOPY_FOUND)

View File

@ -391,7 +391,7 @@ Track::Ptr getTrackBySdp(const SdpTrack::Ptr &track) {
// If there is no sps/pps in the sdp, then it may be possible to recover the sps/pps in the subsequent rtp
return std::make_shared<H264Track>();
}
return std::make_shared<H264Track>(sps, pps, prefixSize(sps.data(), sps.size()), prefixSize(pps.data(), pps.size()));
return std::make_shared<H264Track>(sps, pps, 0, 0);
}
RtpCodec::Ptr getRtpEncoderByCodecId(uint8_t pt) {

View File

@ -392,10 +392,7 @@ Track::Ptr getTrackBySdp(const SdpTrack::Ptr &track) {
// If there is no sps/pps in the sdp, then it may be possible to recover sps/pps from the subsequent rtp
return std::make_shared<H265Track>();
}
return std::make_shared<H265Track>(vps, sps, pps,
prefixSize(vps.data(), vps.size()),
prefixSize(sps.data(), sps.size()),
prefixSize(pps.data(), pps.size()));
return std::make_shared<H265Track>(vps, sps, pps, 0, 0, 0);
}
RtpCodec::Ptr getRtpEncoderByCodecId(uint8_t pt) {

View File

@ -18,10 +18,7 @@ using namespace toolkit;
INSTANCE_IMP(SDLAudioDevice);
SDLAudioDevice::~SDLAudioDevice() {
if (_device) {
SDL_CloseAudioDevice(_device);
_device = 0;
}
SDL_CloseAudio();
}
SDLAudioDevice::SDLAudioDevice() {
@ -36,13 +33,9 @@ SDLAudioDevice::SDLAudioDevice() {
SDLAudioDevice *_this = (SDLAudioDevice *) userdata;
_this->onReqPCM((char *) stream, len);
};
_device = SDL_OpenAudioDevice(NULL, 0, &wanted_spec, &_audio_config, 0);
if (_device <= 0)
_device = SDL_OpenAudioDevice(NULL, 0, &wanted_spec, &_audio_config, SDL_AUDIO_ALLOW_ANY_CHANGE);
if (_device <= 0) {
throw std::runtime_error("SDL_OpenAudioDevice failed");
}
if (SDL_OpenAudioDevice(NULL, 0, &wanted_spec, &_audio_config, SDL_AUDIO_ALLOW_ANY_CHANGE) < 0) {
throw std::runtime_error("SDL_OpenAudioDevice failed");
}
InfoL << "actual audioSpec, " << "freq:" << _audio_config.freq
<< ", format:" << hex << _audio_config.format << dec
@ -58,7 +51,7 @@ SDLAudioDevice::SDLAudioDevice() {
void SDLAudioDevice::addChannel(AudioSRC *chn) {
lock_guard<recursive_mutex> lck(_channel_mtx);
if (_channels.empty()) {
SDL_PauseAudioDevice(_device, false);
SDL_PauseAudio(0);
}
chn->setOutputAudioConfig(_audio_config);
_channels.emplace(chn);
@ -68,7 +61,7 @@ void SDLAudioDevice::delChannel(AudioSRC *chn) {
lock_guard<recursive_mutex> lck(_channel_mtx);
_channels.erase(chn);
if (_channels.empty()) {
SDL_PauseAudioDevice(_device, true);
SDL_PauseAudio(true);
}
}

View File

@ -40,7 +40,6 @@ private:
void onReqPCM(char *stream, int len);
private:
SDL_AudioDeviceID _device;
std::shared_ptr<char> _play_buf;
SDL_AudioSpec _audio_config;
std::recursive_mutex _channel_mtx;

View File

@ -41,10 +41,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstanc, LPSTR lpCmdLine,
freopen_s(&stream, "CON", "r", stdin);//重定向输入流
freopen_s(&stream, "CON", "w", stdout);//重定向输入流
// 清除流缓冲区, 在win11上还是无法输出文字需要在加入如下代码
std::cin.clear();
std::cout.clear();
//3. 如果我们需要用到控制台窗口句柄可以调用FindWindow取得
HWND _consoleHwnd;
SetConsoleTitleA("test_player");//设置窗口名
@ -60,8 +56,8 @@ int main(int argc, char *argv[]) {
Logger::Instance().add(std::make_shared<ConsoleChannel>());
Logger::Instance().setWriter(std::make_shared<AsyncLogWriter>());
if (argc < 2) {
ErrorL << "\r\n测试方法:./test_player rtxp_url [rtp_type] [play_track]\r\n"
if (argc < 3) {
ErrorL << "\r\n测试方法:./test_player rtxp_url rtp_type\r\n"
<< "例如:./test_player rtsp://admin:123456@127.0.0.1/live/0 0\r\n";
return 0;
}
@ -100,15 +96,18 @@ int main(int argc, char *argv[]) {
FFmpegSwr::Ptr swr;
decoder->setOnDecode([audio_player, swr](const FFmpegFrame::Ptr &frame) mutable {
int chs = 0;
if (!swr) {
# if LIBAVCODEC_VERSION_INT >= FF_CODEC_VER_7_1
swr = std::make_shared<FFmpegSwr>(AV_SAMPLE_FMT_S16, &(frame->get()->ch_layout), frame->get()->sample_rate);
chs = (&frame->get()->ch_layout)->nb_channels;
#else
swr = std::make_shared<FFmpegSwr>(AV_SAMPLE_FMT_S16, frame->get()->channels, frame->get()->channel_layout, frame->get()->sample_rate);
chs = frame->get()->channels;
#endif
}
auto pcm = swr->inputFrame(frame);
auto len = pcm->get()->nb_samples * pcm->getChannels() * av_get_bytes_per_sample((enum AVSampleFormat)pcm->get()->format);
auto len = pcm->get()->nb_samples * chs * av_get_bytes_per_sample((enum AVSampleFormat)pcm->get()->format);
audio_player->playPCM((const char *)(pcm->get()->data[0]), MIN(len, frame->get()->linesize[0]));
});
audioTrack->addDelegate([decoder](const Frame::Ptr &frame) { return decoder->inputFrame(frame, false, true); });
@ -116,11 +115,10 @@ int main(int argc, char *argv[]) {
});
player->setOnShutdown([](const SockException &ex) { WarnL << "play shutdown: " << ex.what(); });
(*player)[Client::kRtpType] = atoi(argv[2]);
// 不等待track ready再回调播放成功事件这样可以加快秒开速度
(*player)[Client::kWaitTrackReady] = false;
if (argc > 2) {
(*player)[Client::kRtpType] = atoi(argv[2]);
}
if (argc > 3) {
(*player)[Client::kPlayTrack] = atoi(argv[3]);
}

View File

@ -69,7 +69,7 @@ install(TARGETS MediaServer DESTINATION ${INSTALL_PATH_RUNTIME})
#relase debug
string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
if(UNIX AND ENABLE_OBJCOPY)
if(UNIX)
if("${CMAKE_BUILD_TYPE_LOWER}" STREQUAL "release")
find_program(OBJCOPY_FOUND objcopy)
if (OBJCOPY_FOUND)

View File

@ -247,15 +247,6 @@ void FFmpegFrame::fillPicture(AVPixelFormat target_format, int target_width, int
av_image_fill_arrays(_frame->data, _frame->linesize, (uint8_t *) _data, target_format, target_width, target_height, 32);
}
int FFmpegFrame::getChannels() const {
if (!_frame) return 0;
#if LIBAVCODEC_VERSION_INT >= FF_CODEC_VER_7_1
return _frame->ch_layout.nb_channels;
#else
return _frame->channels;
#endif
}
///////////////////////////////////////////////////////////////////////////
template<bool decoder = true>

View File

@ -44,7 +44,6 @@ public:
AVFrame *get() const;
void fillPicture(AVPixelFormat target_format, int target_width, int target_height);
int getChannels() const;
private:
char *_data = nullptr;