поток только аудио с элементами управления для хромирования из html5 javascript через браузер. Мне нужно передать аудио только для googlechromecast с помощью моего компьютера. Я использую браузер Chrome. все, что мне нужно сделать, это потоковое аудио только с помощью моих элементов управления и даже изображения на экране песни, которую я играю. В настоящее время я не могу этого добиться.поток только аудио с элементами управления для хромирования от html5 javascript
var applicationID = 'some id';
var namespace = 'some namespace';
var session = null;
/**
* Call initialization for Cast
*/
if (!chrome.cast || !chrome.cast.isAvailable) {
setTimeout(initializeCastApi, 1000);
}
/**
* initialization
*/
function initializeCastApi() {
var sessionRequest = new chrome.cast.SessionRequest(applicationID);
var apiConfig = new chrome.cast.ApiConfig(sessionRequest,
sessionListener,
receiverListener);
chrome.cast.initialize(apiConfig, onInitSuccess, onError);
};
/**
* initialization success callback
*/
function onInitSuccess() {
appendMessage("onInitSuccess");
}
/**
* initialization error callback
*/
function onError(message) {
appendMessage("onError: "+JSON.stringify(message));
}
/**
* generic success callback
*/
function onSuccess(message) {
appendMessage("onSuccess: "+message);
}
/**
* callback on success for stopping app
*/
function onStopAppSuccess() {
appendMessage('onStopAppSuccess');
}
/**
* session listener during initialization
*/
function sessionListener(e) {
appendMessage('New session ID:' + e.sessionId);
session = e;
session.addUpdateListener(sessionUpdateListener);
session.addMessageListener(namespace, receiverMessage);
}
/**
* listener for session updates
*/
function sessionUpdateListener(isAlive) {
var message = isAlive ? 'Session Updated' : 'Session Removed';
message += ': ' + session.sessionId;
appendMessage(message);
if (!isAlive) {
session = null;
}
};
/**
* utility function to log messages from the receiver
* @param {string} namespace The namespace of the message
* @param {string} message A message string
*/
function receiverMessage(namespace, message) {
appendMessage("receiverMessage: "+namespace+", "+message);
};
/**
* receiver listener during initialization
*/
function receiverListener(e) {
if(e === 'available') {
appendMessage("receiver found");
}
else {
appendMessage("receiver list empty");
}
}
/**
* stop app/session
*/
function stopApp() {
session.stop(onStopAppSuccess, onError);
}
/**
* send a message to the receiver using the custom namespace
* receiver CastMessageBus message handler will be invoked
* @param {string} message A message string
*/
function sendMessage(message) {
if (session!=null) {
session.sendMessage(namespace, message, onSuccess.bind(this, "Message sent: " + message), onError);
}
else {
chrome.cast.requestSession(function(e) {
session = e;
session.sendMessage(namespace, message, onSuccess.bind(this, "Message sent: " + message), onError);
}, onError);
}
}
/**
* append message to debug message window
* @param {string} message A message string
*/
function appendMessage(message) {
console.log(message);
var dw = document.getElementById("debugmessage");
dw.innerHTML += '\n' + JSON.stringify(message);
};
/**
* utility function to handle text typed in by user in the input field
*/
function update() {
sendMessage(document.getElementById("input").value);
}
/**
* handler for the transcribed text from the speech input
* @param {string} words A transcibed speech string
*/
function transcribe(words) {
sendMessage(words);
}
, пожалуйста, помогите. любезно сообщите мне, есть ли способы достичь этого.
Добавление другого кода, который я смог модифицировать в соответствии со своими потребностями. Но проблема в том, что она только соединяется. вкладки показывают conencted и play, но я не слышу звук с chromecast (TV). Пожалуйста, помогите мне в потоковой передаче аудио.
'use strict';
var DEVICE_STATE = {
'IDLE' : 0,
'ACTIVE' : 1,
'WARNING' : 2,
'ERROR' : 3,
};
/**
* Constants of states for CastPlayer
**/
var PLAYER_STATE = {
'IDLE' : 'IDLE',
'LOADING' : 'LOADING',
'LOADED' : 'LOADED',
'PLAYING' : 'PLAYING',
'PAUSED' : 'PAUSED',
'STOPPED' : 'STOPPED',
'SEEKING' : 'SEEKING',
'ERROR' : 'ERROR'
};
var streamCaster = function(ele,url)
{
this.playUrl = url;
this.castPlayer =null;
this.receiverAvailable = null;
this.init(ele);
this.initCastPlayer();
console.log("Playing URL "+this.playUrl);
}
streamCaster.prototype.init = function(ele)
{
console.log("Init Player");
this.castPlayer = document.getElementById(ele);
this.castPlayer.addEventListener('loadeddata', this.onMediaLoadedLocally.bind(this));
}
streamCaster.prototype.onMediaLoadedLocally = function()
{
console.log("Playing Audio");
this.castPlayer.play();
};
streamCaster.prototype.initCastPlayer = function() {
console.log("Init Chrome-Cast");
if (!chrome.cast || !chrome.cast.isAvailable) {
console.log("No Support For Chrome Cast..Re Trying");
setTimeout(this.initCastPlayer.bind(this), 1000);
return;
}
var applicationID = 'Yr ID';
// auto join policy can be one of the following three
var autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED;
//var autoJoinPolicy = chrome.cast.AutoJoinPolicy.PAGE_SCOPED;
//var autoJoinPolicy = chrome.cast.AutoJoinPolicy.TAB_AND_ORIGIN_SCOPED;
// request session
var sessionRequest = new chrome.cast.SessionRequest(applicationID);
var apiConfig = new chrome.cast.ApiConfig(sessionRequest,
this.sessionListener.bind(this),
this.receiverListener.bind(this),
autoJoinPolicy);
chrome.cast.initialize(apiConfig, this.onInitSuccess.bind(this), this.onError.bind(this));
}
streamCaster.prototype.onError = function() {
console.log("error");
};
streamCaster.prototype.onInitSuccess = function() {
console.log("init success");
this.startChromeCast();
};
streamCaster.prototype.sessionListener = function(e) {
this.session = e;
if(this.session)
{
if(this.session.media[0])
{
this.onMediaDiscovered('activeSession', this.session.media[0]);
this.syncCurrentMedia(this.session.media[0].media.contentId);
this.selectMediaUpdateUI(this.currentMediaIndex);
}
else
{
this.loadMedia(this.currentMediaIndex);
}
this.session.addUpdateListener(this.sessionUpdateListener.bind(this));
}
}
streamCaster.prototype.loadMedia = function(mediaIndex) {
if (!this.session)
{
console.log("no session");
return;
}
//console.log("loading..." + this.mediaContents[mediaIndex]['title']);
var mediaInfo = new chrome.cast.media.MediaInfo(this.playUrl);
mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();
mediaInfo.metadata.metadataType = chrome.cast.media.MetadataType.GENERIC;
mediaInfo.contentType = 'audio/mp3';
mediaInfo.metadata.title = "Castlevania Symphony Of The Night";
// mediaInfo.metadata.images = [{'url': MEDIA_SOURCE_ROOT + this.mediaContents[mediaIndex]['thumb']}];
var request = new chrome.cast.media.LoadRequest(mediaInfo);
request.autoplay = this.autoplay;
request.currentTime = this.castPlayer.currentTime;
// this.castPlayer.pause();
// this.castPlayer = PLAYER_STATE.STOPPED;
//
//
// this.castPlayerState = PLAYER_STATE.LOADING;
this.session.loadMedia(request,
this.onMediaDiscovered.bind(this, 'loadMedia'),
this.onLoadMediaError.bind(this));
};
streamCaster.prototype.onMediaDiscovered = function(how, mediaSession) {
this.currentMediaDuration =-1;
this.currentMediaSession = mediaSession;
this.currentMediaSession.addUpdateListener(function()
{
console.log("binding");
});
};
streamCaster.prototype.onLoadMediaError = function(e) {
console.log("media error");
};
streamCaster.prototype.sessionUpdateListener = function(isAlive) {
if (!isAlive)
{
this.session = null;
this.deviceState = DEVICE_STATE.IDLE;
this.castPlayerState = PLAYER_STATE.IDLE;
this.currentMediaSession = null;
var online = navigator.onLine;
if(online == true)
{
// continue to play media locally
this.playMediaLocally();
}
}
};
streamCaster.prototype.playMediaLocally = function() {
this.castPlayer.load();
this.castPlayer.play();
};
streamCaster.prototype.receiverListener = function(e) {
if(e === 'available') {
this.receiverAvailable = true;
console.log("receiver found");
}
else {
console.log("receiver list empty");
}
}
streamCaster.prototype.startChromeCast = function() {
console.log("launching app...");
chrome.cast.requestSession(
this.sessionListener.bind(this),
this.onLaunchError.bind(this));
if(this.timer) {
clearInterval(this.timer);
}
};
streamCaster.prototype.onLaunchError = function() {
console.log("launch error");
};
привет, мне нелегко делать звуковые работы. Я убираю код, который мне удалось изменить для звука, но все равно не работает. brwsder способен подключаться к чхироме, но не может слышать звук – Siddharth
Вы видите ошибки в журнале браузера? Использовали ли вы инструменты Chrome Dev, чтобы узнать, есть ли проблемы на ресивере? –
Я могу исправить эту проблему. Я использовал nodejs для размещения моего локального mp3. это было похоже на http: //localhost/static/audio/mysong.mp3. поскольку chromecast не смог получить к нему доступ, я получал startErrors. После перемещения моего mp3 через Интернет, как и в каком-то веб-хостинге, он работал безупречно. Спасибо за вашу помощь. но есть еще одна вещь, элементы управления, похоже, не работают. вышеприведенный код i, который вставлен, является незаполненным кодом, разделенным до минимума. любой, кто хочет реализовать аудио/видео, может использовать этот код. – Siddharth