PDA

View Full Version : ذخیره stream های آنلاین رادیویی mpeg



raravaice
شنبه 04 اسفند 1386, 14:48 عصر
سلام

دوستان اگر اطلاع داشته باشن توی اینترنت انواع رادیو های آنلاین وجود داره که شما فقط قادر به گوش کردن صوت اونها هستید و با ابزار موجود نمیتونید صوت مربوط را از جایی دانلود یا ذخیره کنید برنامه زیر به همین منظور تهیه شده تا شما به راحتی بتونید یک stream مبتنی بر TCP و HTTP رو با همان کیفیت در حال پخش ذخیره کنید.
البته من چند تا کانال رادیویی قابل استفاده هم به صورت کامنت گزاشتم و دوستان هر کانالی رو که تمایل داشتن از روش صوت ذخیره کنن میتونن از کامنت در بیارن و برنامه رو اجرا کنن.

البته در نظر داشته باشید این برنامه رو من برای استفاده شخصی نوشته بودم و اصلا دنبال نوشتن برنامه سمت سرورش بودم که در خلل کار این برنامه رو ایجاد کردم گفتم خالی از لطف نیست بزارمش اینجا.

البته سعی کردم با #C هم برنامه رو وقف بدم ولی از اونجایی که من #C کم کار میکنم نمیدونم چرا کند عمل میکرد ولی به هر حال این سورس فوق العاده کار میکنه.



Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Module Module1
Dim networkStream As NetworkStream
Dim sendBytes As ()
Dim bytes(65536) As Byte
Dim readbyte As Integer
Sub Main()
Dim tcpClient As New System.Net.Sockets.TcpClient()
'tcpClient.Connect("127.0.0.1", 8282) 'Test Local
'tcpClient.Connect("192.168.1.3", 5044) 'Test On Lan
'tcpClient.Connect("mega2.radioserver.co.uk", 8258)'2ng
tcpClient.Connect("160.79.128.61", 7836) 'Love Music
'tcpClient.Connect("160.79.128.61", 7826)'A Beatles Tribute
'tcpClient.Connect("160.79.128.62", 6618)'Best 80
'tcpClient.Connect("208.122.59.30", 7796)'Solo Piano
'tcpClient.Connect("160.79.128.62", 6128)'Modern
'tcpClient.Connect("160.79.128.40", 7816)'Jazz Piano
'tcpClient.Connect("208.122.59.30", 7686)'Oldies
'tcpClient.Connect("208.122.59.30", 7070) 'Classical Guitar


networkStream = tcpClient.GetStream()

If networkStream.CanWrite And networkStream.CanRead Then
sendBytes = Encoding.ASCII.GetBytes("GET / HTTP/1.1" & vbCrLf & "User-Agent: NSPlayer/10.0.0.3700 WMFSDK/10.0" & vbLf & vbLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
Dim i As Integer
For i = 0 To 50
bytes.Clone()
readbyte = networkStream.Read(bytes, 0, 65536) 'CInt(tcpClient.ReceiveBufferSize)))
'Console.Clear()
'Console.Write(i)
Dim thre As New Threading.Thread(AddressOf sav_)
Threading.Thread.Sleep(1000)
'If i > 0 Then
thre.Start()
'thre.Join()
Console.WriteLine(readbyte)
Next
networkStream.Close()
End If

End Sub
Sub sav_()
Dim v As New FileStream("c:\Radio.mp3", FileMode.Append)
v.Write(bytes, 0, readbyte)
v.Close()
End Sub

End Module
[B]راهنمایی : با زیاد کردن شماره حلقه For موجود میتونید زمان بیشتری از stream رو ذخیره کنید.

موفق باشید

کف مرتب فراموش نشه :تشویق:

ftmotlagh
شنبه 04 اسفند 1386, 17:49 عصر
خیلی عالی بود
میشه یکم بیشتر در باره ی برنامه توضیح دهید...
تشکر

raravaice
شنبه 04 اسفند 1386, 18:04 عصر
محتوا کاملا واضح و سادست که بر اساس یک درخواست مبتنی بر http هست.

GET یکی از دستورات این پروتکل هست که شما میتونی از مقصد درخواست پاسخ بدی حالا نکته ریز قضیه اینجاست که سرور اگر بفهمه که در خواست از سوی یک مرورگره stream رو برای شما نمیفرسته که اونم از روی header user-agent شناسایی میشه پس من خودم رو مدیا پلیر جا زدم.;)


NSPlayer/10.0.0.3700 WMFSDK/10.0
حالا توی اولی ارسال از سوی سرور هدر های معرفی کانال رادیویی ارسال میشه و از ارسال دوم به بعد stream صوت میاد که هر یک ثانیه ذخیره میشه.
البته نیاز به یه بافر هست که برنامه بتونه با پهنای باند کاربر و سرور خودش رو مطابقت بده برای همین عدد 65536 رو در نظر گرفتم که بتونه تا 128kbps رو بافر و ذخیره کنه.
از thread هم برای این استفاده شده که هیچ دیتایی به علت معطل موندن درخواست از بین نره.

موفق باشید

mojtaba-saleh
شنبه 04 اسفند 1386, 20:35 عصر
سلام
اینجوری که من فهمیدم شما برنامه ای برای ساخت رادیو آنلاین نوشتید. درسته؟
آیا میشه نحوه ساخت رادیوهای آنلاین رو توضیح بدید؟
ممنون

raravaice
شنبه 04 اسفند 1386, 20:46 عصر
سلام
اینجوری که من فهمیدم شما برنامه ای برای ساخت رادیو آنلاین نوشتید. درسته؟
آیا میشه نحوه ساخت رادیوهای آنلاین رو توضیح بدید؟
خوشحالم از فید بک مناسب این سورس.

اینی که اینجاست سمت کلاینتش هست که برای تست برنامه سرورش نوشتم .راستش کار خیلی راحت تر از این صحبتاست که منو شما فکر میکنیم "چون من خودم 1 ساله تمامه که دنبالشم"

ولی یه چیزایی نوشتم که هنوز درست حسابی کار نمیکنه و محتاج چندتا dll و یه فایل exe هست برای convert.

صورت کلی کار اینه که : بر اساس فرمت فایل mp3,wmv,ogg و... فایل رو بر اساس حجم دیتای هر ثانیه مثلا 24kbps یا 56kbps (بستگی داره سرور چه پهنای باندی داشته باشه و مقرون به صرفه باشه) میخونن و عینا ارسال میکنن به متقضی کانکت شده البته این تکنیک فقط برای stream های مبتنی به HTTP به کار میره و mms و RTSP داستانش فرق داره که هنوز اطلاعات جامعی ازش جمع نکردم.

هر وقت کار تموم بشه مطمئن باشید توی همین تاپیک اعلامش میکنم.
البته بعد از استفاده تجاری مد نظرم.;)
موفق باشید

mojtaba-saleh
یک شنبه 05 اسفند 1386, 21:05 عصر
آیا رادیو آنلاین ایرانی هم وجود داره که بشه به برنامه اضافش کرد؟ منظورم آی پیشه

raravaice
یک شنبه 05 اسفند 1386, 21:12 عصر
آیا رادیو آنلاین ایرانی هم وجود داره که بشه به برنامه اضافش کرد؟ منظورم آی پیشه


تا حالا دنبالش نبودم.
ولی شما از HostName منبع هم میتونی استفاده کنی و استفاده از ip الزامی نیست.

موفق باشید

raspotineiran
سه شنبه 20 فروردین 1387, 12:53 عصر
سلام
من میخوام یکسری شبکه های فارسی زبان رو برای استفاده کاربران بزارم تو سایتم یه تعداد لینک ثابت mms و rtsp هم پیدا کردم مثل:
mms://live.iransima.ir/Pop_Music
rtsp://38.117.88.71/pen+?sid=903326201
- اگر از سایت glwiz.com دیدن کرده باشید میبینید که در پنجره pop-up مربوطه امکان انتخاب شبکه دلخواه وجود دارد حال سوال اینست که چطور میتوان به لینک سورس شبکه های این سایت دست یافت ؟ نقش sidدر این لینکها چیه ؟ فکر کنم اگه یه sid دائم پیدا کنیم همیشه لینک فعال است.

اینم صفحه pop up سایت glwiz.com
http://barnamenevis.org/forum/attachment.php?attachmentid=15811&d=1207111257

raravaice
سه شنبه 20 فروردین 1387, 13:14 عصر
چطور میتوان به لینک سورس شبکه های این سایت دست یافت

منظورت رو واضحتر بگو.

بهتر نیست برای سئوالت یه تاپیک جدید باز کنی؟

موفق باشید

mostafa_sgh
شنبه 19 مرداد 1387, 05:33 صبح
سلام دوست عزیز

من چند وقت پیش با برنامت کار کردم ، دستتون درد نکنه

میخواستم یه کاری روش انجام بدم و اونم اینه که همزمان با ذخیره شدن پخش بشه !

البته این کار رو روی فایلی که ذخیره میشه انجام دادم ولی فقط تا اونجائی که ذخیره شده رو پخش میکنه .( استریم های جدید که به فایل اضافه میشه رو نمی خونه )

آیا این حالت ممکنه ؟

البته توی اینکار یه برنامه Console و یه برنامه Windows نوشتم و توی برنامه ویندوز یه لیست از رادیو ها وجود داره که کاربر با انتخاب اون و زدن دکمه پخش یه سری پارامتر به برنامه کنسول میفرسته و اون کارائی که اون بالا نوشتید رو انجام میده .( اگه راه حل بهتری دارید بفرمائید )


راهنمائی بفرمائید

raravaice
شنبه 19 مرداد 1387, 11:30 صبح
همه برنامه رو ببر روی ویندوز یه Stream بده به Media Player یکی هم بزار ذخیره بشه.

موفق باشید

mostafa_sgh
شنبه 19 مرداد 1387, 16:27 عصر
ببخشید ، فقط یه مشکلی داشتم

اینکه تو این برنامه ویندوز یه دکمه Start و یه دکمه Stop دارم.

وقتی از Console استفاده نمیکردم ( حالتس که شما فرمودید ) برنامه من هنگ میکرد و نمیتونستم Stop کنم.

البته شاید تو کار با Threading یه خورده مشکل داشته باشم .

ولی خوب چیکار کنم ؟

raravaice
شنبه 19 مرداد 1387, 16:30 عصر
البته شاید تو کار با Threading یه خورده مشکل داشته باشم .
احتمالا که مشکل همین باشه!
یا سرعت اتصال شما ضعیف هست که دریافت Stream طول میکشه!

موفق باشید

mostafa_sgh
شنبه 19 مرداد 1387, 16:45 عصر
من سرعتم خوبه (Kb/s 128 )

ولی چون توی حلقه نامحدود قرار میگیره( برنامه هنگ میکنه ) و من نمیخوام برای حلقه محدودیت بزارم

میخوام هر وقت کاربر دکمه Stop رو زد حلقه متوقف بشه .

ولی نمی تونم این کار رو بکنم .

raravaice
یک شنبه 20 مرداد 1387, 14:02 عصر
ولی چون توی حلقه نامحدود قرار میگیره( برنامه هنگ میکنه ) و من نمیخوام برای حلقه محدودیت بزارم

همین حلقه هم توی thread بزارش.

موفق باشید