libVL C libvlc_media_player не может открыть сетевые потоки (macOS) - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю над мультимедийным арт-проектом с openFrameworks 0.10.1 и libVL C 3.0.9 Vetinari, на macOS Mojave 10.14.6 / Xcode 10.1. После некоторых проб и ошибок все теперь работает нормально, и я могу воспроизводить локальные видеофайлы в различных форматах и ​​с отличным качеством.

У меня проблема только с сетевыми потоками, что на самом деле является основной необходимой функцией. Когда я пытаюсь воспроизвести сетевой поток, например, с веб-камер youtube или world live, я вижу в консоли, что соединение правильно анализируется и управляется соответствующим плагином Lua. Но через несколько мгновений я получаю EOF и libvlc_media_player отключается. Вот журнал консоли: https://pastebin.com/HWCU8EJy

Официальное приложение VL C из той же сборки libVL C открывает и воспроизводит одни и те же сетевые потоки без каких-либо проблем. , Сначала я предположил, что могут быть некоторые проблемы с системой безопасности macOS, поскольку libVL C обращается к сети из моего пакета приложений, поэтому я изменил все ключи NSAppTransportSecurity в файле Info.plist, чтобы отключить любой фильтр безопасности macOs.

Затем я также скопировал все ключи CFBundleURLTypes из файла Info.plist официального приложения VL C. Но все равно это не работает.

Я пытался установить обновленную версию Lua скрипта "youtube. luac", но не повезло.

Я серьезно бить стену. У кого-нибудь есть совет? Еще какие-нибудь подсказки?

Заранее спасибо.


РЕДАКТИРОВАТЬ:

Я думаю, что теперь у меня есть некоторые интересные подсказки из сравнения файла журнала VL C приложение с одним из libVL C. Сначала я сосредоточился на безопасной части TLS и последующих. Они одинаковы как в приложении VL C, так и в libVL C, поэтому теперь я вижу, что безопасное соединение отлично работает в libVL C, а также что приложения libVL C и VL C работают точно Точно так же и здесь.

Затем я понял, что самое интересное - в самом начале и на выходе из моего приложения + libVL C.

В приложении VL C URL открывается как список воспроизведения и создается поток ввода:

[00007fa0d051c2e0] main playlist debug: processing request item: watch?v=mRe-514tGMg, node: Scaletta, skip: 0
[00007fa0d051c2e0] main playlist debug: rebuilding array of current - root Scaletta
[00007fa0d051c2e0] main playlist debug: rebuild done - 1 items, index 0
[00007fa0d051c2e0] main playlist debug: starting playback of new item
[00007fa0d051c2e0] main playlist debug: resyncing on watch?v=mRe-514tGMg
[00007fa0d051c2e0] main playlist debug: watch?v=mRe-514tGMg is at 0
[00007fa0d051c2e0] main playlist debug: creating new input thread
[00007fa0d08996f0] main input debug: Creating an input for 'watch?v=mRe-514tGMg'
[00007fa0d051c2e0] main playlist debug: requesting art for new input thread
[00007fa0d08996f0] main input debug: using timeshift granularity of 50 MiB
[00007fa0d08996f0] main input debug: using default timeshift path
[00007fa0d08996f0] main input debug: `https://www.youtube.com/watch?v=mRe-514tGMg' gives access `https' demux `any' path `www.youtube.com/watch?v=mRe-514tGMg'
.....

Вместо этого в libVL C URL открывается как «основной ввод» без потока ввода:

[00007f812e8e20f0] main input debug: Creating an input for 'mRe-514tGMg'
[00007f812e8e20f0] main input debug: using timeshift granularity of 50 MiB
[00007f812e8e20f0] main input debug: using default timeshift path
[00007f812e8e20f0] main input debug: `http://youtu.be/mRe-514tGMg' gives access `http' demux `any' path `youtu.be/mRe-514tGMg'
....

Впоследствии журналы почти одинаковы, даже если о событиях сообщается в другом порядке, я полагаю, из-за многопоточных процессов.

Затем, после неудачной первой попытки связи с сервером, приложение VL C продолжает пробовать другие соединения с другими параметрами:

[00007fa0d08996f0] main input debug: EOF reached
.....
[00007fa0d5504fd0] securetransport tls client debug: shutdown TLS session
[00007fa0d5504fd0] securetransport tls client debug: close TLS session
[00007fa0d5504fd0] securetransport tls client debug: close secure transport client
[00007fa0d051c2e0] main playlist debug: dead input
[00007fa0d051c2e0] main playlist debug: processing request item: EarthCam Live: Times Square in 4K, node: Scaletta, skip: 0
[00007fa0d051c2e0] main playlist debug: rebuilding array of current - root Scaletta
[00007fa0d051c2e0] main playlist debug: rebuild done - 1 items, index 0
[00007fa0d051c2e0] main playlist debug: starting playback of new item
[00007fa0d051c2e0] main playlist debug: resyncing on EarthCam Live: Times Square in 4K
[00007fa0d051c2e0] main playlist debug: EarthCam Live: Times Square in 4K is at 0
[00007fa0d051c2e0] main playlist debug: creating new input thread
.....

Затем он несколько раз пробует соединения, пока не найдет нужные параметры, и, наконец, не откроет прямой эфир YouTube.

* 10 37 * libVL C вместо этого останавливается с первой попытки и выходит:
[00007f812e8e20f0] main input debug: EOF reached
...
[00007f812dee8eb0] securetransport tls client debug: shutdown TLS session
[00007f812dee8eb0] securetransport tls client debug: close TLS session
[00007f812dee8eb0] securetransport tls client debug: close secure transport client
EXIT
MacBooksMBP2243:~ macbookproretina$ 

Не знаю, что делать сейчас. В libVL C класс, более похожий на список воспроизведения, представляет собой libvlc_media_list, поэтому я попытался использовать libvlc_media_list_player, передав ему libvlc_media_list, содержащий только один URL. Но это также не работает ...

...