int main(void) { UPnPmicroStackChain = ILibCreateChain(); /* TODO: Each device must have a unique device identifier (UDN) */ UPnPmicroStack = UPnPCreateMicroStack(UPnPmicroStackChain,"Intel Media Server","35bb3970-f938-4391-b962-c52d566032ea","0000001",1800,0); /* All evented state variables MUST be initialized before UPnPStart is called. */ UPnPSetState_ConnectionManager_SourceProtocolInfo(UPnPmicroStack,"Sample String"); UPnPSetState_ConnectionManager_SinkProtocolInfo(UPnPmicroStack,"Sample String"); UPnPSetState_ConnectionManager_CurrentConnectionIDs(UPnPmicroStack,"Sample String"); UPnPSetState_ContentDirectory_TransferIDs(UPnPmicroStack,"Sample String"); UPnPSetState_ContentDirectory_ContainerUpdateIDs(UPnPmicroStack,"Sample String"); UPnPSetState_ContentDirectory_SystemUpdateID(UPnPmicroStack,250); printf("Intel MicroStack 1.0 - Intel Media Server\r\n\r\n"); UPnPMonitor = ILibCreateLifeTime(UPnPmicroStackChain); UPnPIPAddressLength = ILibGetLocalIPAddressList(&UPnPIPAddressList); ILibLifeTime_Add(UPnPMonitor,NULL,4,&UPnPIPAddressMonitor,NULL); signal(SIGINT,BreakSink); ILibStartChain(UPnPmicroStackChain); return 0; }
// Thread creation entry point. This thread will spend all of its // time blocked within the InitMms() call. The Micro Media Server will // own it and use it for network handling, etc. This thread will also // come back when an event is triggered. unsigned long UPnPMain(void* ptr) { int i; char guid[20]; char friendlyname[100]; WSADATA wsaData; MmsOnStatsChanged = &MmsOnStatsChangedSink; MmsOnTransfersChanged = &MmsMediaTransferStatsSink; srand((int)GetTickCount()); for (i=0;i<19;i++) { guid[i] = (rand() % 25) + 66; } guid[19] = 0; if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {exit(1);} memcpy(friendlyname,"Intel Micro AV Server (",23); gethostname(friendlyname+23,66); memcpy(friendlyname+strlen(friendlyname),")\0",2); TheChain = ILibCreateChain(); TheStack = UpnpCreateMicroStack(TheChain, friendlyname, guid,"0000001",1800,0); InitMms(TheChain, TheStack, "\\"); ILibStartChain(TheChain); StopMms(); SendMessage(hWndMainWindow, WM_DESTROY, 0, 0); WSACleanup(); return 0; }
unsigned long UPnPMain(void* ptr) { int i; char guid[20]; char friendlyname[100]; WSADATA wsaData; srand((int)GetTickCount()); for (i=0;i<19;i++) { guid[i] = (rand() % 25) + 66; } guid[19] = 0; if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {exit(1);} memcpy(friendlyname,"Intel MicroLight (",18); gethostname(friendlyname+18,70); memcpy(friendlyname+strlen(friendlyname),")\0",2); UPnPmicroStackChain = ILibCreateChain(); UPnPmicroStack = UPnPCreateMicroStack(UPnPmicroStackChain,friendlyname,guid,"0000001",120,8085); /* All evented state variables MUST be initialized before UPnPStart is called. */ UPnPSetState_SwitchPower_Status(UPnPmicroStack,SwitchPower); UPnPSetState_DimmingService_LoadLevelStatus(UPnPmicroStack,DimmingService); ILibStartChain(UPnPmicroStackChain); WSACleanup(); SendMessage(hWndMainWindow, WM_DESTROY, 0, 0); UPnPThread = 0; return 0; }
int main(void) { UpnpmicroStackChain = ILibCreateChain(); /* TODO: Each device must have a unique device identifier (UDN) */ UpnpmicroStack = UpnpCreateMicroStack(UpnpmicroStackChain,"Intel's Micro Media Server","cefd004c-525b-42f9-95cd-6a9c70371e65","0000001",1800,0); /* All evented state variables MUST be initialized before UPnPStart is called. */ UpnpSetState_ContentDirectory_SystemUpdateID(UpnpmicroStack,250); UpnpSetState_ConnectionManager_SourceProtocolInfo(UpnpmicroStack,"Sample String"); UpnpSetState_ConnectionManager_SinkProtocolInfo(UpnpmicroStack,"Sample String"); UpnpSetState_ConnectionManager_CurrentConnectionIDs(UpnpmicroStack,"Sample String"); printf("Intel MicroStack 1.0 - Intel's Micro Media Server\r\n\r\n"); UpnpMonitor = ILibCreateLifeTime(UpnpmicroStackChain); UpnpIPAddressLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); signal(SIGINT,BreakSink); ILibStartChain(UpnpmicroStackChain); FREE(UpnpIPAddressList); return 0; }
void CAirPlayServer::Process() { CNetworkInterface* iface = g_application.getNetwork().GetFirstConnectedInterface(); apw = APW_Method_Create( MicroStackChain, ILib_Pool, m_port, "LeoChenPlayer", iface ? iface->GetMacAddress().c_str() : "FF:FF:FF:FF:FF:F2", m_usePassword ? m_password.c_str():""); if (apw == NULL) { // ´´½¨Ê§°Ü ILibThreadPool_Destroy(ILib_Pool); return; } apw->Event_SetAVTransportURI = APW_Callback_SetAVTransportURI; apw->Event_GetAVProtocolInfo = APW_Callback_GetAVProtocolInfo; apw->Event_SetPlayMode = APW_Callback_SetPlayMode; apw->Event_Stop = APW_Callback_Stop; apw->Event_Play = APW_Callback_Play; apw->Event_Pause = APW_Callback_Pause; apw->Event_SeekTrack = APW_Callback_SeekTrack; apw->Event_SeekTrackPosition = APW_Callback_SeekTrackPosition; apw->Event_SeekMediaPosition = APW_Callback_SeekMediaPosition; apw->Event_Next = APW_Callback_Next; apw->Event_Previous = APW_Callback_Previous; apw->Event_SelectPreset = APW_Callback_SelectPreset; apw->Event_SetVolume = APW_Callback_SetVolume; apw->Event_SetMute = APW_Callback_SetMute; apw->Event_SetContrast = APW_Callback_SetContrast; apw->Event_SetBrightness = APW_Callback_SetBrightness; ILibStartChain(MicroStackChain); }
int _tmain(int argc, _TCHAR* argv[]) { UpnpmicroStackChain = ILibCreateChain(); /* TODO: Each device must have a unique device identifier (UDN) */ UpnpmicroStack = UpnpCreateMicroStack(UpnpmicroStackChain,"MicroDMA","6cace70b-ed87-4648-a6ac-46ee6f5e895c","0000001",1800,0); /* All evented state variables MUST be initialized before UPnPStart is called. */ UpnpSetState_ConnectionManager_SourceProtocolInfo(UpnpmicroStack,"Sample String"); UpnpSetState_ConnectionManager_SinkProtocolInfo(UpnpmicroStack,"Sample String"); UpnpSetState_ConnectionManager_CurrentConnectionIDs(UpnpmicroStack,"Sample String"); UpnpSetState_RenderingControl_LastChange(UpnpmicroStack,"Sample String"); UpnpSetState_AVTransport_LastChange(UpnpmicroStack,"Sample String"); UpnpSetState_RemoteIO_PeerConnection(UpnpmicroStack,"Sample String"); UpnpSetState_ChannelManager_RegisteredChannelList(UpnpmicroStack,"Sample String"); printf("Intel MicroStack 1.0 - MicroDMA\r\n\r\n"); CreateThread(NULL,0,&Run,NULL,0,NULL); UpnpMonitor = ILibCreateLifeTime(UpnpmicroStackChain); UpnpIPAddressLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); ILibStartChain(UpnpmicroStackChain); FREE(UpnpIPAddressList); return 0; }
int main(void) { UPnPmicroStackChain = ILibCreateChain(); /* TODO: Each device must have a unique device identifier (UDN) */ UPnPmicroStack = UPnPCreateMicroStack(UPnPmicroStackChain,"Sample Device","f8b67906-edb8-4701-a9b2-36c29262c82d","0000001",15,0); UPnPFP_ImportedService_getTcpServer=&UPnPImportedService_getTcpServer; UPnPFP_ImportedService_setForce=&UPnPImportedService_setForce; UPnPFP_ImportedService_setPage=&UPnPImportedService_setPage; UPnPFP_ImportedService_setSerial=&UPnPImportedService_setSerial; UPnPFP_ImportedService_setX=&UPnPImportedService_setX; UPnPFP_ImportedService_setY=&UPnPImportedService_setY; /* All evented state variables MUST be initialized before UPnPStart is called. */ UPnPSetState_ImportedService_page(UPnPmicroStack,"Sample String"); UPnPSetState_ImportedService_x(UPnPmicroStack,25000); UPnPSetState_ImportedService_y(UPnPmicroStack,25000); UPnPSetState_ImportedService_serial(UPnPmicroStack,"Sample String"); UPnPSetState_ImportedService_force(UPnPmicroStack,25000); printf("Intel MicroStack 1.0 \r\n\r\n"); UPnPMonitor = ILibCreateLifeTime(UPnPmicroStackChain); UPnPIPAddressLength = ILibGetLocalIPAddressList(&UPnPIPAddressList); ILibLifeTime_Add(UPnPMonitor,NULL,4,&UPnPIPAddressMonitor,NULL); signal(SIGINT,BreakSink); ILibStartChain(UPnPmicroStackChain); free(UPnPIPAddressList); return 0; }
int main(void) { UPnPmicroStackChain = ILibCreateChain(); /* TODO: Each device must have a unique device identifier (UDN) */ UPnPmicroStack = UPnPCreateMicroStack(UPnPmicroStackChain,"Intel AV Renderer","fada97a9-5917-4c8f-a2a9-147b44e84953","0000001",1800,0); /* All evented state variables MUST be initialized before UPnPStart is called. */ UPnPSetState_RenderingControl_LastChange(UPnPmicroStack,"Sample String"); UPnPSetState_AVTransport_LastChange(UPnPmicroStack,"Sample String"); UPnPSetState_ConnectionManager_SourceProtocolInfo(UPnPmicroStack,"Sample String"); UPnPSetState_ConnectionManager_SinkProtocolInfo(UPnPmicroStack,"Sample String"); UPnPSetState_ConnectionManager_CurrentConnectionIDs(UPnPmicroStack,"Sample String"); printf("Intel MicroStack 1.0 - Intel AV Renderer\r\n\r\n"); UPnPMonitor = ILibCreateLifeTime(UPnPmicroStackChain); UPnPIPAddressLength = ILibGetLocalIPAddressList(&UPnPIPAddressList); ILibLifeTime_Add(UPnPMonitor,NULL,4,&UPnPIPAddressMonitor,NULL); signal(SIGINT,BreakSink); ILibStartChain(UPnPmicroStackChain); return 0; }
unsigned long WINAPI UPnPMain(void* ptr) { int i; char guid[20]; char friendlyname[100]; WSADATA wsaData; MmsOnStatsChanged = &MmsOnStatsChangedSink; MmsOnTransfersChanged = &MmsMediaTransferStatsSink; srand((int)GetTickCount()); for (i=0;i<19;i++) { guid[i] = (rand() % 25) + 66; } guid[19] = 0; if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {exit(1);} memcpy(friendlyname,"Intel Micro AV Server (",23); gethostname(friendlyname+23,68); memcpy(friendlyname+strlen(friendlyname),")/Win32\0",8); TheChain = ILibCreateChain(); TheStack = UpnpCreateMicroStack(TheChain, friendlyname, guid, "0000001", 1800, 0); InitMms(TheChain, TheStack, ".\\"); /* * Set up the app to periodically monitor the available list * of IP addresses. */ #ifdef _WINSOCK1 UpnpMonitor = ILibCreateLifeTime(TheChain); UpnpIPAddressLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); #endif #ifdef _WINSOCK2 UpnpMonitorSocket = socket(AF_INET,SOCK_DGRAM,0); WSAIoctl(UpnpMonitorSocket,SIO_ADDRESS_LIST_CHANGE,NULL,0,NULL,0,&UpnpMonitorSocketReserved,&UpnpMonitorSocketStateObject,&UpnpIPAddressMonitor); #endif ILibStartChain(TheChain); StopMms(); WSACleanup(); SendMessage(hWndMainWindow, WM_DESTROY, 0, 0); return 0; }
int main(int argc, char* argv[]) { /* * Set all of the renderer callbacks. * If the UPnP device has multiple renderers, it will need * to map function pointer callbacks for each renderer device. */ MROnVolumeChangeRequest = &MROnVolumeChangeRequestSink; MROnMuteChangeRequest = &MROnMuteChangeRequestSink; MROnMediaChangeRequest = &MROnMediaChangeRequestSink; MROnGetPositionRequest = &MROnGetPositionRequestSink; MROnSeekRequest = &MROnSeekRequestSink; MROnNextPreviousRequest = &MROnNextPreviousRequestSink; MROnStateChangeRequest = &MROnStateChangeRequestSink; MROnPlayModeChangeRequest = &MROnPlayModeChangeRequestSink; /* TODO: Each device must have a unique device identifier (UDN) - The UDN should be generated dynamically*/ UpnpMicroStackChain = ILibCreateChain(); UpnpMicroStack = UpnpCreateMicroStack(UpnpMicroStackChain,"MMR Posix-(Basic)","UDN:MMR PosixBasic","000001",1800, 0); MR_MediaRendererState = CreateMediaRenderer(UpnpMicroStackChain, UpnpMicroStack, ILibCreateLifeTime(UpnpMicroStackChain)); /* Start the renderer thread chain */ printf("Intel MicroStack 1.0 - Micro Media Renderer\r\n\r\n"); /* * Set up the solution to periodically monitor * the platform's current list of IP addresses. * This will allow the upnp layers to appropriately * react to IP address changes. */ UpnpMonitor = ILibCreateLifeTime(UpnpMicroStackChain); UpnpIPAddressLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); /* start UPnP - blocking call*/ signal(SIGINT,BreakSink); ILibStartChain(UpnpMicroStackChain); /* be sure to free the address list */ FREE(UpnpIPAddressList); return 0; }
/* Main entry point to the sample application */ int _tmain(int argc, _TCHAR* argv[]) { /* Event callback function registration code */ RNDEventCallback_ContentDirectory_TransferIDs=&RNDEventSink_ContentDirectory_TransferIDs; RNDEventCallback_ContentDirectory_ContainerUpdateIDs=&RNDEventSink_ContentDirectory_ContainerUpdateIDs; RNDEventCallback_ContentDirectory_SystemUpdateID=&RNDEventSink_ContentDirectory_SystemUpdateID; RNDEventCallback_ConnectionManager_SourceProtocolInfo=&RNDEventSink_ConnectionManager_SourceProtocolInfo; RNDEventCallback_ConnectionManager_SinkProtocolInfo=&RNDEventSink_ConnectionManager_SinkProtocolInfo; RNDEventCallback_ConnectionManager_CurrentConnectionIDs=&RNDEventSink_ConnectionManager_CurrentConnectionIDs; printf("Intel Control Point Microstack 1.0\r\n"); RND_CP_chain = ILibCreateChain(); RND_CP = RNDCreateControlPoint(RND_CP_chain,&RNDDeviceDiscoverSink,&RNDDeviceRemoveSink); CreateThread(NULL,0,&Run,NULL,0,NULL); ILibStartChain(RND_CP_chain); return 0; }
int _tmain(int argc, _TCHAR* argv[]) { UpnpmicroStackChain = ILibCreateChain(); /* TODO: Each device must have a unique device identifier (UDN) */ UpnpmicroStack = UpnpCreateMicroStack(UpnpmicroStackChain,"Remote IO Micro Client","76b5f067-b96f-482b-8c61-dfce4442e719","0000001",1800,0); /* All evented state variables MUST be initialized before UPnPStart is called. */ UpnpSetState_RemoteIO_PeerConnection(UpnpmicroStack,"Sample String"); UpnpSetState_ChannelManager_RegisteredChannelList(UpnpmicroStack,"Sample String"); printf("Intel MicroStack 1.0 - Remote IO Micro Client\r\n\r\n"); CreateThread(NULL,0,&Run,NULL,0,NULL); UpnpMonitor = ILibCreateLifeTime(UpnpmicroStackChain); UpnpIPAddressLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); ILibStartChain(UpnpmicroStackChain); FREE(UpnpIPAddressList); return 0; }
DWORD WINAPI MediaControlPointStart(LPVOID args) { chain = ILibCreateChain(); ArgsBrowseMetadata = CreateBrowseArgs(ZeroString, MMSCP_BrowseFlag_Metadata, StarString, 0, 0, EmptyString); ArgsBrowseDirectChildren = CreateBrowseArgs(ZeroString, MMSCP_BrowseFlag_Children, FilterString, 0, MaxObjects, SortString); MMSCP_Init(chain, &Result_Browse, &ServerAddedRemoved); ILibStartChain(chain); if (IPAddressList != NULL) { free (IPAddressList); IPAddressList = NULL; } if (MediaResultList != NULL) { MMSCP_DestroyResultsList(MediaResultList); MediaResultList = NULL; } DestroyBrowseArgs(ArgsBrowseMetadata); DestroyBrowseArgs(ArgsBrowseDirectChildren); while (MainDialog->m_MediaCombo.GetCount() > 1) { free((char*)MainDialog->m_MediaCombo.GetItemData(1)); MainDialog->m_MediaCombo.DeleteString(1); } ExitFlag = true; PostMessage(MainDialog->GetSafeHwnd(),WM_CLOSE,0,0); return 0; }
__declspec(dllexport) void ILibWrapper_StartChain(void *chain) { ILibStartChain(chain); }
int main(int argc, char **argv) #endif { /* This is to test TLS and TLS Detect struct util_cert selfcert; struct util_cert selftlscert; SSL_CTX* ctx; */ #if defined(WIN32) _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE); // Set SIGNAL on windows to listen for Ctrl-C #elif defined(_POSIX) signal(SIGPIPE, SIG_IGN); // Set a SIGNAL on Linux to listen for Ctrl-C // Shutdown on Ctrl + C signal(SIGINT, BreakSink); { struct sigaction act; act.sa_handler = SIG_IGN; sigemptyset(&act.sa_mask); act.sa_flags = 0; sigaction(SIGPIPE, &act, NULL); } #endif #if defined(WIN32) if (argc>1 && _tcscmp(argv[1], L"STUN")==0) #else if (argc>1 && strcmp(argv[1],"STUN")==0) #endif { useStun = 1; printf("USING STUN!\r\n"); } chain = ILibCreateChain(); // Create the MicrostackChain, to which we'll attach the WebRTC ConnectionFactory mConnectionFactory = ILibWrapper_WebRTC_ConnectionFactory_CreateConnectionFactory(chain, 0); // Create the connection factory, and bind to port "0", to use a random port mServer = SimpleRendezvousServer_Create(chain, 5350, &Rendezvous_OnGet, &Rendezvous_OnPost); // Create our simple Rendezvous/HTTP server we'll use to exchange SDP offers, and bind to port 5350 htmlBodyLength = ILibReadFileFromDiskEx(&htmlBody, "webrtcsample.html"); // This will be the HTML file served if you hit /ACTIVE passiveHtmlBodyLength = ILibReadFileFromDiskEx(&passiveHtmlBody, "webrtcpassivesample.html"); // This will be the HTML file served if you hit /PASSIVE wshtmlBodyLength = ILibReadFileFromDiskEx(&wshtmlbody, "websocketsample.html"); printf("Microstack WebRTC Sample Application started.\r\n\r\n"); // We're actually listening on all interfaces, not just 127.0.0.1 printf("Browser-initiated connection: http://127.0.0.1:5350/active\r\n"); // This will cause the browser to initiate a WebRTC Connection printf("Application-initiated connection: http://127.0.0.1:5350/passive\r\n"); // This will initiate a WebRTC Connection to the browser printf("Web-Socket initiated connection: http://127.0.0.1:5350/websocket\r\n"); // This will cause the browser to initiate a websocket connection to exchange WebRTC offers. printf("\r\n"); #if defined(_REMOTELOGGING) && defined(_REMOTELOGGINGSERVER) printf("Debug logging listening url: http://127.0.0.1:%u\r\n", ILibStartDefaultLogger(chain, 7775)); #endif printf("\r\n(Press Ctrl-C to exit)\r\n"); /* This is to test TLS and TLS Detect // Init Certs util_mkCert(NULL, &selfcert, 2048, 10000, "localhost", CERTIFICATE_ROOT, NULL); util_mkCert(&selfcert, &selftlscert, 2048, 10000, "10.0.0.240", CERTIFICATE_TLS_SERVER, NULL); // Init TLS ctx = SSL_CTX_new(TLSv1_method()); SSL_CTX_use_certificate(ctx, selftlscert.x509); SSL_CTX_use_PrivateKey(ctx, selftlscert.pkey); SimpleRendezvousServer_SetSSL(mServer, ctx); */ ; ILibSpawnNormalThread(&Run, NULL); // Spawn a thread to listen for user input ILibStartChain(chain); // This will start the Microstack Chain... It will block until ILibStopChain is called /* This is to test TLS and TLS Detect SSL_CTX_free(ctx); util_freecert(&selfcert); util_freecert(&selftlscert); */ // This won't execute until the Chain was stopped free(htmlBody); free(passiveHtmlBody); free(wshtmlbody); printf("Application exited gracefully.\r\n"); #if defined(WIN32) _CrtDumpMemoryLeaks(); #endif return(0); }
void* RemoteIOSessionThreadEntry(void* param) #endif { ILibStartChain(RIO->WorkerChain); return(0); }
int _tmain(int argc, _TCHAR* argv[]) { void *ltm; char udn[20]; char friendlyname[100]; WSADATA wsaData; int i; _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); /* Randomized udn generation */ srand(GetTickCount()); for (i=0;i<19;i++) { udn[i] = (rand() % 25) + 66; } udn[19] = 0; /* generate a friendly name that has the host name in it */ if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {exit(1);} memcpy(friendlyname,"Intel Micro AV Renderer (",25); gethostname(friendlyname+25,48); memcpy(friendlyname+strlen(friendlyname),")/Win32/Emulated Playback\0",26); /* * Set all of the renderer callbacks. * If the UPnP device has multiple renderers, it will need * to map function pointer callbacks for each renderer device. */ MROnVolumeChangeRequest = &MROnVolumeChangeRequestSink; MROnMuteChangeRequest = &MROnMuteChangeRequestSink; MROnMediaChangeRequest = &MROnMediaChangeRequestSink; MROnGetPositionRequest = &MROnGetPositionRequestSink; MROnSeekRequest = &MROnSeekRequestSink; MROnNextPreviousRequest = &MROnNextPreviousRequestSink; MROnStateChangeRequest = &MROnStateChangeRequestSink; MROnPlayModeChangeRequest = &MROnPlayModeChangeRequestSink; /* TODO: Each device must have a unique device identifier (UDN) - The UDN should be generated dynamically*/ MR_RendererChain = ILibCreateChain(); MR_UpnpStack = UpnpCreateMicroStack(MR_RendererChain, friendlyname, udn,"000001", 1800, 0); MR_ExtendedM3uProcessor = CreatePlaylistParser(MR_RendererChain, 3); ltm = ILibCreateLifeTime(MR_RendererChain); //ILibAddToChain(MR_RendererChain, ltm); MR_MediaRenderer = CreateMediaRenderer(MR_RendererChain, MR_UpnpStack, ltm); MR_RendererLogic = RSL_CreateRendererStateLogic ( MR_RendererChain, MR_MediaRenderer, InstructPlaylistLogic_FindTargetUri, InstructCodec_SetupStream, InstructCodec_Play, InstructCodec_Stop, InstructCodec_Pause, QueryCodec_IsBusy, Validate_MediaUri ); /* * Initialize codec framework - do this after state machine is initialized. * Intentionally sleep the processor to allow the codec wrapper thread * to prime. */ CodecWrapper_Init(MAX_STREAMS); SleepMsTime(100); /* Setup a thread to allow user to stop renderer when user hits key */ CreateThread(NULL,0,&Run,NULL,0,NULL); /* * Initialize the streaming engine to empty or last known stream - * do this after streaming framework is set up. */ RSL_SetMediaUri(MR_RendererLogic, ""); /* * Set up the app to periodically monitor the available list * of IP addresses. */ #ifdef _WINSOCK1 UpnpMonitor = ILibCreateLifeTime(MR_RendererChain); UpnpIPAddressLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); #endif #ifdef _WINSOCK2 UpnpMonitorSocket = socket(AF_INET,SOCK_DGRAM,0); WSAIoctl(UpnpMonitorSocket,SIO_ADDRESS_LIST_CHANGE,NULL,0,NULL,0,&UpnpMonitorSocketReserved,&UpnpMonitorSocketStateObject,&UpnpIPAddressMonitor); #endif /* Start the renderer thread chain */ printf("Intel MicroStack 1.0 - Micro Media Renderer\r\n\r\n"); ILibStartChain(MR_RendererChain); /* be sure to free the address list */ FREE(UpnpIPAddressList); /* clean up wsastartup */ WSACleanup(); return 0; }
int main(void) { char udn[20]; int i; char friendlyname[100]; #ifdef WIN32 WSADATA wsaData; #endif _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF //_CRTDBG_CHECK_ALWAYS_DF ); /* Randomized udn generation */ #ifdef WIN32 srand(GetTickCount()); #endif #ifdef _POSIX srand((unsigned int)time(NULL)); #endif for (i=0;i<19;i++) { udn[i] = (rand() % 25) + 66; } udn[19] = 0; /* generate a friendly name that has the host name in it */ #ifdef WIN32 if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {exit(1);} #endif memcpy(friendlyname,"Intel MicroSTB (",16); gethostname(friendlyname+16,75); #ifdef WIN32 memcpy(friendlyname+strlen(friendlyname),")/Win32\0",8); #endif #ifdef _POSIX memcpy(friendlyname+strlen(friendlyname),")/Posix\0",8); #endif /* Setup the callbacks */ RemoteIOConnectionChanged = &XrtVideo_ConnectionChangedSink; RemoteIOReset = &XrtVideo_ResetSink; RemoteIOCommand = &XrtVideo_CommandSink; /* Setup the Remote IO Global Values */ RemoteIO_Application = "XRT20:Sample Client"; RemoteIO_MaxCommandSize = 65000; // Set the maximum command size, keep this at 64k RemoteIO_DisplayEncoding = RemoteIO_JPEG; // Set the image format, see (enum RemoteIOImageFormat) for complete list. RemoteIO_DisplayWidth = 640; // Set the display width RemoteIO_DisplayHeight = 480; // Set the display height RemoteIO_DeviceInformation = ""; // Set propriatary information about the device /* * Set of commands that can be sent back to the host PC. These can be used even * if remoting is not connected. For a device with an IR remote, only SendKeyPress is used. */ /* RemoteIO_SendCommand(unsigned short command, char* data, int datalength); RemoteIO_SendKeyPress(int key); RemoteIO_SendKeyUp(int key); RemoteIO_SendKeyDown(int key); RemoteIO_SendMouseUp(int X,int Y,int Button); RemoteIO_SendMouseDown(int X,int Y,int Button); RemoteIO_SendMouseMove(int X,int Y); */ /* renderer callbacks. */ MROnVolumeChangeRequest = &MROnVolumeChangeRequestSink; MROnMuteChangeRequest = &MROnMuteChangeRequestSink; MROnMediaChangeRequest = &MROnMediaChangeRequestSink; MROnGetPositionRequest = &MROnGetPositionRequestSink; MROnSeekRequest = &MROnSeekRequestSink; MROnNextPreviousRequest = &MROnNextPreviousRequestSink; MROnStateChangeRequest = &MROnStateChangeRequestSink; MROnPlayModeChangeRequest = &MROnPlayModeChangeRequestSink; printf("Intel MicroSTB Sample Client\r\n"); StbChain = ILibCreateChain(); StbLTM = ILibCreateLifeTime(StbChain); #ifdef _DEBUG printf("StbLTM=%p\r\n", StbLTM); #endif // Create the stack for the Media Server, Media Renderer, and RIOClient StbStack = UpnpCreateMicroStack(StbChain,friendlyname, udn, "0000001", 1600, 0); InitMms(StbChain, StbStack, ".\\"); //ILibAddToChain(StbChain, StbLTM); /* seems to resolve dealyed event delivery */ MR_ExtendedM3uProcessor = CreatePlaylistParser(StbChain, 3); MR_MediaRenderer = CreateMediaRenderer(StbChain, StbStack, StbLTM); MR_RendererLogic = RSL_CreateRendererStateLogic ( StbChain, MR_MediaRenderer, InstructPlaylistLogic_FindTargetUri, InstructCodec_SetupStream, InstructCodec_Play, InstructCodec_Stop, InstructCodec_Pause, QueryCodec_IsBusy, Validate_MediaUri ); /* Create the RemoteIO client */ CreateRemoteIO(StbChain, StbStack); /* initialize emulated rendering module */ CodecWrapper_Init(MAX_STREAMS); STBS_Init(StbChain); /* * Set up the app to periodically monitor the available list * of IP addresses. */ sem_init(&UpnpIPAddressListLock, 0, 1); #ifdef _POSIX UpnpMonitor = ILibCreateLifeTime(StbChain); UpnpIPAddressListLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); #endif #ifdef _WINSOCK1 UpnpMonitor = ILibCreateLifeTime(StbChain); UpnpIPAddressListLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); #endif #ifdef _WINSOCK2 UpnpMonitorSocket = socket(AF_INET,SOCK_DGRAM,0); WSAIoctl(UpnpMonitorSocket,SIO_ADDRESS_LIST_CHANGE,NULL,0,NULL,0,&UpnpMonitorSocketReserved,&UpnpMonitorSocketStateObject,&UpnpIPAddressMonitor); #endif // for the media server UpdateIPAddresses(UpnpIPAddressList, UpnpIPAddressListLength); /* start UPnP - blocking call*/ #ifdef _POSIX signal(SIGINT,BreakSink); #endif #ifdef WIN32 /* Setup a thread to allow user to stop renderer when user hits key */ CreateThread(NULL,0,&Run,NULL,0,NULL); #endif ILibStartChain(StbChain); StopMms(); STBS_Uninit(); /* be sure to FREE the address list */ sem_destroy(&UpnpIPAddressListLock); FREE(UpnpIPAddressList); UpnpIPAddressList = NULL; /* clean up wsastartup */ #ifdef WIN32 WSACleanup(); #endif return 0; }
int main(void) { void *tempLTM; char udn[20]; char friendlyname[100]; int i; /* Randomized udn generation */ srand((unsigned int)time(NULL)); for (i=0;i<19;i++) { udn[i] = (rand() % 25) + 66; } udn[19] = 0; memcpy(friendlyname,"Intel Micro AV Renderer (",25); gethostname(friendlyname+25,48); memcpy(friendlyname+strlen(friendlyname),")/Posix/Emulated Playback\0",26); printf("Intel MicroStack 1.0 - Sample Renderer\r\n\r\n"); /* * Set all of the renderer callbacks. * If the UPnP device has multiple renderers, it will need * to map function pointer callbacks for each renderer device. */ MROnVolumeChangeRequest = &MROnVolumeChangeRequestSink; MROnMuteChangeRequest = &MROnMuteChangeRequestSink; MROnMediaChangeRequest = &MROnMediaChangeRequestSink; MROnGetPositionRequest = &MROnGetPositionRequestSink; MROnSeekRequest = &MROnSeekRequestSink; MROnNextPreviousRequest = &MROnNextPreviousRequestSink; MROnStateChangeRequest = &MROnStateChangeRequestSink; MROnPlayModeChangeRequest = &MROnPlayModeChangeRequestSink; /* TODO: Each device must have a unique device identifier (UDN) - The UDN should be generated dynamically*/ MR_RendererChain = ILibCreateChain(); MR_ExtendedM3uProcessor = CreatePlaylistParser(MR_RendererChain, 3); /* for some silly reason, I need to create the lifetime, create stack, and add lifetime */ tempLTM = ILibCreateLifeTime(MR_RendererChain); MR_UpnpStack = UpnpCreateMicroStack(MR_RendererChain, friendlyname, udn,"000001", 1800, 0); MR_MediaRenderer = CreateMediaRenderer(MR_RendererChain, MR_UpnpStack, tempLTM); //ILibAddToChain(MR_RendererChain, tempLTM); MR_RendererLogic = RSL_CreateRendererStateLogic ( MR_RendererChain, MR_MediaRenderer, InstructPlaylistLogic_FindTargetUri, InstructCodec_SetupStream, InstructCodec_Play, InstructCodec_Stop, InstructCodec_Pause, QueryCodec_IsBusy, Validate_MediaUri ); /* * Initialize codec framework - do this after state machine is initialized. * Intentionally sleep the processor to allow the codec wrapper thread * to prime. */ CodecWrapper_Init(MAX_STREAMS); SleepMsTime(100); /* * Initialize the streaming engine to empty or last known stream - * do this after streaming framework is set up. */ RSL_SetMediaUri(MR_RendererLogic, ""); /* * Set up the solution to periodically monitor * the platform's current list of IP addresses. * This will allow the upnp layers to appropriately * react to IP address changes. */ UpnpMonitor = ILibCreateLifeTime(MR_RendererChain); UpnpIPAddressLength = ILibGetLocalIPAddressList(&UpnpIPAddressList); ILibLifeTime_Add(UpnpMonitor,NULL,4,&UpnpIPAddressMonitor,NULL); /* start UPnP - blocking call*/ signal(SIGINT,BreakSink); ILibStartChain(MR_RendererChain); CodecWrapper_UnInit(); /* be sure to free the address list */ FREE(UpnpIPAddressList); return 0; }