簡體   English   中英

在發布模式下崩潰,在調試模式下遇到錯誤

[英]Crashing in Release Mode and error encounter in Debug Mode

這是我關於堆棧溢出的第一個問題,所以請回答我。

我正在使用帶有Qt 4.8.5,C ++和Cmake 2.8的窗口7的libvlc庫2.1.5win64來構建一個項目,以rtsp協議從VLC服務器捕獲流視頻。 我非常嚴重地面臨兩個問題。

1:我的程序在發布模式下正在擴展.exe文件,但當它在調試模式下正常運行時,當我們打開(雙擊)此.exe文件時,它崩潰。

2:我的程序也無法在調試模式下工作,當我打開.exe文件時,它顯示了一個小部件,但視頻沒有流

遇到錯誤

[0000000001c96b20] main input error: open of 'rtsp"//192.168.1.101:8554/' failed 

[0000000001bcce90] main input error: your input can't be opened
[0000000001bcce90] main input error: VLC is unable to open the MRL 'rtsp://192.168.1.101:8554/'. check the log for details.

請有人回答我的問題..............

我還在提供我的源代碼以及cmakelist ............

如果可能的話,請編輯我的代碼,因為我是Qt,Cmake,LibVlc的新手

CmakeList.txt


cmake_minimum_required(VERSION 2.8)
PROJECT(VlcInterfaceWindow_FULL)
FIND_PACKAGE( Qt4 4.8.5 COMPONENTS QtMain QtCore QtGui REQUIRED )
#SET(VlcInterfaceWindow_SOURCES  main.cpp  vlc_on_qt.cpp)
SET(VlcInterfaceWindow_HEAERS vlc_on_qt.h)

INCLUDE(${QT_USE_FILE})
include_directories( "C:/vlc-2.1.5/sdk/include")
QT4_WRAP_CPP(VlcInterfaceWindow_HEAERS_MOC ${VlcInterfaceWindow_HEAERS})


add_library(lib_vlc STATIC IMPORTED)
set_property(TARGET lib_vlc PROPERTY IMPORTED_LOCATION_RELEASE C:/vlc-2.1.5/sdk/lib/libvlc.lib)
set_property(TARGET lib_vlc PROPERTY IMPORTED_LOCATION_DEBUG C:/vlc-2.1.5/sdk/lib/libvlc.lib)

add_library(lib_vlc_core STATIC IMPORTED)
set_property(TARGET lib_vlc_core PROPERTY IMPORTED_LOCATION_RELEASE C:/vlc-    
2.1.5/sdk/lib/libvlccore.lib)
set_property(TARGET lib_vlc_core PROPERTY IMPORTED_DEBUG C:/vlc-2.1.5/sdk/lib/libvlccore.lib)
set(VlcTest_SRCS  main.cpp vlc_on_qt.cpp )

ADD_EXECUTABLE(VlcInterfaceWindow_FULL ${VlcTest_SRCS} ${VlcInterfaceWindow_HEAERS_MOC})
TARGET_LINK_LIBRARIES(VlcInterfaceWindow_FULL ${QT_LIBRARIES} lib_vlc lib_vlc_core)



main.cpp

#include "vlc_on_qt.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Player p;
p.resize(640,480);
//p.playFile("rtsp://38.117.88.90/TenTV/video");
p.playFile("rtsp://192.168.1.101:8554/");
p.show();
return a.exec();
}





vlc_on_qt.h

#ifndef VLC_ON_QT_H
#define VLC_ON_QT_H

#include <vlc/vlc.h>
#include <vlc/libvlc.h>
#include <QWidget>

class 
QVBoxLayout;
class
QTimer;
class 
QFrame;
class
QSlider;

#define POSITION_RESOLUTION 10000

class Player : public QWidget
{
Q_OBJECT

QSlider *_positionSlider;

QFrame *_videoWidget;
QTimer *poller;
bool _isPlaying;
libvlc_instance_t *_vlcinstance;
libvlc_media_player_t *_mp;
libvlc_media_t *_m;

public:
Player();

〜播放器();

public slots:
void playFile(QString file);
void updateInterface();
void changePosition(int newPosition);
};
#endif



vlc_on_qt.cpp

#include "vlc_on_qt.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QSlider>
#include <QTimer>
#include <QFrame>
#include <iostream>

using namespace std;

Player::Player()
: QWidget()
{

 _videoWidget=new QFrame(this);

_positionSlider=new QSlider(Qt::Horizontal,this); 
_positionSlider->setMaximum(POSITION_RESOLUTION);

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(_videoWidget);
layout->addWidget(_positionSlider);
setLayout(layout);

_isPlaying=false;
poller=new QTimer(this);

connect(poller, SIGNAL(timeout()),this, SLOT(updateInterface()));
connect(_positionSlider, SIGNAL(sliderMoved(int)), this, SLOT(changePosition(int)));

poller->start(100); 
}

Player::~Player() 
{
libvlc_media_player_stop (_mp);

libvlc_media_player_release (_mp);

libvlc_release (_vlcinstance);

}

void Player::playFile(QString file)
{
 _vlcinstance=libvlc_new(0, NULL);          

 //Create a new LibVLC media descriptor
_m = libvlc_media_new_location(_vlcinstance, file.toAscii());

_mp=libvlc_media_player_new_from_media (_m);


// Get our media instance to use our window 
 libvlc_media_player_set_hwnd(_mp, _videoWidget->winId());

// Play 
libvlc_media_player_play (_mp);

_isPlaying=true;   

}


void Player::changePosition(int newPosition)
{
libvlc_media_t *curMedia = libvlc_media_player_get_media (_mp);
if (curMedia == NULL)
    return;

float pos=(float)(newPosition)/(float)POSITION_RESOLUTION;
libvlc_media_player_set_position (_mp, pos);

}

void Player::updateInterface()
{
if(!_isPlaying)
    return;

libvlc_media_t *curMedia = libvlc_media_player_get_media (_mp);
if (curMedia == NULL)
    return;

float pos=libvlc_media_player_get_position (_mp);
int siderPos=(int)(pos*(float)(POSITION_RESOLUTION));
_positionSlider->setValue(siderPos);

}

vlc發行版中的libvlc.lib始終被破壞,無法與Visual Studio版本一起使用。 要解決此問題,您有3種選擇:

並找出視頻解碼出了什么問題,可以將“ -vvv”(激活完整調試日志的選項)傳遞給libvlc_new

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM