コード例 #1
0
    def callBackMetadata(self, currentTime, nextTime):
        """ Metadata CallBack """
        try:
            t = callBackMetadataThread(cmds=[
                '-i', self.fileName, '-ss', currentTime, '-to', nextTime,
                '-map', 'data-re', '-f', 'data', '-'
            ])
            t.start()
            t.join(1)
            if t.is_alive():
                t.p.terminate()
                t.join()
            if t.stdout == b'':
                return

            for packet in StreamParser(t.stdout):
                try:
                    self.addMetadata(packet.MetadataList())
                    UpdateLayers(packet,
                                 parent=self,
                                 mosaic=self.createingMosaic)
                    self.iface.mapCanvas().refresh()
                    QApplication.processEvents()
                    return
                except Exception as e:
                    None
        except Exception as e:
            qgsu.showUserAndLogMessage(QCoreApplication.translate(
                "QgsFmvPlayer", "Metadata Callback Failed! : "),
                                       str(e),
                                       level=QGis.Info)
コード例 #2
0
    def test_singlepacket(self):

        # Example from MISB ST 0902.5
        with open("./data/DynamicConstantMISMMSPacketData.bin", "rb") as f:
            packet = f.read()

        from QGIS_FMV.klvdata.streamparser import StreamParser

        for packet in StreamParser(packet):
            # packet.structure()
            pass
コード例 #3
0
ファイル: QgsFmvPlayer.py プロジェクト: Kuppharish/QGISFMV
    def packetStreamParser(self, stdout_data):
        ''' Common packet process'''
        for packet in StreamParser(stdout_data):
            try:
                if isinstance(packet, UnknownElement):
                    qgsu.showUserAndLogMessage(
                        "Error interpreting klv data, metadata cannot be read.",
                        "the parser did not recognize KLV data",
                        level=QGis.Warning,
                        onlyLog=True)
                    continue
                data = packet.MetadataList()
                self.data = data
                if self.metadataDlg.isVisible(
                ):  # Only add metada to table if this QDockWidget is visible (speed plugin)
                    self.metadataDlg.menuSave.setEnabled(True)
                    self.addMetadata(data)

                UpdateLayers(packet, parent=self, mosaic=self.createingMosaic)
                QApplication.processEvents()
                return
            except Exception:
                None
コード例 #4
0
def getVideoLocationInfo(videoPath):
    """ Get basic location info about the video """
    location = []

    try:
        p = _spawn([
            '-i', videoPath, '-ss', '00:00:00', '-to', '00:00:01', '-map',
            'data-re', '-f', 'data', '-'
        ])

        stdout_data, _ = p.communicate()

        if stdout_data == b'':
            return

        for packet in StreamParser(stdout_data):
            packet.MetadataList()
            frameCenterLat = packet.GetFrameCenterLatitude()
            frameCenterLon = packet.GetFrameCenterLongitude()
            location = [frameCenterLat, frameCenterLon]
            qgsu.showUserAndLogMessage(QCoreApplication.translate(
                "QgsFmvUtils", "Got Location: lon: " + str(frameCenterLon) +
                " lat: " + str(frameCenterLat)),
                                       onlyLog=True)
            break
        else:
            qgsu.showUserAndLogMessage(QCoreApplication.translate(
                "QgsFmvUtils", "This video doesn't have Metadata ! : "),
                                       level=QGis.Info)

    except Exception as e:
        qgsu.showUserAndLogMessage(QCoreApplication.translate(
            "QgsFmvUtils", "Video info callback failed! : "),
                                   str(e),
                                   level=QGis.Info)

    return location
コード例 #5
0
from QGIS_FMV.klvdata.element import UnknownElement
from QGIS_FMV.klvdata.streamparser import StreamParser
import sys
from qgis.PyQt.QtWidgets import QApplication
app = QApplication([""])

print('Number of arguments:', len(sys.argv), 'arguments.')

if len(sys.argv) == 2:

    print("data: " + sys.argv[1])
    stdout_data = open(sys.argv[1], 'rb').read()

    for packet in StreamParser(stdout_data):
        if isinstance(packet, UnknownElement):
            print("Error interpreting klv data, metadata cannot be read.")
            continue
        data = packet.MetadataList()
        print("First Precision Time Stamp:" + str(data[2]))
コード例 #6
0
ファイル: QgsFmvUtils.py プロジェクト: frpin33/QGISFMV
def getVideoLocationInfo(videoPath, dataFile=False):
    """ Get basic location info about the video """
    location = []

    try:
        if dataFile == False:
            p = _spawn([
                '-i', videoPath, '-ss', '00:00:00', '-to', '00:00:01', '-map',
                'data-re', '-f', 'data', '-'
            ])

            stdout_data, _ = p.communicate()

        ################
        else:
            global listOfMetadata
            stdout_data = listOfMetadata[0]
        ################

        if stdout_data == b'':
            return
        for packet in StreamParser(stdout_data):
            if isinstance(packet, UnknownElement):
                qgsu.showUserAndLogMessage(
                    "Error interpreting klv data, metadata cannot be read.",
                    "the parser did not recognize KLV data",
                    level=QGis.Warning)
                continue
            packet.MetadataList()
            frameCenterLat = packet.FrameCenterLatitude
            frameCenterLon = packet.FrameCenterLongitude
            loc = "-"

            if Reverse_geocoding_url != "":
                try:
                    url = QUrl(
                        Reverse_geocoding_url.format(str(frameCenterLat),
                                                     str(frameCenterLon)))
                    request = QNetworkRequest(url)
                    reply = QgsNetworkAccessManager.instance().get(request)
                    loop = QEventLoop()
                    reply.finished.connect(loop.quit)
                    loop.exec_()
                    reply.finished.disconnect(loop.quit)
                    loop = None
                    result = reply.readAll()
                    data = json.loads(result.data())

                    if "village" in data["address"] and "state" in data[
                            "address"]:
                        loc = data["address"]["village"] + \
                            ", " + data["address"]["state"]
                    elif "town" in data["address"] and "state" in data[
                            "address"]:
                        loc = data["address"]["town"] + \
                            ", " + data["address"]["state"]
                    else:
                        loc = data["display_name"]

                except Exception:
                    qgsu.showUserAndLogMessage(
                        "",
                        "getVideoLocationInfo: failed to get address from reverse geocoding service.",
                        onlyLog=True)

            location = [frameCenterLat, frameCenterLon, loc]

            qgsu.showUserAndLogMessage(
                "",
                "Got Location: lon: " + str(frameCenterLon) + " lat: " +
                str(frameCenterLat) + " location: " + str(loc),
                onlyLog=True)

            break
        else:

            qgsu.showUserAndLogMessage(
                QCoreApplication.translate(
                    "QgsFmvUtils", "This video doesn't have Metadata ! : "))

    except Exception as e:
        qgsu.showUserAndLogMessage(
            QCoreApplication.translate("QgsFmvUtils",
                                       "Video info callback failed! : "),
            str(e))

    return location
コード例 #7
0
ファイル: QgsFmvUtils.py プロジェクト: fadel2530550/QGISFMV
def getVideoLocationInfo(videoPath,
                         islocal=False,
                         klv_folder=None,
                         klv_index=0):
    """ Get basic location info about the video """
    location = []
    try:
        if islocal:
            dataFile = os.path.join(klv_folder, "0.0.klv")
            f = open(dataFile, 'rb')
            stdout_data = f.read()
        else:
            p = _spawn([
                '-i', videoPath, '-ss', '00:00:00', '-to', '00:00:01', '-map',
                '0:d:' + str(klv_index), '-f', 'data', '-'
            ])

            stdout_data, _ = p.communicate()
            # qgsu.showUserAndLogMessage("Video Loc info raw result", stdout_data, onlyLog=True)
        if stdout_data == b'':
            # qgsu.showUserAndLogMessage("Error interpreting klv data, metadata cannot be read.", "the parser did not recognize KLV data", level=QGis.Warning)
            return
        for packet in StreamParser(stdout_data):
            if isinstance(packet, UnknownElement):
                qgsu.showUserAndLogMessage(
                    "Error interpreting klv data, metadata cannot be read.",
                    "the parser did not recognize KLV data",
                    level=QGis.Warning)
                continue
            packet.MetadataList()
            centerLat = packet.FrameCenterLatitude
            centerLon = packet.FrameCenterLongitude
            # Target maybe unavailable because of horizontal view
            if centerLat is None and centerLon is None:
                centerLat = packet.SensorLatitude
                centerLon = packet.SensorLongitude
            loc = "-"

            if Reverse_geocoding_url != "":
                try:
                    url = QUrl(
                        Reverse_geocoding_url.format(str(centerLat),
                                                     str(centerLon)))
                    request = QNetworkRequest(url)
                    reply = QgsNetworkAccessManager.instance().get(request)
                    loop = QEventLoop()
                    reply.finished.connect(loop.quit)
                    loop.exec_()
                    reply.finished.disconnect(loop.quit)
                    loop = None
                    result = reply.readAll()
                    data = json.loads(result.data())

                    if "village" in data["address"] and "state" in data[
                            "address"]:
                        loc = data["address"]["village"] + \
                            ", " + data["address"]["state"]
                    elif "town" in data["address"] and "state" in data[
                            "address"]:
                        loc = data["address"]["town"] + \
                            ", " + data["address"]["state"]
                    else:
                        loc = data["display_name"]

                except Exception:
                    qgsu.showUserAndLogMessage(
                        "",
                        "getVideoLocationInfo: failed to get address from reverse geocoding service.",
                        onlyLog=True)

            location = [centerLat, centerLon, loc]

            qgsu.showUserAndLogMessage("",
                                       "Got Location: lon: " + str(centerLon) +
                                       " lat: " + str(centerLat) +
                                       " location: " + str(loc),
                                       onlyLog=True)

            break
        else:

            qgsu.showUserAndLogMessage(
                QCoreApplication.translate(
                    "QgsFmvUtils", "This video doesn't have Metadata ! : "))

    except Exception as e:
        qgsu.showUserAndLogMessage(
            QCoreApplication.translate("QgsFmvUtils",
                                       "Video info callback failed! : "),
            str(e))

    return location