crtmpserver yapılandırması hakkında bilgi

Başlatan zindanbekcisi, 25 Ağustos 2014 - 15:40:24

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

zindanbekcisi

hizmet verdiğimiz bir firma da ip kamera görüntüsünü web sitesin de yayınlamak istiyoruz giriş yoğun olacağı için bende rtmp/rtsp server kurup yayını bu server üzerinden yapmayı planlıyorum.

Araştırdığımda ubuntu üzerinde crtmpserver ile bunu yapa bileceğim bilgisine ulaştım ama ingilizce olarak bile fazla bilgi bulamadım. sanal server olarak ubuntu 14.04 kurulumunu yaptım crtmpserver kurulumunu paket yöneticisinden yaptım ama yapılandırma hakkında desteğe ihtiyacım var.

yardımcı ola bilecek arkadaşlar varsa çok sevinirim.

ilginiz için şimdiden teşekkür ederim .

burk

Konuya uzağım o yüzden daha fazla doküman bulabileceğini düşündüğüm ve forumda konuşulmuş alternatif iki bağlantı geçeyim:
https://forum.ubuntu-tr.net/index.php?topic=6566.5
https://forum.ubuntu-tr.net/index.php?topic=34682.0

üvenlik kamerası görüntüsü de bir tür yayın olduğu için işe yarayabileceğini düşünüyorum.

zindanbekcisi

cevap için teşekkürler linkleri inceledim ve bahsi geçen wowza deneme sürümünü kurdun sistemime fakat her ay belli bir ücret ödemek  bizim için sorun değil fakat bunu müşteriye anlatmak ve ödeme ala bilmek sorun o yüzden crtmpserver hakkında bilgi arıyorum. ubuntu server üzerinde yapılandırmayı yapa bilirsek bizim için daha iyi olacağını düşünüyorum.

burk

Peki ilgili yazılım için şöyle bir yapılandırma anlatımı buldum, bunu denemiş miydin? İstersen birlikte bunun üzerinden yapılandırmaya çalışabiliriz:
http://www.howtoforge.com/streaming-your-desktop-with-audio-and-webcam-overlay-in-a-browser-using-ffmpeg-crtmpserver-and-flowplayer

if


zindanbekcisi

@ if  uç birimde servi çalıştırdığımda  çalışır görünüyor

@burk  verdiğin linki inceledim faydalı olabilir fakat ben daha çok rtsp üzerinden canlı akış yayınlamak istiyorum.

http://ubuntuforums.org/showthread.php?t=2136916

yukarıdaki linkte bir anlatım var uygulamaya çalıştım ama başarılı olamadım, anlatımda ayarların crtmpserver.lua dosyası içine yapılması gerektiği yazıyor fakat benim sistemimde crtmpserver.lua dosyasının içeriğine baktığımda aşağıdakine benzer bi kod yok

externalStreams =
{
--[[
{
uri="rtsp://fms20.mediadirect.ro/live2/realitatea/realitatea",
localStreamName="rtsp_test",
forceTcp=true
},
{
uri="rtmp://edge01.fms.dutchview.nl/botr/bunny",
localStreamName="rtmp_test",
swfUrl="http://www.example.com/example.swf";
pageUrl="http://www.example.com/";
emulateUserAgent="MAC 10,1,82,76",
}]]--

You can either remove the annotations or create a new uri as we will do:On our example we are using rtsp://apasfwl.apa.at:80/orf1_q6a/orf.sdp so we will create a new uri like this:

{
uri="rtsp://apasfwl.apa.at:80/orf1_q6a/orf.sdp",
localStreamName="stream"
},


bu kodların  /etc/crtmpserver/applications/proxypublish.lua  dosyasında mevcut hatta aynı dosya  /usr/share/crtmpserver-apps/proxypublish.lua  yolundada mevcut.

iki dosyada da belirtilen değişiklikleri kendi sistemime göre düzenledim fakat sonuca varamadım.

daha önceden de belirttiğim gibi wowza üzerinde şimdilik denediğimde stream çalışıyor fakat  crtmpserver üzerinde bir gelişme yok

cevaplarım biraz geç oluyor ama bu işi mutlaka çözmem gerek yardımlarınızı bekliyorum.

heartsmagic

/etc/crtmpserver/crtmpserver.lua dosyasının içeriği nasıl peki?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

zindanbekcisi

crtmpserver.lua   içeriği


confdir = "/etc/crtmpserver"
libdir = "/usr/lib/crtmpserver"

enabled_apps = confdir.."/enabled_applications.conf"
app_lib_path = libdir.."/applications"
logger_config_path = confdir.."/log_appenders.lua"

-- Print anything - including nested tables
function table_print (tt, indent, done)
done = done or {}
indent = indent or 0
if type(tt) == "table" then
for key, value in pairs (tt) do
io.write(string.rep (" ", indent)) -- indent it
if type (value) == "table" and not done [value] then
done [value] = true
io.write(string.format("[%s] => table\n", tostring (key)));
io.write(string.rep (" ", indent+4)) -- indent it
io.write("(\n");
table_print (value, indent + 7, done)
io.write(string.rep (" ", indent+4)) -- indent it
io.write(")\n");
else
io.write(string.format("[%s] => %s\n",
tostring (key), tostring(value)))
end
end
else
io.write(tt .. "\n")
end
end

function exists(fname)
local f = io.open(fname, "r")
if (f) then
return true
else
return false
end
end

-- Function generate "logAppenders" section for crtmpserver
function read_logappenders()
result = {}
dofile(logger_config_path)
result = logAppenders
return result
end

-- Function generate "applications" section for crtmpserver
-- Reads apps Lua script to main configuration section
function read_applications()
result = {}
local app_config
-- Must specify whre application libs can be found
result.rootDirectory = app_lib_path

-- Loads applications configuration listed in file "enabled_apps"
for app in io.lines(enabled_apps) do
app = (app:gsub("^%s*(.-)%s*$", "%1"))
application = nil
if ( app:match("^#.*$") or app:match("^$") or app:match("^\s+$") ) then
--print("string '"..app.."' is unneeded, skip it")
else
app_config = confdir.."/applications/"..app..".lua"
if (not exists(app_config)) then
print("Application configuration file '"..app_config.."' not found")
os.exit()
end
dofile(app_config)
if (application == nil) then
print("Configuration file '"..app_config.."' does not contain variable 'application'")
os.exit()
else
table.insert(result, application)
end
end
end
return result
end

-- Check if logger configuration exists
if (not exists(logger_config_path)) then
print("Logger configuration file '"..logger_config_path.."' not found");
return
end

-- Check if list of applications exists
if (not exists(enabled_apps)) then
print("Applications list file '"..enabled_apps.."' not found");
return
end

-- Main section of configuration.
-- This variable reads by crtmpserver as main configuration section
-- It must be always defined
configuration =
{
daemon = true,
pathSeparator = "/",
logAppenders = read_logappenders(),
applications = read_applications()
}
-- print("__________________________")
-- table_print(configuration)
-- print("__________________________")

heartsmagic

grep -R externalStreams /etc/crtmpserver ne diyor?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

zindanbekcisi

grep -R externalStreams /etc/crtmpserver   çıktısı


grep: /etc/crtmpserver/conf.d/users.lua: Erişim engellendi
/etc/crtmpserver/applications/flvplayback.lua: externalStreams =
/etc/crtmpserver/applications/flvplayback.lua~: externalStreams =
/etc/crtmpserver/applications/proxypublish.lua: externalStreams =
/etc/crtmpserver/applications/proxypublish.lua~: externalStreams =

burk

sudo grep -R externalStreams /etc/crtmpserver ne diyor peki?

zindanbekcisi

sudo grep -R externalStreams /etc/crtmpserver  çıktısı


/etc/crtmpserver/applications/flvplayback.lua: externalStreams =
/etc/crtmpserver/applications/flvplayback.lua~: externalStreams =
/etc/crtmpserver/applications/proxypublish.lua: externalStreams =
/etc/crtmpserver/applications/proxypublish.lua~: externalStreams =

if

@zindanbekcisi, ubuntuforums'daki örneğin size göre değiştirilmiş halini direk crtmpserver.lua içerisine kopyalayınca işe yaramıyor mu?

zindanbekcisi

@if  formda  crtmpserver.lua dosyasın da değişiklik yapılmasını söylüyor fakat sürüm farkındanmı bilmiyorum söylenen ayarlar crtmpserver.lua dosyasının içinde yok 

if

O zaman /etc/crtmpserver/conf.d/users.lua içeriğine bir bakalım. Adına bakarsak kullanıcıya ait değişikliklerin girilmesi gereken dosya gibi duruyor.

zindanbekcisi

user.lua içeriği

users=
{
broadcast="vbrick",
user1="password1",
user2="password2",
user3="password3",
gigi="spaima",
a="a",
}

realms=
{
{
name="My realm...",
method="Digest",
users={
"user1",
"user3"
},
},
{
name="My second realm...",
method="Basic",
users={
"user2",
"broadcast",
"user1",
"gigi"
},
}
}


if

Alakası yokmuş:) /etc/crtmpserver/applications/flvplayback.lua içeriğine bakalım.


zindanbekcisi

@if daha önce belirttiğim gibi formda ki örnekte değiştirilmesi gerektiği söylenen ayarlar bu dosyada var kendi ayarlarıma göre uri eklemesi de yaptım ama sonuç aynı  dosya içeriği aşağıda


application=
{
description="FLV Playback Sample",
name="flvplayback",
protocol="dynamiclinklibrary",
mediaFolder="/var/lib/crtmpserver/mediaFolder",
aliases=
{
"simpleLive",
"vod",
"live",
"WeeklyQuest",
"SOSample",
"oflaDemo",
},
acceptors =
{
{
ip="0.0.0.0",
port=6666,
protocol="inboundLiveFlv",
waitForMetadata=true,
},
{
ip="0.0.0.0",
port=9999,
protocol="inboundTcpTs"
},
{
ip="0.0.0.0",
port=7654,
protocol="inboundRawHttpStream",
crossDomainFile="/tmp/crossdomain.xml"
},
{
ip="0.0.0.0",
port=554,
protocol="inboundRtsp"
},

},
externalStreams =
{

{
uri="rtsp://fms20.mediadirect.ro/live2/realitatea/realitatea",
localStreamName="rtsp_test",
forceTcp=true
},
{
uri="rtmp://edge01.fms.dutchview.nl/botr/bunny",
localStreamName="rtmp_test",
swfUrl="http://www.example.com/example.swf";
pageUrl="http://www.example.com/";
emulateUserAgent="MAC 10,1,82,76",
},

},
validateHandshake=true,
keyframeSeek=true,
seekGranularity=1.5, --in seconds, between 0.1 and 600
clientSideBuffer=12, --in seconds, between 5 and 30
--generateMetaFiles=true, --this will generate seek/meta files on application startup
--renameBadFiles=false,
--enableCheckBandwidth=true,
authentication=
{
rtmp={
type="adobe",
encoderAgents=
{
"FMLE/3.0 (compatible; FMSc/1.0)",
"My user agent",
},
usersFile="/etc/crtmpserver/conf.d/users.lua"
},
rtsp={
usersFile="/etc/crtmpserver/conf.d/users.lua"
}
},
}


LinuxHacisi

Crtmpserver bilmem ama nginx ile yapabilirsiniz oldukca basittir ve ugrastirmaz
Linux And Windows System Specialist , Linux Hacısı, #DevOps #Linux #Windows #SysAdmin #GNU #Researcher

heartsmagic

Alıntı yapılan: MertcanGokgoz - 10 Eylül 2014 - 05:54:50
Crtmpserver bilmem ama nginx ile yapabilirsiniz oldukca basittir ve ugrastirmaz

Ne tesadüftür ki iki gün önce ben de Nginx'in bu özelliğini gördüm bir yerlerde, bir şeyleri araştırırken (alakasız bir konuydu). Aklıma bu başlık geldi fakat bir iki gündür foruma giremediğim için benden önce @MertcanGokgoz'e kısmet olmuş söylemek. Cidden çok da basit duruyor örneklere bakınca @zindanbekcisi. Birden fazla anlatım da bulabilirsin fakat ilk sıralarda gelenlerden:
https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/

Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.