Unreal Media Server - Delphijustin industries https://delphijustin.biz Making use out of things! Fri, 26 Mar 2021 20:11:13 +0000 en-US hourly 1 https://wordpress.org/?v=6.2.9 https://delphijustin.biz/wp-content/uploads/2025/10/cropped-dongwa-192-32x32.png Unreal Media Server - Delphijustin industries https://delphijustin.biz 32 32 Unreal DVR https://delphijustin.biz/unreal-dvr/?utm_source=rss&utm_medium=rss&utm_campaign=unreal-dvr https://delphijustin.biz/unreal-dvr/#comments Tue, 06 Oct 2020 16:37:15 +0000 https://delphijustin.biz/?p=1774 Here is a app I made that makes Unreal Archival Server much better. It allows you to record at a certain date and time and moves videos to a certain location with a better filename. It’s free and open source. However its not made by Unreal media server. And the app is a batch file. …

The post Unreal DVR first appeared on Delphijustin industries.

]]>
Here is a app I made that makes Unreal Archival Server much better. It allows you to record at a certain date and time and moves videos to a certain location with a better filename. It’s free and open source. However its not made by Unreal media server. And the app is a batch file.

Screenshot of Unreal DVR

Before running Unreal DVR you must do the following

  1. Open patch-uas.bat file after Archival server is installed
  2. Schedule a recording time in archival server(not Unreal DVR) to start at 00:00 to 23:59. This is needed so when Unreal DVR starts UArchivalServer it starts recording.
  3. Set the maximum duration to 1440 minutes, this is 24 hours. This will make it where Unreal DVR can create a video at a unlimited duration. You can do this by clicking the Storage settings button

After that upload remotecontroller.ino to the Arduino(if you want the ability to change channels)

The post Unreal DVR first appeared on Delphijustin industries.

]]>
https://delphijustin.biz/unreal-dvr/feed/ 1
How to stream TV to VLC https://delphijustin.biz/how-to-stream-tv-to-vlc/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-stream-tv-to-vlc https://delphijustin.biz/how-to-stream-tv-to-vlc/#respond Sun, 27 Sep 2020 20:03:45 +0000 https://delphijustin.biz/?p=1736 This method works a lot better than the first method. It works with phones, windows, Linux and other devices that support HLS. Mainly in this blog post we will be streaming to VLC Player. VLC Player is available for the phone and windows. HLS stands for HTTP Live Stream. You will also use a RAM …

The post How to stream TV to VLC first appeared on Delphijustin industries.

]]>
This method works a lot better than the first method. It works with phones, windows, Linux and other devices that support HLS. Mainly in this blog post we will be streaming to VLC Player. VLC Player is available for the phone and windows. HLS stands for HTTP Live Stream. You will also use a RAM Disk to store the stream pieces on. Don’t worry, you only need 32MB of RAM free, since your storing 5 video files that are 5-seconds each. We use a RAM Disk because its faster since it is not a motorized disk(like a HDD) and when computer loses power all files on that disk are gone. It writes 5 files, after the 5th file is done it deletes the first file and creates a new one. Plus it stores a M3U8 Playlist that is updated everytime a new file is created.

The steps

  1. Install Unreal Live Server and Unreal Media Server. See the first blog post here for instructions you don’t need the archival server. Also Microsoft Internet Information Services(if not installed).
  2. Install SoftPerfect RAMDisk from MajorGeeks not the offical website. MajorGeeks have the freeware version. The newer ones are shareware and are not free.
  3. After installing the RAM Disk open RAM Disk control panel up and add a ramdrive NTFS Formatted and 32MB of memory.
  4. After that download the HLS Configurator tool for IIS. Its a tool that I made that will configure the .m3u8 MIME type and set UMediaServer service startup type to Manual. Make sure to put that file somewhere the file can always be available on the computer.
  5. Next run the tool as administrator, and tell it the drive letter of the RAM Drive that was mounted. If you get an error saying that a file could not be found, then you probably didn’t install Unreal Media Server
  6. Next in the RAM Disk control panel click Tools then Applications then add the downloaded tool to the list. This will create the IIS Config file and start UMediaServer service after the drive is mounted on next restart.
  7. Next open Internet Information Services Manager from Administrative Tools
  8. If you want to use the orignal Port# delete the Default Website
  9. Right click The Sites folder and click Add Website…
  10. For Site Name type My TV if you are wanting to keep the default website type port 8321 for the port.
  11. For Physical path type the root path of the RAMDisk. For example if its Drive V then the root path is V:\
  12. Click Connect as… button and enter a administrator Username and password that is used in Windows
  13. Click OK button on all Windows
  14. Next open Unreal Media Server Configuration tool
  15. Right click the TV live broadcast that you named and click Start HLS Broadcasting…
  16. Enter the website URL of your TV stream for example if your hostname is delphijustintv.com then enter http://delphijustintv.com But if you are using port 8321 then its http://delphijustintv.com:8321
  17. For the Web Folder path enter the root of the RAMDisk. For example Drive V will be V:\
  18. Check always running.
  19. Click OK. Your all done now in VLC Media player it should play the TV stream. You will have to open tv.m3u8 or whatever file in the ram drive that ends with .m3u8. So for tv.m3u8 and http://delphijustintv.com as root URL will be http://delphijustintv.com/tv.m3u8 or if it uses port 8321 http://delphijustintv.com:8321/tv.m3u8
TV Streaming in VLC
program HLSIIS;
{$RESOURCE HLS-IIS-DATA.RES}
{
 This is the source code.
 HLS Configurator for Microsoft Internet Information Services
 You will need Unreal Media Server.
}
uses
  SysUtils,math,
  windows,
  dialogs,
  Classes,
  shellapi;
const
appkey='Software\Justin\TVStreaming';//settings key name
EVENTLOG_TYPES:dword=EVENTLOG_INFORMATION_TYPE or eventlog_warning_type;
REG_RAMDISK='RAMDisk';//Registry Value that has the Drive Letter
ServiceManual:dword=3;//Manual Service Startup type
AppName='TV Streaming';//The name of this tool
type ERegistry=class(Exception);//Registry error exception
ENet_exe=class(exception);//net.exe execution error exception
var hk:hkey=0;//Tool setting key
hksrv:hkey=0;//Service Key
S:String='V';//String that contains the drive letter
DriveLetter:AnsiChar;//Drive letter
WebConfig:tresourcestream;//web.config file
rs,dispConfig,Error:dword;//some dword variables
regerror:longint;//registry error variable
UMediaServer:Shellexecuteinfo;//net.exe execution info variable
HEL:thandle;//eventlog handle
label setRamdisk;//for retrying when a bad drive letter has been typed in

procedure InstallEventLog;
{
 Installs this tool for errors to be put in the event log.
}
var hk:hkey;
disp:Dword;
begin
regcreatekeyex(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Services\Eventlog\Application\HLS-IIS',0,NIL,
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NIL,HK,@Disp);
regsetvalueex(hk,'EventMessageFile',0,reg_sz,pchar(paramstr(0)),(1+length(
paramstr(0)))*sizeof(char));
regsetvalueex(hk,'TypesSupported',0,reg_dword,@EVENTLOG_TYPES,4);
regclosekey(hk);
end;

procedure ReportError(E:Exception);
{
 Reports any errors to the eventlog.
}
var EStrings:array[0..1]of pchar;
cname:string;
errorcode:dword;
begin
errorcode:=getlasterror;
cname:=e.classname;
estrings[0]:=pchar(cname);
estrings[1]:=pchar(e.message);
if(not reportevent(hel,eventlog_warning_type,1,2,nil,2,4,@estrings,@errorcode))
or(dispConfig=reg_created_new_key)then MessageBox(0,pchar(E.ClassName+': '+
e.message),appname,mb_iconerror);
if dispconfig=reg_created_new_key then begin regclosekey(hk);hk:=0;regdeletekey(
hkey_local_machine,appkey);end;
end;

function HasDrive:boolean;
{
Checks drive letter that has been enter to see if it is correct
returns true for valid letter otherwise false
}
begin
result:=(Length(s)<>0);//checks the length of the string to be sure that it has aleast one charactor
if not result then exit;
driveletter:=upcase(s[1]);//set drive letter to the uppercase letter.
result:=(ord(driveletter)>=ord('A'))and(ord(driveletter)<=ord('Z'))and(
GetLogicalDrives and trunc(Power(2,ord(driveletter)-ord('A')))>0);
//^ Performs drive letter checking and also see if it exists.
if result then setvolumelabel(pchar(driveletter+':\'),'HLSDrive');
//^ If the drive letter is correct then label the drive.
end;

begin
installeventlog;
hel:=registereventsource(nil,'HLS-IIS');
try
zeromemory(@umediaserver,sizeof(umediaserver));//initialize the shellexecuteinfo buffer
umediaserver.cbSize:=sizeof(umediaserver);//set its size
umediaserver.fMask:=SEE_MASK_NOCLOSEPROCESS;//set flags
umediaserver.lpFile:='net.exe';//set filename to net.exe
webconfig:=tresourcestream.CreateFromID(hinstance,1,'CONFIG');
//^ Load web.config from resource
dispconfig:=reg_created_new_key;
regerror:=regcreatekeyex(hkey_local_machine,appkey,0,nil,reg_option_non_volatile,
key_all_access,nil,hk,@dispconfig);
//^ Create tool settings key
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ Checks to see if it has successfully created or opened the key
rs:=1;//sets the registry size for the driveletter buffer
if regqueryvalueex(hk,reg_ramdisk,nil,nil,@driveletter,@rs)<>error_success then
begin
//^ Checks to see if the drive letter has been set or not
regerror:=regopenkeyex(hkey_local_machine,
'SYSTEM\CurrentControlSet\Services\UMediaServer',0,key_all_access,hksrv);
//^ Opens the UMediaServer service key
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ Checks to see if it successfully opened the key
umediaserver.lpParameters:='stop UMediaServer';
umediaserver.nShow:=sw_show;
//^ prepare for stopping UMediaServer
if not shellexecuteex(@umediaserver) then raise ENet_exe.Create(syserrormessage(
getlasterror));//stop umediaserver
waitforsingleobject(umediaserver.hProcess,infinite);//wait for net.exe to finish
getexitcodeprocess(umediaserver.hProcess,error);//get errorlevel
if error>0then raise ENet_exe.createfmt(
'Net.exe return %d when stopping Unreal Media Server',[error]);
//^ Checks to see if errorlevel is > 0
closehandle(umediaserver.hprocess);
umediaserver.hProcess:=0;
//^ closes net.exe process handle
regerror:=regsetvalueex(hkSrv,'Start',0,reg_dword,@servicemanual,4);
//^ Changes UMediaServer service started type to manual
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ if failed throw an exception
setRamdisk://Drive letter retry label
if not inputquery(appname,'Enter RAMDisk drive letter:',s)then
raise exception.Create('Installation aborted');
//^ ask for drive letter
if(length(s)>1)or(length(s)=0)or(not hasdrive)then begin
messagebox(0,'Bad drive letter or drive doesn'#39't exist','TV Streaming',
mb_iconerror);
goto setRamdisk;
end;// validate drive letter
regerror:=regsetvalueex(hk,reg_ramdisk,0,reg_binary,@driveletter,1);
//^ save drive letter
if regerror<>error_success then raise ERegistry.Create(syserrormessage(regerror));
//^ check to see if it did write to registry
end;
s:=driveletter;
if not hasdrive then raise Exception.Create('The drive letter setting in registry is invalid');
//^ validate drive letter read from registry
webconfig.SaveToFile(driveletter+':\web.config');
//^ create Internet Information Services configuration in the root of ramdisk
umediaserver.nShow:=sw_minimize;
umediaserver.lpParameters:='start UMediaServer';
if not shellexecuteex(@umediaserver)then raise ENet_exe.Create(
'Failed to start Unreal Media Server');
//^ Start Unreal Media Server
waitforsingleobject(umediaserver.hprocess,infinite);//wait for it to finish
getexitcodeprocess(umediaserver.hProcess,error);//get errorlevel
if error>0 then raise ENet_exe.CreateFmt(
'Net.exe return %d when starting Unreal Media Server',[error]);
//^ if errorlevel >0 then throw an exception.
// now if we get to this line,we know everything went through
reportevent(hel,eventlog_information_type,1,1,nil,0,0,nil,nil);
except
on E:exception do
reportError(E);
end;
if hk<>0 then regclosekey(hk);
if hksrv<>0 then regclosekey(hksrv);
if umediaserver.hProcess<>0then closehandle(umediaserver.hprocess);
deregistereventsource(hel);
//^ cleanup before closing
end.

The post How to stream TV to VLC first appeared on Delphijustin industries.

]]>
https://delphijustin.biz/how-to-stream-tv-to-vlc/feed/ 0
How to record and stream your TV shows https://delphijustin.biz/how-to-record-and-stream-your-tv-shows/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-record-and-stream-your-tv-shows https://delphijustin.biz/how-to-record-and-stream-your-tv-shows/#respond Sun, 26 Jul 2020 16:04:46 +0000 https://delphijustin.biz/?p=1463 In this blog post I will show you how easy simple it is to stream and record your TV shows. Also check out the new post that uses the same software but makes it compatible with VLC. What you will need? 1x EasyCap USB Video capture device. 1x RCA to 3.5mm adaptor(I recommend using your …

The post How to record and stream your TV shows first appeared on Delphijustin industries.

]]>
In this blog post I will show you how easy simple it is to stream and record your TV shows. Also check out the new post that uses the same software but makes it compatible with VLC.

What you will need?

1x EasyCap USB Video capture device.

1x RCA to 3.5mm adaptor(I recommend using your soundcard’s line/mic port as the sound source, because the quality of EasyCap’s sound input will probably suck).

100GB or higher hard drive for recording shows is recommended,

You may need a VCR w/Remote Control, depending if the TV box doesn’t have a Composite video output. We will be using the VCR as a RF Demodulator (this is opposite of the famous RF Modulator)

If you have to use the VCR as you will need a TV Coax cable also before buying the VCR or TV Coax cable make sure your box has a RF output on it. Mediacom has the coax output but not Composite video output so the VCR is ideal for this project.

The software we will use is:

Step 1. Install EasyCap.

Install any drivers for EasyCap, i believe for windows 10 its plug and play

Step 2. Install Unreal Live Server

  1. Install Unreal LIve Server and open its control panel by opening “Live server configurator” from the Start Menu
  2. Right click “Live sources and click “Add new media source”
  3. Check “Add video source” and select “USB Video Device”
  4. Click next for the Media type
  5. You can click next again
  6. You can click next again
  7. Check “Add audio source” and choose the correct audio source that has is connected to the TV device(VCR/TV converter box).
  8. You can click next again
  9. You can test the audio or just click next
  10. You can leave the codecs and speeds alone and click next
  11. Enter a description like TV and then cick next
  12. Don’t click enable recording click finish, we will setup recording in the archival server.

Step 3. Install Unreal Media Server

  1. Download and install Unreal Media Server
  2. Open the “Media Server configurator” from the start menu.
  3. Click File then New Live Broadcast…
  4. Leave Static live broadcast selected and click OK
  5. Type in a alias for the stream and use the ID number from Live Server(usually 1)
  6. Type in the IP address or host name where the Live server is on you can set it to 127.0.0.1 if its on the same computer that the Media server is on
  7. If you don’t want to record shows then just skip to Step 6.

Step 4. Install Archival Server

  1. Before closing the media server control panel you must set up a password for the Archival Server, click File then properties in the media server control panel.
  2. Click the Set Password button
  3. Enter a password that will be used for the archival server to use.
  4. Note: we will install archival server and IIS on the same computer where the videos will be recorded
  5. Now install archival server.
  6. Open Archival server configurator from the start menu
  7. Check the “Enable periodic cleanup”, this will help save space on your hard drive by deleting the old videos
  8. Click file then add new media server
  9. Type in the IP address or hostname of the media server in the Media Server address text box, note this will be the constant LiveHost in the JavaScript code
  10. Type in the password you used for archival server in the media server control panel in the Server password field
  11. Click OK
  12. To setup the path where the videos are stored click the Storage Settings button, this will be where the website files will be stored
  13. You will now need to setup the schedule, since our JavaScript code is designed to load videos by the hour only it should have 24 different recording times. This means it should start at hh:00 and end at hh:59 for every hour, replace hh with the 2-digit hour.

Step 5. Install IIS

  1. Install IIS as shown in this tutorial
  2. Change the Default Web Directory by clicking Sites then right click “Default Web Site” then click Advanced Settings
  3. Set Physical Path to the path where archival server storage settings were set to.
  4. Open notepad and copy and paste the HTML code and save it as “index.html” in the root of the recording folder
<!DOCTYPE html>
<html>
<head>
<title>My TV Recordings</title>
<script type="text/javascript">
//If you used the same settings in my blog then you dont need to change the 2 constants
const LiveHost = "127.0.0.1";
const ArchivalAlias = "TV";
function gotoArchivalList(){
location.href ="./"+LiveHost+"/"+ArchivalAlias+"/"
}
function twoDigit(x){
if(x<10){
return "0"+x;
}return x;
}
function setVideo(videoMonth,videoHour,videoDay,videoYear){
document.getElementById("player").innerHTML="";
var videoPlayer = document.createElement("VIDEO");
var video = document.createElement("SOURCE");
video.src = "./"+LiveHost+"/"+escape(ArchivalAlias)+"/"+videoYear+"/"+videoMonth+"/"+videoDay+"/"+escape(ArchivalAlias+"_"+videoYear+"-"+videoMonth+"-"+videoDay+"_"+videoHour+"-00-01.mp4");
video.type = "video/mp4";
videoPlayer.controls = true;
videoPlayer.appendChild(video);
document.getElementById("player").appendChild(videoPlayer);
}
function playerForm(form){
var videoTime = new Date(form.date.value+" "+form.time.value+":00:00");
var videoMonth = twoDigit(videoTime.getMonth()+1);
var videoHour = twoDigit(videoTime.getHours());
var videoDay = twoDigit(videoTime.getDate());
var videoYear = videoTime.getFullYear();
setVideo(videoMonth,videoHour,videoDay,videoYear);
}
function startUp(){
var now = new Date();
var lastHour = new Date(now.getTime()-(60*60*1000));
document.getElementById("vDate").value = lastHour.toLocaleDateString();
var videoMonth = twoDigit(lastHour.getMonth()+1);
var videoHour = twoDigit(lastHour.getHours());
var videoDay = twoDigit(lastHour.getDate());
var videoYear = lastHour.getFullYear();
setVideo(videoMonth,videoHour,videoDay,videoYear);
}
</script>
</head>
<body onload="startUp()">
<form action="javascript:;">
<p id="player">

</p>
Chose a date:<input type="date" name="date" id="vDate"><br>
Choose a time:<select name="time">
<option value="00">12 AM</option>
<option value="01">1 AM</option>
<option value="02">2 AM</option>
<option value="03">3 AM</option>
<option value="04">4 AM</option>
<option value="05">5 AM</option>
<option value="06">6 AM</option>
<option value="07">7 AM</option>
<option value="08">8 AM</option>
<option value="09">9 AM</option>
<option value="10">10 AM</option>
<option value="11">11 AM</option>
<option value="12">12 PM</option>
<option value="13">1 PM</option>
<option value="14">2 PM</option>
<option value="15">3 PM</option>
<option value="16">4 PM</option>
<option value="17">5 PM</option>
<option value="18">6 PM</option>
<option value="19">7 PM</option>
<option value="20">8 PM</option>
<option value="21">9 PM</option>
<option value="22">10 PM</option>
<option value="23">11 PM</option>
</select><br>
<input type="button" value="Load Video" onclick="playerForm(this.form)">
</form>
<a href="javascript:gotoArchivalList()">Click here to see list of recorded video files.</a>
</body>
</html>

Step 6. Install Unreal Media Player

Finally install Unreal Media player and test its stream. For any device that is not windows you can use your HTML5 Web Browser to stream any recording upto an hour back(since the one that is being recording cannot be streamed until recording is done)

The post How to record and stream your TV shows first appeared on Delphijustin industries.

]]>
https://delphijustin.biz/how-to-record-and-stream-your-tv-shows/feed/ 0