易截截图软件、单文件、免安装、纯绿色、仅160KB

已解决:Linux中用socket实现视频、音频的同步传输

已解决:Linux中用socket实现视频、音频的同步传输
Posted on 星期四, 4月 23rd, 2009 at 1:55 上午
源文来自http://www.isongzi.com/2009/04/23/已解决:linux下用socket实现视频、音频的同步传输/
在之前的一篇文章里已经提到过视频、声音的同步传输问题,当时想了几个方案,当然都是很不成熟的想法。有些事情只有做了才知道到底行不行得通,有时候实际情况比想象得要简单。
1、创建两个线程-视频线程、音频线程。
关于视频部分的实现参考这里,音频部分的实现参考这里。其中,视频实现单向传输,音频实现双向传输。两个线程之间并没有做任何类似于“信号量“的同步措施。因为只要保证视频和音频是”同时“发送,在接收端就可以”几乎“同时显示和播放。因为是在局域网中传输,速度有保证,在要求不是很苛刻的情况下,同步是可以满足的。而且,事实也证明了,这种很朴素的方法是行得通的。
/*creat video and audio thread*/
pthread_create(&enc_tid,NULL,(void *)video_send, (void *)&arg);
//视频的详细介绍参看这里
pthread_create(&audio_tid,NULL,(void *)audio_encdec,(void *)&sockfd_audio);
//声音的详细介绍参看这里
2、既然要用两个线程来实现传输,一个很自然的问题就是:视频流和音频流是如何处理的?答案是:建立用两条独立的流,一条传输视频,一条传输声音。我们知道,socket在服务器端创建一个sockfd_server之后,这个sockfd_server可以一直监听是否有连接请求。也就是说,我们可以在服务器端创建一个server_fd,然后连接客户端的两个连接请求-视频、音频。
还是代码表示更直观:
发送端:(作为服务器端,和上次比做了调换)
//socket描述符
#define port 8000
int sockfd_server;
int sockfd_video;
int sockfd_audio;
//server_init函数也就是这里的recv_init,只是换了个名字。
sockfd_video=server_init(&sockfd_server,port);
//sockfd_server继续监听下一个请求。
sockfd_audio=accept(sockfd_server,(struct sockaddr *)NULL,NULL);
接收端:(作为客户端,同样做了调换)
#define port 8000
int err;
int sockfd_video;
int sockfd_audio;
const char *host_addr=”192.168.1.110″;
/*video socket init */
err=client_init(&sockfd_video,host_addr,port);
if(err==-1){
printf(”socket_video init failed!\


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

linux 2.6源代码情景分析笔记之中断与异常6

每个中断向量都有自己的irq_desc_t描述符,所有的这些描述符组织在一起形成irq_desc数组。
typedef struct irq_desc {
        hw_irq_controller *handler;指向pic对象(hw_irq_controller描述符),服务于irq线
        void *handler_data;指 ......

LINUX下关于CPU信息获取

1. TOP    命令 然后按“1”,可以查看CPU有多少个核。
2. less /proc/cpuinof 可以查看 CPU内核个数及更多内核信息。
3.dmesg |grep CPU 可以核实CPU内核个数且基于多少个物理CPU及详细信息。
4.dmidecode |grep "CPU"  可以核实多少个物理CPU。
另外  grep '' * 有妙用,可以查看 ......

linux系统的ld.so.conf文件

今天重新编译以前的一个程序,里面用到iconv库:gcc test.cc -liconv
运行时:a.out:error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
以前编译运行是可以的,可能是不久前升级了iconv库影响。在/usr/local/lib下可以找到libiconv.so.2,把/usr/local/l ......

linux 定时任务 crontab 详细解释

cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务: 
引用: 
/sbin/service crond start //启动服务 
/sbin/service crond stop //关闭服务 
/sbin/service crond restart //重启服务 
/sbin/service crond reload //重新载入配置 
//============= ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号