播放视频时同时播放音频
This commit is contained in:
8
main.cc
8
main.cc
@@ -29,8 +29,8 @@ int InitAudio(SDL_Window* window, SDL_Renderer* renderer, const char* targetFile
|
||||
InitDecoder(targetFilePath, param);
|
||||
window = SDL_CreateWindow("mp", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
|
||||
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||
std::jthread(RequestAudioPacket, std::ref(param)).detach();
|
||||
}
|
||||
std::jthread(RequestAudioPacket, std::ref(param)).detach();
|
||||
SDL_AudioSpec des;
|
||||
des.freq = param.audioParam.codecCtx->sample_rate;
|
||||
des.channels = param.audioParam.codecCtx->ch_layout.nb_channels;
|
||||
@@ -55,7 +55,7 @@ int InitVideo(SDL_Window*& window, const char* targetFilepath, MediaParam& param
|
||||
param.audioParam.isVideo = true;
|
||||
InitAudio(nullptr, nullptr, nullptr, param);
|
||||
//FIX: when app exited, the fmtCtx was freed, so need notify decode thread to stop decode and exit.
|
||||
std::jthread(RequestVideoPacket, std::ref(param)).detach();
|
||||
std::jthread(RequestMediaPacket, std::ref(param)).detach();
|
||||
std::jthread(RequestVideoFrame, std::ref(param)).detach();
|
||||
const int client_width = param.videoParam.width / 2;
|
||||
const int client_height = param.videoParam.height / 2;
|
||||
@@ -221,7 +221,7 @@ int main(int argc, char** argv)
|
||||
case FileType::VIDEO:
|
||||
{
|
||||
InitVideo(window, targetFilepath, mediaParam, openglVideoParam, shaderService);
|
||||
const auto stream_frame_rate = mediaParam.fmtCtx->streams[mediaParam.videoParam.videoStreamIndex]->avg_frame_rate;
|
||||
const auto stream_frame_rate = mediaParam.videoParam.stream->avg_frame_rate;
|
||||
framerate = static_cast<double>(stream_frame_rate.den) / stream_frame_rate.num;
|
||||
break;
|
||||
}
|
||||
@@ -272,7 +272,7 @@ int main(int argc, char** argv)
|
||||
case FileType::VIDEO:
|
||||
OpenglRenderVideo(mediaParam, openglVideoParam, shaderService);
|
||||
SDL_GL_SwapWindow(window);
|
||||
std::this_thread::sleep_until(current_time + std::chrono::milliseconds(30));
|
||||
std::this_thread::sleep_until(current_time + std::chrono::milliseconds(static_cast<int>(framerate * 1000)));
|
||||
current_time = std::chrono::system_clock::now();
|
||||
break;
|
||||
case FileType::IMG:
|
||||
|
||||
Reference in New Issue
Block a user