當前位置:首頁 » 雲伺服器 » dss如何搭建rtsp伺服器

dss如何搭建rtsp伺服器

發布時間: 2022-05-05 19:09:49

① 如何實現最小的RTSP伺服器

RTSPServer類用於構建一個RTSP伺服器,該類同時在其內部定義了一個RTSPClientSession類,用於處理單獨的客戶會話。

首先創建RTSP伺服器(具體實現類是DynamicRTSPServer),在創建過程中,先建立Socket(ourSocket)在TCP的554 埠進行監聽,然後把連接處理函數句柄(RTSPServer::incomingConnectionHandler)和socket句柄傳給任務調度器(taskScheler)。

任務調度器把socket句柄放入後面select調用中用到的socket句柄集(fReadSet)中,同時將socket句柄和 incomingConnectionHandler句柄關聯起來。 接著,主程序開始進入任務調度器的主循環(doEventLoop),在主循環中調用系統函數select阻塞,等待網路連接。

當RTSP客戶端輸入( rtsp://192.168.0.1/1.mpg)連接伺服器時,select返回對應的scoket,進而根據前面保存的對應關系,可找到對應處理函數句柄,這里就是前面提到的incomingConnectionHandler了。在 incomingConnectionHandler中創建了RTSPClientSession,開始對這個客戶端的會話進行處理。

② 如何用vlc搭建rtsp伺服器

  1. 打開「媒體——流」選項

  2. 點擊「添加」按鈕選擇流媒體文件,然後點擊「串流」按鈕

  3. 點擊「下一個」後,在「目標設置」界面選擇「RTSP」,然後點擊添加 + 按鈕

  4. 填上目標ip地址,並在「轉碼選項」中選擇相應的編碼類型(這個視情況而定),目標IP地址就是PC機器本機的IP地址

  5. 客戶端, 點擊「媒體——打開網路串流」,在彈出的框中輸入「rtsp://192.168.1.2:1234/tcp1」,點擊「播放」按鈕即可。

③ live555中是怎樣創建rtsp伺服器的

可以保存下來的 你發的這個網址本身就是一個音樂的鏈接地址
直接在迅雷中 新建—普通/emule任務 然後把你的這個網址放進去就可以下載的
很簡單的

④ 如何使用easydarwin搭建代理流媒體伺服器

(1)
http://dss.macosforge.org/downloads/DarwinStreamingSrvr5.5.5-Windows.exe
下載後解壓,直接點擊文件Install.bat,安裝到 C:\ProgramFiles\Darwin Streaming Server
(2)
安裝 Perl 解釋器,從 http://www.perl.org/get.html 選擇
Strawberry Perl
ActiveStatePerl
選擇ActivePerlW下載,我的系統是32位,在這里選擇32位的下載,然後安裝 ,默認即可。
裝好後在 cmd 下面使用:
c:\document and settings> cd C:\ProgramFiles\Darwin Streaming Server

# 根據提示創建 WebAdmin 的賬號和密碼
C:\Program Files\Darwin Streaming Server> perl WinPasswdAssistant.pl
# 運行 WebAdmin 管理器
C:\Program Files\Darwin Streaming Server> perl streamingadminserver.pl
# 現在就可以打開 http://127.0.0.1:1220/ 來對 DSS 伺服器進行管理了

在 DSS WebAdmin 裡面修改 General Settings -> Media Directory ,將它改為你的 Media 目錄,如果使用默認的,把視頻文件放到C:\ProgramFiles\Darwin Streaming Server\Movies 裡面
(3)
用 QuickTime 或VLC 打開rtsp://127.0.0.1:554/sample_100kbit.mp4,正常的話,就可以看到視頻正常播放了.Movies 裡面有自帶的樣例.

linux怎麼架設RTSP流媒體伺服器

Linux下利用gnump3d架設流媒體伺服器

庫文件被安裝到:/usr/lib/perl5/5.8.6/gnump3d目錄

man被安裝到:

/usr/man/man1/gnump3d.1

/usr/man/man1/gnump3d-index.1

/usr/man/man1/gnump3d-top.1

/usr/man/man1/gnump3d.conf.1

3、配置

gnump3d的配置文件被存放在/etc/gnump3d/gnump3d.conf ,我們可以對配置文件進行修改。

gnump3d的themes被存放在/usr/share/gnump3d/目錄中,所以要想換theme,可以在 gnump3d.conf中指定。

媒體文件存放在目錄gnump3d.conf中,是/home/mp3 ,您也可以改為您媒體文件的目錄,或者在/home中建一個mp3目錄,把所有的媒體文件拷過去。

4、運行gnump3d流媒體伺服器

[root@localhost gnump3d-2.9.5]# gnump3d&



[root@localhost gnump3d-2.9.5]# gnump3d2&

5、訪問gnump3d流媒體伺服器

訪問地址是:http://localhost:8888/ ,您也可以讓區域網的其它電腦來訪問,當然要把localhost改為您的機器的IP地址,舉例來說,如果您的流媒體伺服器所在電腦的IP是192.168.1.6 ,那麼,區域網訪問地址應該是:

http://192.168.1.6:8888

對屬性的配置頁面:

http://localhost:8888/prefs/

6、漢化theme讓界面變成中文

⑥ RTSP流播放支持什麼格式

Quicktime Player播放 鏈接的應該是DSS,而DSS支持的就是MP4,3pg,mov 。
MS的流伺服器 就支持asf了。

⑦ 如何在win2008中搭建rtsp流媒體伺服器

用Helix Server做流媒體伺服器,搭建過程先參考下http://wenku..com/link?url=uWcq___,如果不成功,後期我會在csdn上寫篇博客,到時候把鏈接發給你。我搭過很多流媒體伺服器,這個就是專門支持rtsp協議的,視頻格式為rmvb或rm,音頻格式為ra,就是用helix server做流媒體伺服器,helix procer plus做視音頻編碼器,realplayer做客戶端播放器,這三個組合起來使用,配置通暢就好了,那麼都和你說了用哪些軟體了,其實網上都能搜到相關軟體的使用說明了,不懂的再問我吧!

java中怎麼實現RTSP伺服器說下思路,說詳細一點,第一次接觸RTSP

按rtsp的協議寫網路程序。。。。。。。。。。有一個開源的項目叫jrtsp

⑨ 怎麼實現最小的RTSP伺服器

親 很高興為你解答 以下答案有道友提供
//////rtsp.c//////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <errno.h>

#include <netdb.h>
#include <time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h> //close()

#include "h264.h"

//#define DEST_PORT 8888

typedef struct
{
int startcodeprefix_len; //! 4 for parameter sets and first slice in picture, 3 for everything else (suggested)
unsigned len; //! Length of the NAL unit (Excluding the start code, which does not belong to the NALU)
unsigned max_size; //! Nal Unit Buffer size
int forbidden_bit; //! should be always FALSE
int nal_reference_idc; //! NALU_PRIORITY_xxxx
int nal_unit_type; //! NALU_TYPE_xxxx
char *buf; //! contains the first byte followed by the EBSP
unsigned short lost_packets; //! true, if packet loss is detected
} NALU_t;

FILE *bits = NULL; //!< the bit stream file
static int FindStartCode2 (unsigned char *Buf);//查找開始字元0x000001
static int FindStartCode3 (unsigned char *Buf);//查找開始字元0x00000001
//static bool flag = true;
static int info2=0, info3=0;
RTP_FIXED_HEADER *rtp_hdr;

NALU_HEADER *nalu_hdr;
FU_INDICATOR *fu_ind;
FU_HEADER *fu_hdr;
/**
int sock_init(int sockfd,struct sockaddr_in addr,int SERVER_PORT)
{
sockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd<0)
{
fprintf(stderr,"Socket Error:%s\n",strerror(errno));
exit(1);
}
printf("sockfd is %d\n",sockfd);
bzero(&addr,sizeof(struct sockaddr_in));

addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
addr.sin_port=htons(SERVER_PORT);

if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)
{
fprintf(stderr,"Bind Error:%s\n",strerror(errno));
exit(1);
}
printf("init successfel!!\nport is %dsockfd is %d\n",SERVER_PORT,sockfd);
return 0;
}
*/

char* sock_recv(int sockfd,struct sockaddr *addr_client,int *addrlen)
{
//int *tem_len = &addrlen;
socklen_t len;
printf("sock_recv sockfd is %d\n",sockfd);
char *recv_buffer = malloc (sizeof (char));
//printf("sock_recv sockfd is88888888888888 %d\n",sockfd);
int n;
n=recvfrom(sockfd,recv_buffer,256,0,addr_client,&len);
//printf("recv number is %d\n",n);
if(0)
{
printf("recvfrom error!\n");
exit (1);
}
if(-1==n)
{
perror("recv error:");
}
else
{
addrlen=(int *)len;
printf("sock recv success!!\n");
/** char IPdotdec[20]; //存放點分十進制IP地址
struct in_addr s =
inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
printf("addr_client.data=%s\n",IPdotdec);
*/ printf("addr_len=%ld\n",addrlen);
}
return recv_buffer;
}

//為NALU_t結構體分配內存空間
NALU_t *AllocNALU(int buffersize)
{
NALU_t *n;

if ((n = (NALU_t*)calloc (1, sizeof (NALU_t))) == NULL)
{
printf("AllocNALU: n");
exit(0);
}

n->max_size=buffersize;

if ((n->buf = (char*)calloc (buffersize, sizeof (char))) == NULL)
{
free (n);
printf ("AllocNALU: n->buf");
exit(0);
}

return n;
}
//釋放
void FreeNALU(NALU_t *n)
{
if (n)
{
if (n->buf)
{
free(n->buf);
n->buf=NULL;
}
free (n);
}
}

void OpenBitstreamFile (char *fn)
{
if (NULL == (bits=fopen(fn, "rb")))
{
printf("open file error\n");
exit(0);
}
printf("test264 open successful!\n");
}
//這個函數輸入為一個NAL結構體,主要功能為得到一個完整的NALU並保存在NALU_t的buf中,獲取他的長度,填充F,IDC,TYPE位。
//並且返回兩個開始字元之間間隔的位元組數,即包含有前綴的NALU的長度
int GetAnnexbNALU (NALU_t *nalu)
{
int pos = 0;
int StartCodeFound, rewind;
unsigned char *Buf;

if ((Buf = (unsigned char*)calloc (nalu->max_size , sizeof(char))) == NULL)
printf ("GetAnnexbNALU: Could not allocate Buf memory\n");

nalu->startcodeprefix_len=3;//初始化碼流序列的開始字元為3個位元組

if (3 != fread (Buf, 1, 3, bits))//從碼流中讀3個位元組
{
free(Buf);
return 0;
}
info2 = FindStartCode2 (Buf);//判斷是否為0x000001
if(info2 != 1)
{
//如果不是,再讀一個位元組
if(1 != fread(Buf+3, 1, 1, bits))//讀一個位元組
{
free(Buf);
return 0;
}
info3 = FindStartCode3 (Buf);//判斷是否為0x00000001
if (info3 != 1)//如果不是,返回-1
{
free(Buf);
return -1;
}
else
{
//如果是0x00000001,得到開始前綴為4個位元組
pos = 4;
nalu->startcodeprefix_len = 4;
}
}

else
{
//如果是0x000001,得到開始前綴為3個位元組
nalu->startcodeprefix_len = 3;
pos = 3;
}
//查找下一個開始字元的標志位
StartCodeFound = 0;
info2 = 0;
info3 = 0;

while (!StartCodeFound)
{
if (feof (bits))//判斷是否到了文件尾
{
nalu->len = (pos-1)-nalu->startcodeprefix_len;
memcpy (nalu->buf, &Buf[nalu->startcodeprefix_len], nalu->len);
nalu->forbidden_bit = nalu->buf[0] & 0x80; //1 bit
nalu->nal_reference_idc = nalu->buf[0] & 0x60; // 2 bit
nalu->nal_unit_type = (nalu->buf[0]) & 0x1f;// 5 bit
free(Buf);
return pos-1;
}
Buf[pos++] = fgetc (bits);//讀一個位元組到BUF中
info3 = FindStartCode3(&Buf[pos-4]);//判斷是否為0x00000001
if(info3 != 1)
info2 = FindStartCode2(&Buf[pos-3]);//判斷是否為0x000001
StartCodeFound = (info2 == 1 || info3 == 1);
}

// Here, we have found another start code (and read length of startcode bytes more than we should
// have. Hence, go back in the file
rewind = (info3 == 1)? -4 : -3;

if (0 != fseek (bits, rewind, SEEK_CUR))//把文件指針指向前一個NALU的末尾
{
free(Buf);
printf("GetAnnexbNALU: Cannot fseek in the bit stream file");
}

// Here the Start code, the complete NALU, and the next start code is in the Buf.
// The size of Buf is pos, pos+rewind are the number of bytes excluding the next
// start code, and (pos+rewind)-startcodeprefix_len is the size of the NALU excluding the start code
// 不管有沒有再次讀到 頭 ,其主要 關心的還是 nalu->len
nalu->len = (pos+rewind)-nalu->startcodeprefix_len;
memcpy (nalu->buf, &Buf[nalu->startcodeprefix_len], nalu->len);//拷貝一個完整NALU,不拷貝起始前綴0x000001或0x00000001
nalu->forbidden_bit = nalu->buf[0] & 0x80; //1 bit
nalu->nal_reference_idc = nalu->buf[0] & 0x60; // 2 bit
nalu->nal_unit_type = (nalu->buf[0]) & 0x1f;// 5 bit
free(Buf);

return (pos+rewind);//返回兩個開始字元之間間隔的位元組數,即包含有前綴的NALU的長度
}
//輸出NALU長度和TYPE
void mp(NALU_t *n)
{
if (!n)return;
//printf("a new nal:");
printf(" len: %d ", n->len);
printf("nal_unit_type: %x\n", n->nal_unit_type);
}
希望能幫助你

⑩ 如何在手機內部搭建rtsp伺服器

package org.zhangkai.postdata;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;

import org.apache.http.protocol.HTTP;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class postActivity extends Activity implementsRunnable{

Button btn ;

final String SERVER = "127.0.0.1";
final int PORT = 1560;//在手機內部,埠號可以隨便用,除了有固定用途的埠,比如80

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btn = (Button)this.findViewById(R.id.send);
btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
try {
Socket socket = new Socket (SERVER,PORT);

OutputStream mOutput = socket.getOutputStream();
mOutput.write("test".getBytes());
mOutput.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
new Thread (this).start();
}

public void run() {
try {
ServerSocket server = new ServerSocket (PORT);
System.out.println("start accept....");
Socket socket = server.accept();
InputStream mInput = socket.getInputStream();
byte[] data = new byte[1400];
int length = mInput.read(data);
System.out.println("data:"+new String (data,0,length));
} catch (IOException e) {
e.printStackTrace();
}
}
}

熱點內容
sql資料庫的埠 發布:2025-01-22 12:20:02 瀏覽:362
安卓最終幻想8怎麼設置中文 發布:2025-01-22 12:19:23 瀏覽:651
怎麼查電腦配置和網路 發布:2025-01-22 12:19:16 瀏覽:586
linuxsnmp查看 發布:2025-01-22 12:17:49 瀏覽:37
安卓數據線怎麼接藍牙 發布:2025-01-22 12:07:29 瀏覽:229
扣扣賬號多少次密碼不正確會被封 發布:2025-01-22 12:07:19 瀏覽:400
python是32位還是64位 發布:2025-01-22 11:51:41 瀏覽:894
鈴聲多多緩存文件夾 發布:2025-01-22 11:51:39 瀏覽:724
java按鍵精靈 發布:2025-01-22 11:49:31 瀏覽:81
python配色 發布:2025-01-22 11:46:40 瀏覽:613