- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте, необходима связь Webrtc - kurento - rtp - ffmpeg - rtmp youtube live
Первая попловина готова Webrtc - kurento - rtp и вторя тоже работает ffmpeg - rtmp youtube live
Не могу их связать. То есть с помощью kurento генерируется sdp файл, а вот дальше не идет в ffmpeg
Если просто медиа файл ставлю в ffmpeg то трансляция запускается.
Делаю все на nodejs вот код:
pipeline.create("RtpEndpoint", {}, function(error, rtpEndpoint) {
if (error) {
console.log("Recorder problem");
return sendError(res, 500, error);
}
console.log("Creating WebRtcEndpoint");
pipeline.create('WebRtcEndpoint', function(error, webRtcEndpoint) {
if (error) {
return sendError(res, 500, error);
}
console.log("Processing sdpOffer at server and generating sdpAnswer");
webRtcEndpoint.processOffer(sdpOffer, function(error, sdpAnswer) {
if (error) {
webRtcEndpoint.release();
return sendError(res, 500, error);
}
console.log("Connecting loopback");
webRtcEndpoint.connect(webRtcEndpoint, function(error) {
if(error){
webRtcEndpoint.release();
return sendError(res, 500, error);
}
console.log("Sending sdpAnswer to client");
console.log(sdpAnswer);
webRtcEndpoint.connect(rtpEndpoint, function(error) {
if(error) {
webRtcEndpoint.release();
return sendError(res, 500, error);
}
rtpEndpoint.generateOffer(function(error, offer) {
fs.writeFile('test.sdp',offer);
console.log("RTP OFFER GENERATED.");
});
});
res.type('application/sdp');
res.send(sdpAnswer);
});
});
});
var fs = require('fs'),
ffmpeg = require('fluent-ffmpeg');
// open input stream
var infs = fs.createReadStream('test.sdp');
infs.on('error', function(err) {
console.log(err);
});
// create new ffmpeg processor instance using input stream
// instead of file path (can be any ReadableStream)
var proc = ffmpeg(infs)
.preset('flashvideo')
// setup event handlers
.on('end', function() {
console.log('done processing input stream');
})
.on('error', function(err) {
console.log('an error happened: ' + err.message);
})
// save to file
.save('rtmp://a.rtmp.youtube.com/live2/key-youtube-live');
});
Может кто-то уже делал подобное, помогите разобраться пожалуйста, что не так.
Вообще смысл всего, организовать прямую трансляцию с помощью webrtc (брать изображение с камеры пк, ноута или смартфона) и отправлять на rtmp youtube live
Это некий аналог hengauts on air
Так и открывайте test.sdp сразу в ffmpeg:
var ffmpegProc = ffmpeg('test.sdp')...Только ffmpeg стартуйте когда файл создан:
rtpEndpoint.generateOffer(function(error, offer) {fs.writeFile('test.sdp',offer);
ffmpegProc.save('rtmp://a.rtmp.youtube.com/live2/key-youtube-live')
});
А можно чуть подробнее код, если не сложно, я и так вроде его запускаю после создания и сразу в ffmpeg
Мне кажется вы путаете - "я и так вроде его запускаю после создания". js язык асинхронный и в приведенном вами коде ffmpeg может запуститься раньше.
Сначала нужно инициализировать ffmpeg (перенесите этот код выше места запуска kurento):
Обратите внимание что ffmpegProc.save() не вызывается, иначе ffmpeg запустится, а файла test.sdp еще нет. Еще модифицировал .on('error').
Далее запускаете kurento, весь код цитировать не буду, просто замените. И в этом месте уже запускается ffmpeg:
rtpEndpoint.generateOffer(function(error, offer) {// создается файл
fs.writeFile(sdpFile, offer, (err) => {
// запускается ffmpeg
ffmpegProc.save('rtmp://a.rtmp.youtube.com/live2/key-youtube-live');
console.log("RTP OFFER GENERATED.");
});
});
В первом примере я тоже допустил ошибку, ffmpeg надо запускать в колбэке записи файла.
Ну и не забудьте добавить проверку ошибок. Возможно файл не сможет создаться.
Можно проверить пошагово, без ffmpeg. Запустите из консоли (подразумевается что тестируете локально):
ffplay путь_до_файла_test.sdp Если все в порядке, увидите окно с трансляцией.
Еще, для упрощения тестирования, в ffmpegProc.save() можно указать файл, например test.mp4. В него запишется трансляция.
Вот такую ошибку синтаксиса дает https://yadi.sk/i/84omHTHl3DAJAn
У вас очень старая версия node.js.
Замените
fs.writeFile(sdpFile, offer, (err) => {
на
fs.writeFile(sdpFile, offer, function (err) {
Можно проверить пошагово, без ffmpeg. Запустите из консоли (подразумевается что тестируете локально):
ffplay путь_до_файла_test.sdp Если все в порядке, увидите окно с трансляцией.
Еще, для упрощения тестирования, в ffmpegProc.save() можно указать файл, например test.mp4. В него запишется трансляция.
И так тоже не работает, но я не локально, пробую, может поэтому, хотя если обычный файл из папки беру то в консоли воспроизводит, а sdp просто вот так делает https://yadi.sk/i/WHrKMPWW3DANcc тоесть ничего не происходит, а дает сново строку с вводом команды.
---------- Добавлено 06.02.2017 в 15:51 ----------
И еще вот такую ошибку дает https://yadi.sk/i/obUvU8Gj3DARcD
---------- Добавлено 06.02.2017 в 15:53 ----------
Когда я пробовал из консоли запускать такую же ошибку давал, видимо тут еще как-то не так генерируется sdp
Когда я пробовал из консоли запускать такую же ошибку давал, видимо тут еще как-то не так генерируется sdp
Да, похоже нет файла.
Добавьте проверку:
rtpEndpoint.generateOffer(function(error, offer) {// создается файл
fs.writeFile(sdpFile, offer, function (err) {
if(err) {
console.error('SDP FILE ERROR', err);
return;
}
// запускается ffmpeg
ffmpegProc.save('rtmp://a.rtmp.youtube.com/live2/key-youtube-live');
console.log("RTP OFFER GENERATED.");
});
});
Да, файл генеририруется вот его содержимое
Покажите вывод ffmpeg -i файл
Вот такой? https://yadi.sk/i/C7t0y4UQ3DAu6o
з.ы. Не сочтите за наглость, но я Вам в скайп стукнул :)