Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

webos api для управления субтитрами и аудиодорожками #30

Closed
aabytt opened this issue Oct 20, 2021 · 4 comments

Comments

@aabytt
Copy link
Contributor

aabytt commented Oct 20, 2021

при запуске видео в плеере лампы в шине webOS появляется запрос com.webos.media метод load, в ответ прилетает mediaId, имея который можно управлять субтитрами и дорожками
описание метода load
https://www.webosose.org/docs/reference/ls2-api/com-webos-media/#load
живой пример лога шины при запуске видео из лампы:
запрос
3628.258 [PUB] call 5 com.webos.media.client._5IC7T01btpYJEV (/var/run/ls2/vnsgcd) com.webos.media (/var/run/ls2/jpn9J7) (null) //load {"payload":{"option":{"appId":"com.lampa.tv","transmission":{"httpHeader":{"referer":"","userAgent":"Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.41 (KHTML, like Gecko) Large Screen WebAppManager Safari/537.41","cookies":""}},"bufferControl":{"userBufferCtrl":false}}},"uri":"http://127.0.0.1:8090/stream?link=df1c4e7677f1a517fca74111c5e9f79b7f9305ea&index=16&play&preload","type":"media"}
ответ
3628.279 [PUB] return 5 com.webos.media (/var/run/ls2/jpn9J7) com.webos.media.client._5IC7T01btpYJEV (/var/run/ls2/vnsgcd) {"errorCode":0,"returnValue":true,"errorText":"","mediaId":"_MQUBT01X5MiTj4"}

после load происходит подписка на события по mediaId, в числе которых возвращается sourceinfo - инфа об источнике в т.ч. количестве и языках субтитров и дорожек
описание метода subscribe
https://www.webosose.org/docs/reference/ls2-api/com-webos-media/#subscribe
https://www.webosose.org/docs/reference/ls2-api/com-webos-media/#sourceinfo
пример возвращаемого sourceInfo из лога шины webOS
3640.414 [PRV] return 5 com.webos.pipeline._MQUBT01X5MiTj4 (/var/run/ls2/lWULGd) com.webos.pipelinectrl._MQUBT01X5MiTj4 (/var/run/ls2/1XB7fo) «{"sourceInfo":{"numPrograms":1,"container":"mkv","seekable":true,"trickable":true,"programInfo":[{"duration":1295552,"numAudioTracks":4,"audioTrackInfo":[{"bitRate":0,"language":"ru","codec":"ac3","sampleRate":48,"channels":2,"audioType":0},{"bitRate":0,"language":"ru","codec":"ac3","sampleRate":48,"channels":2,"audioType":0},{"bitRate":0,"language":"ru","codec":"ac3","sampleRate":48,"channels":2,"audioType":0},{"bitRate":0,"language":"en","codec":"ac3","sampleRate":48,"channels":6,"audioType":0} ],"numVideoTracks":1,"videoTrackInfo":[{"angleNumber":0,"level":3.1,"width":1280,"height":720,"codec":"H264","profile":"high","frameRate":23.976,"progressive":true} ],"numSubtitleTracks":2,"subtitleTrackInfo":[{"language":"ru","type":"text"},{"language":"en","type":"text"} ]} ],"mediaId":"_MQUBT01X5MiTj4"}}

формат методов для переключения дорожек и субтитров
(они не описаны тут https://www.webosose.org/docs/reference/ls2-api/com-webos-media/)

вкл/выкл отображения субтитров
(параметр enable значение true/false, mediaId - id воспроизводимого потока полученный при запуске)

 webOS.service.request("luna://com.webos.media", {
	    method:"setSubtitleEnable",
	    parameters: { 
			"mediaId": "_MQUBT01X5MiTj4",
			"enable": true
			},
	      onSuccess: function (result) {
                 console.log(JSON.stringify(result));
		}
	      },
	      onFailure: function (result) {
	        console.log( "[fail][" + result.errorCode + "] " + result.errorText );
	        }
	 });

переключение дорожек и субтитров
( параметр type - audio для дорожек, text для субтитров, index - номер дорожки/субтитров, mediaId - id воспроизводимого потока полученный при запуске)

 webOS.service.request("luna://com.webos.media", {
	    method:"selectTrack",
	    parameters: {
			"type": "audio",
			"index": 1,
			"mediaId": "_MQUBT01X5MiTj4"
			},
	      onSuccess: function (result) {
                 console.log(JSON.stringify(result));
		},
	      onFailure: function (result) {
	        console.log( "[fail][" + result.errorCode + "] " + result.errorText );
	        }
	 });
@yumata
Copy link
Owner

yumata commented Oct 26, 2021

Потестил, вся проблема в том, что когда использую метод load, то запускается отдельное окно, как будто плеер запустил без интерфейса.
Похоже не как не получить субтитры :(

@aabytt
Copy link
Contributor Author

aabytt commented Oct 26, 2021

для рутованных девайсов останется способ получать "незаконным" путём mediaId и управлять сабами и дорогами.
доделаю и выкачу скрипт для этого
не знаешь как мне имея mediaId получать в js события которые вспоследствии генерируются? я пробовал - первый ответ приходит после подписки и всё, а в консоли webos после загрузки и старта видео прилетает sourceInfo и другие события но их уже не могу спарсить, чтобы вычитать сколько дорожек и сабов и какой их язык.

@aabytt
Copy link
Contributor Author

aabytt commented Oct 26, 2021

вот пример что происходит в шине, нужно получать в приложение этот sourceInfo через запрос вида webOS.service.request("luna://com.webos.media", { method:"subscribe"... }

3628.281        [PUB]   call    8               com.webos.media.client._5IC7T01btpYJEV (/var/run/ls2/vnsgcd)    com.webos.media (/var/run/ls2/jpn9J7)           (null)          //subscribe     «{"mediaId":"_MQUBT01X5MiTj4"}»
3628.955        [PUB]   return  8               com.webos.media (/var/run/ls2/jpn9J7)           com.webos.media.client._5IC7T01btpYJEV (/var/run/ls2/vnsgcd)    «{"subscription":true}»
3628.288        [PUB]   return  8               com.webos.media (/var/run/ls2/jpn9J7)           com.webos.media.client._5IC7T01btpYJEV (/var/run/ls2/vnsgcd)    «{"errorCode":0,"returnValue":true,"errorText":"","mediaId":"_MQUBT01X5MiTj4"}»
3629.907        [PUB]   return  8               com.webos.media (/var/run/ls2/jpn9J7)           com.webos.media.client._5IC7T01btpYJEV (/var/run/ls2/vnsgcd)    «{"streamingInfo":{"instantBitrate":0,"totalBitrate":0,"mediaId":"_MQUBT01X5MiTj4"}}»
...
3640.405        [PUB]   return  8               com.webos.media (/var/run/ls2/jpn9J7)           com.webos.media.client._5IC7T01btpYJEV (/var/run/ls2/vnsgcd)    «{"sourceInfo":{"numPrograms":1,"container":"mkv","seekable":true,"trickable":true,"programInfo":[{"duration":1295552,"numAudioTracks":4,"audioTrackInfo":[{"bitRate":0,"language":"ru","codec":"ac3","sampleRate":48,"channels":2,"audioType":0},{"bitRate":0,"language":"ru","codec":"ac3","sampleRate":48,"channels":2,"audioType":0},{"bitRate":0,"language":"ru","codec":"ac3","sampleRate":48,"channels":2,"audioType":0},{"bitRate":0,"language":"en","codec":"ac3","sampleRate":48,"channels":6,"audioType":0}                ],"numVideoTracks":1,"videoTrackInfo":[{"angleNumber":0,"level":3.1,"width":1280,"height":720,"codec":"H264","profile":"high","frameRate":23.976,"progressive":true}                ],"numSubtitleTracks":2,"subtitleTrackInfo":[{"language":"ru","type":"text"},{"language":"en","type":"text"}                ]}        ],"mediaId":"_MQUBT01X5MiTj4"}}»
...

@aabytt
Copy link
Contributor Author

aabytt commented Oct 26, 2021

всё просто оказалось
добавил параметр subscribe: true и вуаля )
после получения sourceinfo можно сделать unsubscribe

function subscribe(mediaId) {
                webOS.service.request("luna://com.webos.media", {
                        method: "subscribe",
                        parameters: {
                        "mediaId": mediaId,
                        "subscribe": true
                        },
                                onSuccess: function (result) {
                                        console.log("[Subscribed]" + JSON.stringify(result));

                                 },
                                onFailure: function (result) {
                                        console.log("[failed to subscribe]" + JSON.stringify(result));
                                 }
                        });
        }

image

@aabytt aabytt closed this as completed Oct 29, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants