1-哪一个更适合流式传输视频? TCP或UDP套接字,为什么?当流媒体直播时,音频和视频分别来自服务器,所以我如何确保我显示的视频和我在设备上播放的音频同步?直播(插座) - 如何同步音频和视频?
7
A
回答
5
前段时间我写了一个语音聊天应用程序,而TCP无法解决问题,如果您正在寻找接近实时的数据流,UDP多播真的是唯一的选择。有有虽然流的东西在UDP上两个主要问题:
- 丢包。在音频的情况下,这是一个非常简单的修复。通常丢弃的数据包不会产生可听见的差异(数据包单独解压缩)。然而,在处理视频时,尤其是在视频被压缩(通常是视频)的情况下,找出一个合适的传输协议来确保网络的稳健性是一项艰巨的任务,尤其是如果您是从头开始的话。视频帧被分成不同的数据包。弄清楚这些数据包丢失后该怎么做很难。
- 音频和视频之间的同步。这是一个非常棘手的问题,我建议阅读RTSP(实时流协议)等协议。这不是一件容易的事,但是这里有一些介绍性的信息:http://www.cs.columbia.edu/~hgs/rtsp/ - 有时它通过发送单独的同步数据包(某些协议通过TCP发送这些数据包)告诉播放器声音应该如何与视频匹配。
1
我会做UDP。然而这取决于你想要什么。 UDP将丢弃数据包而不是等待(TCP)。权衡是你是否想要一个稳定的,但有时是缓慢和昂贵的,或者是有效的,但有时可能无法交付。当你想要实现它以及你如何使用它时,选择是你的。
0
今天甚至YouTube的流通过HTTP ...这里是一个应用程序的NodeJS哪些流文件浏览器客户端...使用为出发点与音频流媒体直播视频很好地同步
// usage
// do following on server side (your laptop running nodejs)
// node this_file.js
//
// then once above is running point your browser at
// http://localhost:8888
//
// of course your browser could be on your mobile or own custom app
var http = require('http'),
fs = require('fs'),
util = require('util');
var path = "/path/to/audio/or/video/file/local/to/server/cool.mp4"; // put any audio or video file here
var port = 8888;
var host = "localhost";
http.createServer(function (req, res) {
var stat = fs.statSync(path);
var total = stat.size;
if (req.headers.range) { // meaning client (browser) has moved the forward/back slider
// which has sent this request back to this server logic ... cool
var range = req.headers.range;
var parts = range.replace(/bytes=/, "").split("-");
var partialstart = parts[0];
var partialend = parts[1];
var start = parseInt(partialstart, 10);
var end = partialend ? parseInt(partialend, 10) : total-1;
var chunksize = (end-start)+1;
console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize);
var file = fs.createReadStream(path, {start: start, end: end});
res.writeHead(206, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': 'video/mp4' });
file.pipe(res);
} else {
console.log('ALL: ' + total);
res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'video/mp4' });
fs.createReadStream(path).pipe(res);
}
}).listen(port, host);
console.log("Server running at http://" + host + ":" + port + "/");
相关问题
- 1. 如何从不同来源同步播放视频和音频?
- 2. portaudio视频/音频同步
- 3. 媒体播放器同步播放音频和视频android
- 4. AVCaptureMovieFileOutput音频/视频同步
- 5. 音视频同步
- 6. 使用OpenAL和C++同步音频和视频播放
- 7. iPhone:同时播放音频和视频
- 8. 同时播放HTML5视频和音频
- 9. FFMPEG音频和视频同步误差
- 10. 如何在iphone应用程序中同步音频和视频
- 11. 如何保持音频和视频(GEM)同步?
- 12. 将SoundCloud音频和Vimeo/Youtube视频同步播放
- 13. 使用GStreamer播放mp4文件时同步音频和视频
- 14. MPMoviePlayerController音频/视频不同步
- 15. 如何将音频和图像同步
- 16. 使用音频播放视频后录制音频和视频
- 17. 音频视频同步与ffmpeg
- 18. 用于同步音频创建和播放的Python音频库
- 19. AVFoundation:视频到OpenGL纹理工作 - 如何播放和同步音频?
- 20. CAKeyframeAnimation和音频同步
- 21. TCP-流:音频/视频同步
- 22. 如何使用xuggler同步音频和视频
- 23. 如何获取Facebook直播视频的直播视频ID?
- 24. FFMPEG音频,视频不同步
- 25. Directshow的音频/视频拍摄同步
- 26. 同步音频和文字
- 27. 同步HTML5音频和JavaScript
- 28. 如何播放音频或视频ParcelFileDescriptor
- 29. 如何播放YouTube视频的音频?
- 30. 直播视频