java做一个视频服务端,供网页或者app来播放视频,应该怎么做?

求用java 做视频网站的思路!需要哪些知识。 客户端如何访问存放在服务端的视频?
关注者
56
被浏览
38,225

1 个回答

如果你只是自己玩玩的话,和Java不Java没关系,反正流媒体推流器一般都是C的,你在Java调用命令就可以了,服务端直接上:

GitHub - macosforge/dss: Darwin Streaming Server is Apple's open source version of the QuickTime Streaming Server technology allowing you to send streaming media across the Internet using the industry standard RTP and RTSP protocols.

,就是大名鼎鼎的DSS,接收端用各种开源的flash或Android版网络播放器就可以,这是我随手搜到的一篇教程,

DSS 流媒体服务器搭建

,我没有实验是否成功。

如果你想深入一点你可以先尝试使用ffmpeg的命令行进行推流,使用VLC进行串流的播放,这样在进行查找资料和看文档的过程中可以对视频流的一些概念有一些初步的认识。这是ffserver的文档:

ffserver Documentation

,当然,熟悉命令以后再看看ffserver的源码也可以,不用急。

另外,考虑到你用Java,这儿有一个我早年学习过的项目:

GitHub - fyhertz/libstreaming: A solution for streaming H.264, H.263, AMR, AAC using RTP on Android

,是Android端的,编解码用的Android提供的MediaRecorder 进行硬件编解码。 我之所以推荐这个项目,最大的原因是它用较少的代码分别实现了H.264/H.263 AMR/AAC的手动封包,而且每种流的封包只用了一个Java文件就完成了,非常利于新人学习!

在学习这个项目的时候,你的Android端和网页端也都顺便解决了,因为他有很全的Example,包括一个功能强大的Android端推流服务器和网页版视频流播放器: GitHub - fyhertz/spydroid-ipcamera: A powerful and funny android app. that streams the camera and microphone of your phone to your browser or to VLC

最后,如果你真想再深入学的话,我建议学习RTP/RTCP甚至只学习RTP,因为RTSP只是个会话层协议,传输还是用的RTP,初期的话,先用ffmpeg进行一个简单的基于RTP H.264 mp3的p2p视频通话,这样子,你就可以弄清楚sdp,时钟频率,payload type,timestamp,encoder,decoder,color-format,sound-plane等一些音视频中常用的概念了。

不过,使用ffmpeg库写p2p video communication的话,还是弄不清楚原理的,因为它封装的太好了,基本上发送就是 openCam->encode->Transform Color Format->make RTP Packet->write,接受就是openSDP->guess decoder->receive Stream->decode->transform color format->rendering,这样的话,你还是会有一种朦朦胧胧的感觉,虽然程序也写出来了,不过,这时候你至少抓住了主干。

想再深入的话,就尝试 调用系统接口实现H.264的硬编,参考着RFC 3984和网上的资料手动对H.264流进行封包,用

JRTPLIB: JRTPLIB

进行发送,当然接受也得用JrtpLib。

再深入的话,我也不知道了...