Assertion failed[vlc_atomic.h]
#include <iostream>
#include <type_traits>
#include <memory>
using ssize_t = std::make_unsigned_t<std::size_t>;
#include <vlc/vlc.h>
struct Player {
std::shared_ptr<libvlc_instance_t> inst;
std::shared_ptr<libvlc_media_t> media;
std::shared_ptr<libvlc_media_player_t> player;
libvlc_event_manager_t* player_event = nullptr;
libvlc_event_manager_t* media_event = nullptr;
Player(){
inst = std::shared_ptr<libvlc_instance_t>{ libvlc_new(0, nullptr), libvlc_release };
player = std::shared_ptr<libvlc_media_player_t>{
libvlc_media_player_new(inst.get()),
libvlc_media_player_release
};
player_event = libvlc_media_player_event_manager(player.get());
libvlc_event_attach(player_event, libvlc_MediaPlayerBuffering, &Player::event_cb, this);
libvlc_event_attach(player_event, libvlc_MediaPlayerPlaying, &Player::event_cb, this);
libvlc_event_attach(player_event, libvlc_MediaPlayerEncounteredError, &Player::event_cb, this);
libvlc_media_player_set_media(player.get(), nullptr);
libvlc_audio_set_mute(player.get(), false);
for (int i = 0; i < 2; ++i) {
this->media =
std::shared_ptr<libvlc_media_t>{
libvlc_media_new_location(inst.get(), R"(https://www.youtube.com/watch?v=_czL6GF0A3g)"),
libvlc_media_release,
};
media_event = libvlc_media_event_manager(media.get());
libvlc_event_attach(media_event, libvlc_MediaParsedChanged, &Player::event_cb, this);
libvlc_media_parse_with_options(media.get(), libvlc_media_parse_network, 0);
}
}
~Player() {
libvlc_event_detach(player_event, libvlc_MediaPlayerBuffering, &Player::event_cb, this);
libvlc_event_detach(player_event, libvlc_MediaPlayerPlaying, &Player::event_cb, this);
libvlc_event_detach(player_event, libvlc_MediaPlayerEncounteredError, &Player::event_cb, this);
libvlc_event_detach(media_event, libvlc_MediaParsedChanged, &Player::event_cb, this);
}
static void event_cb(const struct libvlc_event_t* p_event, void* p_data) {
Player* obj = (Player*)p_data;
switch (p_event->type) {
case libvlc_MediaPlayerBuffering:break;
case libvlc_MediaPlayerPlaying:break;
case libvlc_MediaPlayerEncounteredError:break;
case libvlc_MediaParsedChanged:
{
switch (p_event->u.media_parsed_changed.new_status) {
case libvlc_media_parsed_status_skipped:
{
libvlc_media_player_set_media(obj->player.get(), obj->media.get());
libvlc_media_player_play(obj->player.get());
break;
}
case libvlc_media_parsed_status_done:
{
if (libvlc_media_player_get_media(obj->player.get())) break;
auto plist = libvlc_media_subitems(obj->media.get());
auto cnt = libvlc_media_list_count(plist);
auto m = std::shared_ptr<libvlc_media_t>{
cnt > 0 ? libvlc_media_list_item_at_index(plist, 0) : obj->media.get(),
libvlc_media_release
};
libvlc_media_list_release(plist);
libvlc_media_parse_with_options(m.get(), libvlc_media_parse_network, 0);
libvlc_media_player_set_media(obj->player.get(), m.get());
libvlc_media_player_play(obj->player.get());
break;
}
default:
break;
}
}
}
}
};
int main(){
setlocale(LC_ALL, "");
std::cout << "VLC media player " << libvlc_get_version() << "(revision "<< libvlc_get_changeset() << ")\n";
Player player{};
std::cin.get();
return EXIT_SUCCESS;
}
result: VLC media player 3.0.17.4 Vetinari(revision 3.0.17.4-0-gc650ce1a) [093285d8] avcodec decoder: Using D3D11VA (Intel(R) HD Graphics 4600, vendor 8086(Intel), device 416, revision 6) for hardware decoding
#include <iostream>
#include <type_traits>
#include <memory>
using ssize_t = std::make_unsigned_t<std::size_t>;
#include <vlc/vlc.h>
struct Player {
std::shared_ptr<libvlc_instance_t> inst;
std::shared_ptr<libvlc_media_t> media;
std::shared_ptr<libvlc_media_player_t> player;
libvlc_event_manager_t* player_event = nullptr;
libvlc_event_manager_t* media_event = nullptr;
Player(){
inst = std::shared_ptr<libvlc_instance_t>{ libvlc_new(0, nullptr), libvlc_release };
player = std::shared_ptr<libvlc_media_player_t>{
libvlc_media_player_new(inst.get()),
libvlc_media_player_release
};
player_event = libvlc_media_player_event_manager(player.get());
libvlc_event_attach(player_event, libvlc_MediaPlayerBuffering, &Player::event_cb, this);
libvlc_event_attach(player_event, libvlc_MediaPlayerPlaying, &Player::event_cb, this);
libvlc_event_attach(player_event, libvlc_MediaPlayerEncounteredError, &Player::event_cb, this);
libvlc_media_player_set_media(player.get(), nullptr);
libvlc_audio_set_mute(player.get(), false);
for (int i = 0; i < 2; ++i) {
this->media =
std::shared_ptr<libvlc_media_t>{
libvlc_media_new_location(R"(https://www.youtube.com/watch?v=_czL6GF0A3g)"),
libvlc_media_release,
};
media_event = libvlc_media_event_manager(media.get());
libvlc_event_attach(media_event, libvlc_MediaParsedChanged, &Player::event_cb, this);
libvlc_media_parse_request(inst.get(), media.get(), libvlc_media_parse_network, 0);
}
}
~Player() {
libvlc_event_detach(player_event, libvlc_MediaPlayerBuffering, &Player::event_cb, this);
libvlc_event_detach(player_event, libvlc_MediaPlayerPlaying, &Player::event_cb, this);
libvlc_event_detach(player_event, libvlc_MediaPlayerEncounteredError, &Player::event_cb, this);
libvlc_event_detach(media_event, libvlc_MediaParsedChanged, &Player::event_cb, this);
}
static void event_cb(const struct libvlc_event_t* p_event, void* p_data) {
Player* obj = (Player*)p_data;
switch (p_event->type) {
case libvlc_MediaPlayerBuffering:break;
case libvlc_MediaPlayerPlaying:break;
case libvlc_MediaPlayerEncounteredError:break;
case libvlc_MediaParsedChanged:
{
switch (p_event->u.media_parsed_changed.new_status) {
case libvlc_media_parsed_status_skipped:
{
libvlc_media_player_set_media(obj->player.get(), obj->media.get());
libvlc_media_player_play(obj->player.get());
break;
}
case libvlc_media_parsed_status_done:
{
if (libvlc_media_player_get_media(obj->player.get())) break;
auto plist = libvlc_media_subitems(obj->media.get());
auto cnt = libvlc_media_list_count(plist);
auto m = std::shared_ptr<libvlc_media_t>{
cnt > 0 ? libvlc_media_list_item_at_index(plist, 0) : obj->media.get(),
libvlc_media_release
};
libvlc_media_list_release(plist);
libvlc_media_parse_request(obj->inst.get(), m.get(), libvlc_media_parse_network, 0);
libvlc_media_player_set_media(obj->player.get(), m.get());
libvlc_media_player_play(obj->player.get());
break;
}
default:break;
}
}
}
}
};
int main(){
setlocale(LC_ALL, "");
std::cout << "VLC media player " << libvlc_get_version() << "(revision "<< libvlc_get_changeset() << ")\n";
Player player{};
std::cin.get();
return EXIT_SUCCESS;
}
result:
VLC media player 4.0.0-dev Otto Chriek(revision 4.0.0-dev-20104-g9b327b86a9)
[00bef188] main generic error: cannot load plug-in D:\near\engin\dev2019\SDK\LibVLC\demo\vlc-4.0.0-dev/plugins\video_output\libplacebo_vk_plugin.dll: 吏?뺣맂 紐⑤뱢??李얠쓣 ???놁뒿?덈떎. (error 126)
[00bef188] main generic error: cannot load plug-in D:\near\engin\dev2019\SDK\LibVLC\demo\vlc-4.0.0-dev/plugins\video_output\libvk_win32_plugin.dll: 吏?뺣맂 紐⑤뱢??李얠쓣 ???놁뒿?덈떎. (error 126)
Assertion failed: prev, file /builds/videolan/vlc/extras/package/win32/../../../include/vlc_atomic.h, line 59
D:\near\engin\dev2019\SDK\LibVLC\demo\S1\Debug\S1.exe (process 7220) exited with code -1073741819. Press any key to close this window . . .
same coding different results