jingtao请进,对问题做进一步解决(100分)

  • 主题发起人 主题发起人 chinahawk
  • 开始时间 开始时间
C

chinahawk

Unregistered / Unconfirmed
GUEST, unregistred user!
我在http://www.delphibbs.com/delphibbs/dispq.asp?lid=1181350提出的关于VOD的问题
你是如下解答的
"呵呵
不用那么复杂吧?
客户端用MEDIAPLAY接收即可
服务端发送数据前添加一些控制信息欺骗MEDIAPLAY让它以为是ASF流即可(五行代码解决问题)
月强大的功能有时侯实现起来是越简单的."
请问具体要如何做呢?服务器端不需要Windows Server 或提供共享目录吗?
 
就算是ASF格式,那又怎么样?
要是用media server或者共享目录,根本不需要自己做directshow的编程.
 
就是不用media server或者共享目录,文件的传送用DELPHI来做,如何播放?
 
1:不用media server或者共享目录的.
2:不过其实还是用了media server的原理而已.也就是说自己的程序就是一个media server
http://www.138soft.com/htm/kiss.jpg这个就是用这个原理的.
实际上,media server向mediaplay的端口发数据(80端口)服务器的响应头大概如下
(mediaplay请求Weblogic时截取下来的)
HTTP/1.1 200 OK
Server: WebLogic 5.1.0 04/03/2000 17:13:23 #66825
Content-Length: 49987
Content-Type: text/plain
Last-Modified: Wed, 16 Jun 1999 06:59:58 GMT
Connection: Keep-Alive
用这个方法.可以支持MEDIAPLAY可以支持的任何格式.包括MPEG1,2,4.
超级解霸的作者说成功解决了网络播放MPEG2的问题.开始的时候还以为他自己写了一个
FILTER.实际上后来跟踪程序发现,他还是用Mediaplay server搞定的.呵呵.
3:用Directx Show可以做流式的.DAT,MPG,AVI,MP3,WAV都可以广播播放.
不过现在大家一般做的都是基于PULL方式而不是PUSH方式的.所以有延迟.
不过很多人不知道,做了个32768*10的内存缓冲就可以实现一个简单的PULL到PUSH的转换,
就没有了DX在RENDER时,等待它干些乱七遭八事情时的痛苦,还可以随时切换到接受任意
字节的流数据输入
http://www.138soft.com/dvbtest.zip
这个版本只能播放MPG文件
其它格式的已经做好.未添加进去.最近很忙

遇到问题要用最简单的方法来考虑和实现.注意跟踪系统.
比如说多年前我发现冰河的服务端配置没有写注册表.原来它放在自己身上了.
远程配置的时候怎么写进去呢?我分析如下:
第一步:
先修改注册表:
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/WinoldApp
键名:Disabled 键值:1
作用是禁止运行DOS程序(包括批处理文件)
你也可以用超级兔子之类的程序来修改。
-----------------------------------------------
第二步:配置服务端种种子,我们选择安装在<TEMP>目录下(原因:文件比<windows>、<system>下都要少),把<TEMP>目录下尽量清空,以便于我们下一步分析。
-----------------------------------------------
第三步:运行服务端,用客户端成功连接后修改配置系统会弹出一个窗口:本次操作受限制,云云。
------------------------------------------------
第四步:打开<TEMP>目录,发现除了服务端文件外,多了两个文件:NewFile.exe和sysclr.bat。击右键查看属性可以看出NewFile.exe跟服务端文件大小一样,从而知道它是服务端的备份。打开sysclr.bat,内容如下:
@echo off
:loop
del c:/windows/TEMP/NewFile.exe
if exist c:/windows/TEMP/NewFile.exe goto loop
del %0
--------------------------------------------------
得出结论了吧:)然后自己打开DELPHI,花87秒钟自己写一个来验证。


所以分析问题的方法比具体解决问题的方法重要的多.

对于这个问题,我只能回答到这里.很抱歉.
 
分析得很透彻,呵呵....
不过,要是从中间接收数据,那怎么办?
VOD不会有这个问题,因为都是client主动请求,server把数据发过来就可以了.
按照jingtao的说法,在前面加一些文件头的信息就可以了.
...
我当初解决这些问题的办法是自己写了一整套mpeg1/2的视频和音频解码算法,
呵呵...费劲了半个月,最后还是感觉占用cpu时间比mediaplayer稍微多一些,
好处是全部是自己的源代码,还可以在linux下面用,呵呵...
 
从中间开始接收数据也是一样的啊
每次发一个包的时候都要添加一个头信息的
你甚至可以为每个包头打上标志的.

用DIRCTEX不占CPU和内存的
一般的方法是基于文件轮询的,改为事件触发方式即可解决问题
 
后退
顶部