已解决: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!\
相关文档:
【recv/recvfrom/recvmsg系统调用】
功能描述:
从套接字上接收一个消息。对于recvfrom 和 recvmsg,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。
如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余 ......
linux系统安装完,以后通过命令模式配置网卡IP。配置文件通常是/etc/sysconfig/network-scripts/ifcfg-interface-name
1.配置网卡IP地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #第二块网卡:vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth0 #物理设备名
IPADDR=192.168.1.10 #IP地址
NETMASK=255. ......
摘要: 本文详解了内核中面向对象的list结构的原理,以及如何以list为内嵌对象来构造自己的链表结构,如何从内嵌list对象获得自定义的对象指针;探讨了各种宏或者函数的详细使用方法及怎样以通用list结构来操作自定义对象。
关键字:双向循环链表,list,list_entry,typeof,containerof,list_for_each,list_for_each ......
Syslog设备依据两个重要的文件:/etc/syslogd(守护进程)和/etc/syslog.conf配置文件,习惯上,多数syslog 信息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog纪录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围(但不在日之中出现)。
每个syslog消息被赋予下 ......
linux线程(pthread)编程中的segmentation fault!!
Posted on 星期五, 3月 27th, 2009 at 10:28 下午
源文来自http://www.isongzi.com/2009/03/27/pthread-segmentation-fault/
继socket bad addres 错误之后,在创建线程【pthread_create()】的时候又出现了 segmentation fault。
错误语句如下:
pthread_create(& ......