Запуск видеофайла с определенной временной позиции

Флейм. Только просьба - не материться! :)

Модератор: Дед Пахом

kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Запуск видеофайла с определенной временной позиции

Сообщение kreator »

Наткнулся на проблему - mciSendString не проигрывает файл типа "\\Server\Folder1\1.wmv". Проблема, подозреваю, в "\\Server". Неужели придётся качать на локальный ресурс?
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Запуск видеофайла с определенной временной позиции

Сообщение Yufil »

0. Можно перед открытием фильма перейти (setpath) в каталог, где лежит фильм и открыть фильм без указания сервера и каталога.
1. Можно замапить каталог на сетевой диск.
2. Можно попробовать выполнить команду Subst, объявив каталог диском

А ещё (вообще невообразимо давно) тоже не получалось, выбрал файл через Directory и попросил у Клариона показать Longpath() для файла.
Получил что-то типа \*\\Server\dir\file.avi, это и передал в программу. Чудеса однако...
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Запуск видеофайла с определенной временной позиции

Сообщение gopstop2007 »

Добавлю еще :)

Код: Выделить всё

cd \\Server\dir\...
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Запуск видеофайла с определенной временной позиции

Сообщение kreator »

Нет, народ, mciSendString отрабатывает как надо серверный путь. Ошибка - на терминальном серваке, где вообще не установлена поддержка видео. Грешу пока на это. Разбираемся дальше. А может вообще такое быть, чтобы Винда не знала свой родной формат wmv?
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Запуск видеофайла с определенной временной позиции

Сообщение Yufil »

Кодеки надо ставить, например, K-lite Codec Pack... Сейчас все плееры имеют встроенные кодеки, а вот винда не имеет.
Обычно после этого всё показывается нормально.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Запуск видеофайла с определенной временной позиции

Сообщение gopstop2007 »

подскажите, чтобы по завершении проигрывания файла, начал проигрывать указанные следующие видео-файлы
со своего списка - кларион таблицы или хотя бы с указанного каталога?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Запуск видеофайла с определенной временной позиции

Сообщение kreator »

У меня есть такой сервис. На экране Электронного Киоска при бездействии включается просмотр видео и фоток (не важно чего) из определённого каталога.
Делаю так.
Сначала считываем содержимое каталога в очередь:

Код: Выделить всё

  ZZZ{prop:SQL} = 'select n.VAL '  								        & |
                  'from NASTR n '                	        & |
                  'where n.PARAM=''ETScreenSaverDir'''
  if ~Access:ZZZ.Next()
    directory(LOC:FileQueue,clip(ZZZ.A1) & '*.*',ff_:NORMAL)
    LOC:FileQueueRecords = records(LOC:FileQueue)
    loop i#=LOC:FileQueueRecords to 1 by -1
      get(LOC:FileQueue,i#)
      LOC:FileName = clip(ZZZ.A1) & clip(LOC:FileQueue.Name)
      PathSplit(LOC:FileName, , , , LOC:FileExtension)
      if clip(LOC:FileExtension)<>'.bmp' and clip(LOC:FileExtension)<>'.jpg' and clip(LOC:FileExtension)<>'.jpeg' and clip(LOC:FileExtension)<>'.png' |
         and clip(LOC:FileExtension)<>'.pcx' and clip(LOC:FileExtension)<>'.jpg' and clip(LOC:FileExtension)<>'.wmf' and clip(LOC:FileExtension)<>'.avi' |
         and clip(LOC:FileExtension)<>'.mp4' and clip(LOC:FileExtension)<>'.div' and clip(LOC:FileExtension)<>'.divx' and clip(LOC:FileExtension)<>'.mkv' |
         and clip(LOC:FileExtension)<>'.mov' and clip(LOC:FileExtension)<>'.vob' and clip(LOC:FileExtension)<>'.wmv'
        delete(LOC:FileQueue)
        if error()
          stop(error())
        end  
      else 
        LOC:FileQueue.Name = LOC:FileName
        put(LOC:FileQueue)
        if error()
          stop(error())
        end  
      end
    end  
Потом в таймере (прошу прощения за некоторую обрезку, что-то очень много текста, боюсь будет сложно понять). Идёт проверка на время бездействия. Если пора включать проигрывание, то:

Код: Выделить всё

      if LOC:FileCounter=LOC:FileQueueRecords
        LOC:FileCounter = 1
      else
        LOC:FileCounter += 1
      end
      get(LOC:FileQueue, LOC:FileCounter)
      LOC:FileName = clip(LOC:FileQueue.Name)
      PathSplit(LOC:FileName, , , , LOC:FileExtension)
      if clip(LOC:FileExtension)='.bmp' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.jpeg' or clip(LOC:FileExtension)='.png' |
           or clip(LOC:FileExtension)='.pcx' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.wmf'
        ?Image1{prop:NoHeight} = True  
        ?Image1{prop:NoWidth} = True  
        ?IMAGE1{prop:Text} = clip(LOC:FileQueue.Name)
        x1# = ?PANEL1{prop:At, 3}
        x2# = ?Image1{prop:At, 3}
        if x2#>x1# ! ?IMAGE1{prop:at,3}>?PANEL1{prop:at,3}
          ?Image1{prop:at,4} = ?Image1{prop:at,4}/?Image1{prop:at,3}*?PANEL1{prop:at,3}   
          ?Image1{prop:at,3} = ?PANEL1{prop:at, 3}
        end      
        x1# = ?PANEL1{prop:At, 4}
        x2# = ?Image1{prop:At, 4}
        if x2#>x1#
          ?Image1{prop:at,3} = ?Image1{prop:at,3}/?Image1{prop:at,4}*?PANEL1{prop:at,4}
          ?Image1{prop:at,4} = ?PANEL1{prop:at,4}
        end      
        ?Image1{prop:at,1} = ?PANEL1{prop:at,1} + (?PANEL1{prop:at,3} - ?Image1{prop:at,3}) / 2
        ?Image1{prop:at,2} = ?PANEL1{prop:at,2} + (?PANEL1{prop:at,4} - ?Image1{prop:at,4}) / 2
        LOC:FileType = 0
      else  
        LOC:FileType = 1
        ?IMAGE1{prop:Hide} = True
        LOC:mciCommand = 'open "' & clip(LOC:FileName) & '" type mpegvideo alias video parent ' & 0{prop:Handle} & ' style child'
        err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
        if err#
          MessageLite('Ошибка проигрывания видео!!!', 'Ошибка открытия видео. Err #' & err#, 500)
        end
        LOC:X = ?PANEL1{prop:at,1}
        LOC:Y = ?PANEL1{prop:at,2}
        LOC:mciCommand = 'put video window client at ' & LOC:X & ' ' & LOC:Y & ' ' & ?PANEL1{prop:at,3} & ' ' & ?PANEL1{prop:at,4} 
        err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
        if err#
          MessageLite('Ошибка проигрывания видео!!!', 'Ошибка клиентского окна. Err #' & err#, 500)
        end
        LOC:mciCommand = 'play video'
        err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
        if err#
          MessageLite('Ошибка проигрывания видео!!!', 'Ошибка проигрывания видео. Err #' & err#, 500)
        end
        LOC:mciCommand = 'set video time format milliseconds'
        err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
        LOC:mciCommand = 'status video length'
        err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
        LOC:Duration = LOC:mciReturn 
      end
Если уже идёт проигрывание, то:

Код: Выделить всё

      LOC:mciCommand = 'status video position'
      err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
      LOC:Position = LOC:mciReturn 
      if (LOC:Position>=LOC:Duration)
        if LOC:FileCounter=LOC:FileQueueRecords
          LOC:FileCounter = 1
        else
          LOC:FileCounter += 1
        end
        get(LOC:FileQueue, LOC:FileCounter)
        LOC:FileName = clip(LOC:FileQueue.Name)
        PathSplit(LOC:FileName, , , , LOC:FileExtension)
        if clip(LOC:FileExtension)='.bmp' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.jpeg' or clip(LOC:FileExtension)='.png' |
             or clip(LOC:FileExtension)='.pcx' or clip(LOC:FileExtension)='.jpg' or clip(LOC:FileExtension)='.wmf'
          LOC:mciCommand = 'status video mode'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:mciCommand = 'stop video'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:mciCommand = 'close all'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:FileType = 0
          ?Image1{prop:NoHeight} = True  
          ?Image1{prop:NoWidth} = True  
          ?IMAGE1{prop:Text} = clip(LOC:FileQueue.Name)
          x1# = ?PANEL1{prop:At, 3}
          x2# = ?Image1{prop:At, 3}
          if x2#>x1# ! ?IMAGE1{prop:at,3}>?PANEL1{prop:at,3}
            ?Image1{prop:at,4} = ?Image1{prop:at,4}/?Image1{prop:at,3}*?PANEL1{prop:at,3}   
            ?Image1{prop:at,3} = ?PANEL1{prop:at, 3}
          end      
          x1# = ?PANEL1{prop:At, 4}
          x2# = ?Image1{prop:At, 4}
          if x2#>x1# ! ?Image1{prop:at,4}>?PANEL1{prop:at,4}
            ?Image1{prop:at,3} = ?Image1{prop:at,3}/?Image1{prop:at,4}*?PANEL1{prop:at,4}
            ?Image1{prop:at,4} = ?PANEL1{prop:at,4}
          end      
          ?Image1{prop:at,1} = ?PANEL1{prop:at,1} + (?PANEL1{prop:at,3} - ?Image1{prop:at,3}) / 2
          ?Image1{prop:at,2} = ?PANEL1{prop:at,2} + (?PANEL1{prop:at,4} - ?Image1{prop:at,4}) / 2
          ?IMAGE1{prop:Hide} = False
          LOC:Clock = clock()
          LOC:FileType = 0
        else
          LOC:mciCommand = 'status video mode'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:mciCommand = 'stop video'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:mciCommand = 'close all'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:mciCommand = 'open "' & clip(LOC:FileName) & '" type mpegvideo alias video parent ' & 0{prop:Handle} & ' style child'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          if err#
            MessageLite('Ошибка проигрывания видео!!!', 'Ошибка открытия видео. Err #' & err#, 500)
          end
          LOC:X = ?PANEL1{prop:at,1}
          LOC:Y = ?PANEL1{prop:at,2}
          LOC:mciCommand = 'put video window client at ' & LOC:X & ' ' & LOC:Y & ' ' & ?PANEL1{prop:at,3} & ' ' & ?PANEL1{prop:at,4} 
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          if err#
            MessageLite('Ошибка проигрывания видео!!!', 'Ошибка клиентского окна. Err #' & err#, 500)
          end
          LOC:mciCommand = 'play video'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          if err#
            MessageLite('Ошибка проигрывания видео!!!', 'Ошибка проигрывания видео. Err #' & err#, 500)
          end
          LOC:mciCommand = 'set video time format milliseconds'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:mciCommand = 'status video length'
          err# = mciSendString(LOC:mciCommand, LOC:mciReturn, 128, 0)
          LOC:Duration = LOC:mciReturn 
          LOC:FileType = 1
        end
Попробуйте разобраться. Если что, готов пояснить.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Запуск видеофайла с определенной временной позиции

Сообщение Дед Пахом »

Здесь сборник winapi классов, есть и обёртка для mciSendString:

Код: Выделить всё

player   TMpegVideo
  player.Open(mp3file)
  player.Play()
  ...
  if player.IsStopped()  !- песня закончилась
С уважением, ДП
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Запуск видеофайла с определенной временной позиции

Сообщение gopstop2007 »

kreator писал(а): 15 Июль 2020, 14:01
Попробуйте разобраться. Если что, готов пояснить.
Спасибо попробую
Дед Пахом писал(а): 15 Июль 2020, 15:37 Здесь сборник winapi классов, есть и обёртка для mciSendString:

Код: Выделить всё

player   TMpegVideo
  player.Open(mp3file)
  player.Play()
  ...
  if player.IsStopped()  !- песня закончилась
спасибо, с первого взгляда - просто :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ответить