1 部分问题截图:
2 已导入libcedarx文件下所有的.so和.h文件
3.pro文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp \
uvideoplayer.cpp
HEADERS += \
include/AUtils.h \
include/AWOMX_VideoIndexExtension.h \
include/AsfParser.h \
include/AudioEncodeComponent.h \
include/AwHDCPModule.h \
include/AwMessageQueue.h \
include/AwOMXPlugin.h \
include/AwPool.h \
include/AwRawStreamParser.h \
include/AwRtpStream.h \
include/AwSpecialStreamParser.h \
include/AwSstrParser.h \
include/AwSstrUtils.h \
include/AwtsParser.h \
include/BaseUtils.h \
include/BitstreamManager.h \
include/CTC_MediaProcessor.h \
include/CTC_MediaProcessorImpl.h \
include/CTC_wrapper.h \
include/CdcBSSink.h \
include/CdcIniparserapi.h \
include/CdcIonUtil.h \
include/CdcMalloc.h \
include/CdcMemList.h \
include/CdcMessageQueue.h \
include/CdcPicSink.h \
include/CdcSinkInterface.h \
include/CdcSysinfo.h \
include/CdcTimeUtil.h \
include/CdxAacMuxer.h \
include/CdxAacParser.h \
include/CdxAesStream.h \
include/CdxAiffParser.h \
include/CdxAmrParser.h \
include/CdxApeParser.h \
include/CdxAtomic.h \
include/CdxAtracParser.h \
include/CdxAviDepackCoreCfg.h \
include/CdxAviDepackIndex.h \
include/CdxAviDepackLib.h \
include/CdxAviDepackSequence.h \
include/CdxAviFileIn.h \
include/CdxAviIdx1.h \
include/CdxAviInclude.h \
include/CdxAviOdmlIndx.h \
include/CdxAviParser.h \
include/CdxBase64.h \
include/CdxBdParser.h \
include/CdxBinary.h \
include/CdxBitReader.h \
include/CdxBuffer.h \
include/CdxCafParser.h \
include/CdxCheckStreamPara.h \
include/CdxDashParser.h \
include/CdxDebug.h \
include/CdxDsdParser.h \
include/CdxEnumCommon.h \
include/CdxFileParser.h \
include/CdxFlacParser.h \
include/CdxFlvParser.h \
include/CdxFsWriter.h \
include/CdxG729Parser.h \
include/CdxHlsParser.h \
include/CdxHttpStream.h \
include/CdxISOLang.h \
include/CdxId3Parser.h \
include/CdxId3v2Parser.h \
include/CdxIoUtils.h \
include/CdxIon.h \
include/CdxKeyedVector.h \
include/CdxList.h \
include/CdxLock.h \
include/CdxM3u9Parser.h \
include/CdxMemory.h \
include/CdxMessage.h \
include/CdxMeta.h \
include/CdxMetaData.h \
include/CdxMkvParser.h \
include/CdxMmsBase.h \
include/CdxMmsParser.h \
include/CdxMmsStream.h \
include/CdxMmshttpParser.h \
include/CdxMovAtom.h \
include/CdxMovList.h \
include/CdxMovParser.h \
include/CdxMovSample.h \
include/CdxMp3Parser.h \
include/CdxMp4Muxer.h \
include/CdxMpd.h \
include/CdxMpgParser.h \
include/CdxMpgParserImpl.h \
include/CdxMuxer.h \
include/CdxMuxerBaseDef.h \
include/CdxOggParser.h \
include/CdxParser.h \
include/CdxPlaylistParser.h \
include/CdxPmpParser.h \
include/CdxQueue.h \
include/CdxRtmpStream.h \
include/CdxRtspSpec.h \
include/CdxRtspStream.h \
include/CdxSeqBuffer.h \
include/CdxSocketUtil.h \
include/CdxStrUtil.h \
include/CdxStream.h \
include/CdxStreamErrno.h \
include/CdxSysinfo.h \
include/CdxTime.h \
include/CdxTsMuxer.h \
include/CdxTsMuxerCfg.h \
include/CdxTsParser.h \
include/CdxTsemaphore.h \
include/CdxTypes.h \
include/CdxUdpStream.h \
include/CdxUrl.h \
include/CdxUtfCode.h \
include/CdxVirCache.h \
include/CdxWavParser.h \
include/CdxWriter.h \
include/DecoderList.h \
include/DecoderListFunc.h \
include/DecoderTypes.h \
include/EncAdapter.h \
include/EncDataComponent.h \
include/Envelope.h \
include/Extractor.h \
include/FrameBufferManager.h \
include/Id3Base.h \
include/M3U9Parser.h \
include/M3UParser.h \
include/Md5Common.h \
include/MuxerWriter.h \
include/OMX_Audio.h \
include/OMX_Component.h \
include/OMX_ContentPipe.h \
include/OMX_Core.h \
include/OMX_IVCommon.h \
include/OMX_Image.h \
include/OMX_Index.h \
include/OMX_IndexExt.h \
include/OMX_Other.h \
include/OMX_Types.h \
include/OMX_Video.h \
include/OMX_VideoExt.h \
include/OmxCodec.h \
include/PlaylistParser.h \
include/PostProcessCom.h \
include/RecoderWriter.h \
include/RecorderWriter.h \
include/SinkMd5.h \
include/SmartDnsService.h \
include/StringContainer.h \
include/TParseConfig.h \
include/TRcommon.h \
include/TRlog.h \
include/TinaRecorder.h \
include/Trecorder.h \
include/VideoEncodeComponent.h \
include/VideoFrameScheduler.h \
include/VideoFrameSchedulerWrap.h \
include/Video_input_port.h \
include/WVMDataSource.h \
include/adecoder.h \
include/aencoder.h \
include/aformat.h \
include/aftertreatment.h \
include/asoundlib.h \
include/async_queue.h \
include/auGaincom.h \
include/audioDecComponent.h \
include/audioInPort.h \
include/audioRenderComponent.h \
include/avtimer.h \
include/awLogRecorder.h \
include/awMediaDataSource.h \
include/awPlayReadyLicense.h \
include/awStreamListener.h \
include/awStreamingSource.h \
include/aw_ion.h \
include/aw_omx_component.h \
include/aw_omx_core.h \
include/awencoder.h \
include/awmetadataretriever.h \
include/awplayer.h \
include/baseComponent.h \
include/bitrateEstimater.h \
include/cache.h \
include/cdcDictionary.h \
include/cdcIniparser.h \
include/cdc_config.h \
include/cdc_ion_5.4.h \
include/cdc_log.h \
include/cdc_version.h \
include/cdx_config.h \
include/cdx_log.h \
include/cdx_plugin.h \
include/config.h \
include/consumer.h \
include/csi.h \
include/dataqueue.h \
include/deinterlace.h \
include/demo_utils.h \
include/demuxComponent.h \
include/dictionary.h \
include/disp.h \
include/display_H3.h \
include/drv_display_sun4i.h \
include/dtsSpeakerMap.h \
include/dvdTitleIfo.h \
include/fbm.h \
include/framerateEstimater.h \
include/iniparser.h \
include/iniparserapi.h \
include/ionAllocEntry.h \
include/ion_alloc.h \
include/ion_alloc_list.h \
include/ion_mem_alloc.h \
include/jpegdecode.h \
include/layerControl.h \
include/license.h \
include/log.h \
include/mediaInfo.h \
include/memoryAdapter.h \
include/mpeg4Vol.h \
include/mpgFunc.h \
include/omxMM.h \
include/omx_common.h \
include/omx_deinterlace.h \
include/omx_macros.h \
include/omx_mutex.h \
include/omx_pub_def.h \
include/omx_sem.h \
include/omx_thread.h \
include/omx_tsem.h \
include/omx_vdec.h \
include/omx_vdec_config.h \
include/omx_vdec_decoder.h \
include/omx_vdec_port.h \
include/omx_venc.h \
include/omx_venc_adapter.h \
include/outputCtrl.h \
include/pcm_multi.h \
include/player.h \
include/player_i.h \
include/rawStreamParser.h \
include/sbm.h \
include/sbmInterface.h \
include/sc_interface.h \
include/scaledown.h \
include/sdecoder.h \
include/secureAllocEntry.h \
include/sem.h \
include/soundControl.h \
include/streamManager.h \
include/subtitleControl.h \
include/subtitleDecComponent.h \
include/subtitleNativeDisplay.h \
include/subtitleNativeDisplayApi.h \
include/subtitleRenderComponent.h \
include/subtitleUtils.h \
include/sunxi_camera.h \
include/sunxi_display1.h \
include/sunxi_display2.h \
include/sunxi_metadata_def.h \
include/sunxi_tr.h \
include/tdisp_ctrl.h \
include/tg2d_driver.h \
include/tina_multimedia_version.h \
include/tinasoundcontrol.h \
include/tinyplaydemo.h \
include/tlog.h \
include/tmetadataretriever.h \
include/tplayer.h \
include/tsdemux.h \
include/tsdemux_i.h \
include/tsound_ctrl.h \
include/typedef.h \
include/uapi-heap.h \
include/vbasetype.h \
include/vdecoder.h \
include/vdecoder_config.h \
include/veAdapter.h \
include/veInterface.h \
include/venc_device.h \
include/vencoder.h \
include/version.h \
include/vformat.h \
include/videoDecComponent.h \
include/videoDecorder.h \
include/videoRenderComponent.h \
include/videodev.h \
include/videoengine.h \
include/water_mark.h \
include/wavheader.h \
include/xmetadataretriever.h \
include/xplayer.h \
include/xplayerUtil.h \
include/zlib.h \
lib/CdxBase64.h \
lib/CdxMuxer.h \
lib/CdxParser.h \
lib/CdxStream.h \
lib/xplayer.h \
mainwindow.h \
uvideoplayer.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
DISTFILES += \
lib/cedarc.conf \
lib/cedarx.conf \
lib/libMemAdapter.la \
lib/libMemAdapter.so \
lib/libOmxCore.la \
lib/libOmxCore.so \
lib/libOmxVdec.la \
lib/libOmxVdec.so \
lib/libOmxVenc.la \
lib/libOmxVenc.so \
lib/libVE.so \
lib/libadecoder.so \
lib/libaencoder.so \
lib/libaftertreatment.la \
lib/libaftertreatment.so \
lib/libaw_aacdec.so \
lib/libaw_alacdec.so \
lib/libaw_amrdec.so \
lib/libaw_apedec.so \
lib/libaw_atrcdec.so \
lib/libaw_dsddec.so \
lib/libaw_flacdec.so \
lib/libaw_g729dec.so \
lib/libaw_mp3dec.so \
lib/libaw_oggdec.so \
lib/libaw_opusdec.so \
lib/libaw_radec.so \
lib/libaw_siprdec.so \
lib/libaw_wavdec.so \
lib/libawavs.so \
lib/libawavs2.so \
lib/libawh264.so \
lib/libawh265.so \
lib/libawmjpeg.so \
lib/libawmjpegplus.so \
lib/libawmpeg2.so \
lib/libawmpeg4base.so \
lib/libawmpeg4dx.so \
lib/libawmpeg4h263.so \
lib/libawmpeg4normal.so \
lib/libawmpeg4vp6.so \
lib/libawrecorder.la \
lib/libawrecorder.so \
lib/libawvp6soft.so \
lib/libawvp8.so \
lib/libawvp9Hw.so \
lib/libawvp9HwAL.so \
lib/libawwmv12soft.so \
lib/libawwmv3.so \
lib/libcdc_base.la \
lib/libcdc_base.so \
lib/libcdx_base.la \
lib/libcdx_base.so \
lib/libcdx_common.la \
lib/libcdx_common.so \
lib/libcdx_muxer.la \
lib/libcdx_muxer.so \
lib/libcdx_parser.la \
lib/libcdx_parser.so \
lib/libcdx_playback.la \
lib/libcdx_playback.so \
lib/libcdx_stream.la \
lib/libcdx_stream.so \
lib/libfbm.la \
lib/libfbm.so \
lib/libjpegdecode.so \
lib/libsbm.la \
lib/libsbm.so \
lib/libscaledown.so \
lib/libsubdecoder.so \
lib/libtmetadataretriever.so \
lib/libtplayer.so \
lib/libtrecorder.so \
lib/libvdecoder.la \
lib/libvdecoder.so \
lib/libvenc_base.la \
lib/libvenc_base.so \
lib/libvenc_common.so \
lib/libvenc_h264.so \
lib/libvenc_h265.so \
lib/libvenc_jpeg.so \
lib/libvencoder.la \
lib/libvencoder.so \
lib/libvideoengine.so \
lib/libxmetadataretriever.la \
lib/libxmetadataretriever.so \
lib/libxplayer.la \
lib/libxplayer.so
# 定义库的基本路径
LIB_PATH =/home/meetyoo/t113/Tina-Linux/package/allwinner/tina_multimedia_demo/test2/lib
# 定义要导入的库列表
LIB_LIST =adecoder awmpeg4normal jpegdecode aencoder awmpeg4vp6 MemAdapter aftertreatment aw_oggdec OmxCore aw_aacdec aw_opusdec OmxVdec aw_alacdec aw_radec OmxVenc aw_amrdec awrecorder sbm aw_apedec aw_siprdec scaledown aw_atrcdec awvp6soft subdecoder awavs2 awvp8 tmetadataretriever awavs awvp9HwAL tplayer aw_dsddec awvp9Hw trecorder aw_flacdec aw_wavdec vdecoder aw_g729dec awwmv12soft venc_base awh264 awwmv3 venc_common awh265 cdc_base venc_h264 awmjpegplus cdx_base venc_h265 awmjpeg cdx_common venc_jpeg aw_mp3dec cdx_muxer vencoder awmpeg2 cdx_parser VE awmpeg4base cdx_playback videoengine awmpeg4dx cdx_stream xmetadataretriever
# 使用for循环遍历库列表并将它们添加到LIBS变量中
for(lib, LIB_LIST) {
LIBS += -L$${LIB_PATH} -l$${lib}
}
4.uvideoplayer.cpp
#include "uvideoplayer.h"
#include "qpainter.h"
#include "qtimer.h"
#include "qdebug.h"
#include <QTextOption>
#include <QString>
#include <QLabel>
#include <QFileDialog>
#include <QFile>
//#include "languagemanager.h"
#include <QFileInfoList>
#include <QFileInfo>
//#define __aarch64__
#ifdef __aarch64__
#include "videoplayerinterface.h"
#endif
UVideoPlayer::~UVideoPlayer()
{
#ifdef __aarch64__
mvideoplayer->destroy();
#endif
}
UVideoPlayer::UVideoPlayer(QWidget *parent)
: QWidget(parent)
, parentWidget(parent)
{
#ifdef __aarch64__
QPalette pal = palette();
pal.setColor(QPalette::Window, QColor(0x00, 0xff, 0x00, 0x00));
setPalette(pal);
#else
#endif
init();
}
bool UVideoPlayer::getLoopPlayback() const
{
return this->isPlaybacked;
}
uint UVideoPlayer::getVolume() const
{
return this->volume;
}
QRect UVideoPlayer::getSize() const
{
return this->geometry();
}
QString UVideoPlayer::getNextUrl()
{
if (playIndex == urlList.count())
playIndex = 0;
return urlList.at(playIndex);
playIndex++;
}
int callbackForPlayer(void* pUser, int msg, int ext1, void* para)
{
Q_UNUSED(pUser)
Q_UNUSED(msg)
Q_UNUSED(ext1)
Q_UNUSED(para)
#ifdef __aarch64__
UVideoPlayer *uVideoPlayer = static_cast<UVideoPlayer*>(para);
int ret = 0xff;
if (uVideoPlayer->userCallback)
ret = uVideoPlayer->userCallback(pUser, msg, ext1);
if (-ret != msg) {
switch (msg) {
case VPI_NOTIFY_PLAYBACK_COMPLETE:
uVideoPlayer->mvideoplayer->setDataSource(uVideoPlayer->getNextUrl().toUtf8(), NULL);
uVideoPlayer->mvideoplayer->prepare();
uVideoPlayer->mvideoplayer->setHoldLastPicture(false);
uVideoPlayer->mvideoplayer->play();
break;
default:
break;
}
}
#endif
return 0;
}
#ifdef __aarch64__
void UVideoPlayer::init()
{
urlList.clear();
QStringList filterStr;
filterStr << ".avi" << ".mkv" << ".flv" << ".ts" << ".mp4" << ".ts" << ".webm" << ".asf" << ".mpg"
<<".mov" << ".vob" << ".mp1" << ".mp2" << ".mp3" << ".ogg" << ".flac" << ".ape" << ".wav"
<<".m4a" << ".amr" << ".aac";
QDir dir(playUrl);
QFileInfoList list = dir.entryInfoList();
foreach (QFileInfo info, list) {
if(info.fileName() == "." || info.fileName() == "..")
continue;
if (info.isDir())
continue;
if (!filterStr.contains(QString(".%1").arg(info.completeSuffix())))
continue;
urlList << info.absoluteFilePath();
}
mvideoplayer = new videoplayerinterface;
if (false == mvideoplayer->create()) {
qDebug() << "videoplayer creater fail!";
}
mvideoplayer->setDisplayRect(x(), y(), width(), height());
mvideoplayer->videoPlayerInterfaceSetNotifyCallback(callbackForPlayer, mvideoplayer);
mvideoplayer->reset();
mvideoplayer->setDataSource(getNextUrl().toUtf8(), NULL);
mvideoplayer->prepare();
mvideoplayer->setHoldLastPicture(false);
mvideoplayer->play();
qDebug() << "videoplayer run!";
}
#else
void UVideoPlayer::init() {}
#endif
QString UVideoPlayer::getPlayUrl() const
{
return this->playUrl;
}
void UVideoPlayer::paintEvent(QPaintEvent *)
{
#ifdef __aarch64__
QPainter painter(this);
painter.setCompositionMode(QPainter::CompositionMode_Clear);
painter.fillRect(rect(), Qt::SolidPattern);
#else
QPainter painter(this);
painter.save();
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::black);
painter.drawRect(rect());
painter.restore();
#endif
}
void UVideoPlayer::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
#ifdef __aarch64__
if (mvideoplayer) {
QMetaObject::invokeMethod(parentWidget, "onTransparentRectChanged", Q_ARG(const QRect &, this->geometry()));
mvideoplayer->setDisplayRect(x(), y(), width(), height());
}
#endif
}
void UVideoPlayer::setLoopPlayback(bool isPlaybacked)
{
this->isPlaybacked = isPlaybacked;
}
void UVideoPlayer::setVolume(uint volume)
{
this->volume = volume;
}
void UVideoPlayer::setSize(const QRect &size)
{
this->rectsize = size;
this->setGeometry(this->rectsize);
update();
}
void UVideoPlayer::setPlayUrl(const QString &url)
{
if (!url.isEmpty())
this->playUrl = url;
}
5.uvideoplayer.h
#ifndef UVIDEOPLAYER_H
#define UVIDEOPLAYER_H
#include <QObject>
#pragma once
#include <QWidget>
typedef int (*UVideoPlayerNotifyCallback)(void* pUser, int msg, int ext1);
class videoplayerinterface;
class QLabel;
class UVideoPlayer: public QWidget
{
Q_OBJECT
Q_PROPERTY(bool loopPlayback READ getLoopPlayback WRITE setLoopPlayback)
Q_PROPERTY(uint volume READ getVolume WRITE setVolume)
Q_PROPERTY(QRect size READ getSize WRITE setSize)
Q_PROPERTY(QString url READ getPlayUrl WRITE setPlayUrl)
~UVideoPlayer();
public:
explicit UVideoPlayer(QWidget *parent = 0);
bool getLoopPlayback() const;
uint getVolume() const;
QRect getSize() const;
void init();
QString getPlayUrl() const;
QString getNextUrl();
videoplayerinterface *mvideoplayer;
UVideoPlayerNotifyCallback userCallback = NULL;
protected:
void paintEvent(QPaintEvent *) override;
void resizeEvent(QResizeEvent *event) override;
public slots:
void setLoopPlayback(bool isPlaybacked);
void setVolume(uint volume);
void setSize(const QRect &size);
void setPlayUrl(const QString &url);
private:
bool isPlaybacked = true;
uint volume = 6;
QRect rectsize;
QWidget *parentWidget;
QString playUrl="/mnt/SDCARD/";
QStringList urlList;
int playIndex = 0;
};
#endif // UVIDEOPLAYER_H