亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2825 | 回復(fù): 6
打印 上一主題 下一主題

Linux音視頻同步問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-08-22 10:05 |只看該作者 |倒序?yàn)g覽
本人開發(fā)了一個(gè)視頻采集播放系統(tǒng),程序基本寫好了,單音視頻不能同步,哪位大蝦幫一下忙

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [報(bào)告]
發(fā)表于 2009-08-22 10:10 |只看該作者

回復(fù) #1 buaalinux1 的帖子

這個(gè)是你的程序問題,具體現(xiàn)象描述清楚一點(diǎn)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-08-23 18:57 |只看該作者
終于有回應(yīng)得了,先表示感謝,具體說來就是:聲音和圖像可以并發(fā)執(zhí)行,但時(shí)間對(duì)不上號(hào),此刻的聲音不能和此刻的圖像同步,具體程序如下,有會(huì)寫同步的請(qǐng)幫忙給出答案,就是給點(diǎn)指點(diǎn)也好,大概該怎末做,說一下,不勝感激

//---------play avi---------------

/*image thread*/
void *thread3()
{
    int filesize;
    char *bbuffer=NULL;
    bbuffer = (char *)malloc (320*240*4);
    char *dataBuf;
    
    mem_file.pfilebuff=bbuffer;
    dataBuf=(char*)malloc(320*3*240);
    for(;;)
    {
         if(fread(&filesize,1,4,avfp) == 4)
        {
            printf("read filesize is : %d !\n",filesize);
        }      
        if(fread(bbuffer,1,filesize,avfp) != filesize)
        {
            printf("play is over !\n");
            break;
        }
        
        mem_file.base=0;
        mem_file.filesize=filesize;
        
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mem_file.filesize<=0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!mem_file.pfilebuff)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo.err=jpeg_std_error(&jerr.pub);
&nbsp;&nbsp;&nbsp;&nbsp;   jerr.pub.error_exit=my_error_exit;
&nbsp;&nbsp;&nbsp;&nbsp;   if (setjmp(jerr.setjmp_buffer))
&nbsp;&nbsp;&nbsp;&nbsp;        {
&nbsp;&nbsp;&nbsp;&nbsp;       jpeg_destroy_decompress(&cinfo);
&nbsp;&nbsp;&nbsp;&nbsp;       goto clearend;
&nbsp;&nbsp;&nbsp;&nbsp;     &nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;   jpeg_create_decompress(&cinfo);&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_stdio_src(&cinfo,(FILE *)(&mem_file));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_read_header(&cinfo,TRUE);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_start_decompress(&cinfo);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dataBuf==NULL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("JpegFile :\nOut of memory");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_destroy_decompress(&cinfo);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto clearend;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_stride=cinfo.output_width * cinfo.output_components;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width=cinfo.output_width;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height=cinfo.output_height;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer=(*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(cinfo.output_scanline<cinfo.output_height)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_read_scanlines(&cinfo,buffer,1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (cinfo.out_color_components==3)
&nbsp;&nbsp;&nbsp;&nbsp;      &nbsp;&nbsp;&nbsp;&nbsp;j_putRGBScanline(buffer[0],cinfo.output_width,dataBuf,cinfo.output_scanline-1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(cinfo.out_color_components==1)
&nbsp;&nbsp;&nbsp;&nbsp;      &nbsp;&nbsp;&nbsp;&nbsp;j_putGrayScanlineToRGB(buffer[0],cinfo.output_width,dataBuf,cinfo.output_scanline-1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(void)jpeg_finish_decompress(&cinfo);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_destroy_decompress(&cinfo);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diff_width=fbdev.fb_width-width;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diff_height=fbdev.fb_height-height;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(diff_width>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x= diff_width/2;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width=fbdev.fb_width;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(diff_height>0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y=diff_height/2;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   y=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   height=fbdev.fb_height;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fbdev.fb_draw(&fbdev,dataBuf,0,0,320,240);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;clearend:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(dataBuf);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(bbuffer);
}

/*sound thread*/
void *thread4()
{
&nbsp;&nbsp;&nbsp;&nbsp;int id;
&nbsp;&nbsp;&nbsp;&nbsp;int arg;
&nbsp;&nbsp;&nbsp;&nbsp;int status;
&nbsp;&nbsp;&nbsp;&nbsp;char buf[4096];

/*&nbsp;&nbsp;&nbsp;&nbsp;if((audiofd = open("/dev/sound/dsp",O_WRONLY)) < 0 )
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Can't open sound device!\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;&nbsp;&nbsp;}
*/

/*&nbsp;&nbsp;&nbsp;&nbsp;if((fd = open("/tmp/audio.wav",O_RDWR)) < 0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Can't open output file!\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit (1);
&nbsp;&nbsp;&nbsp;&nbsp;}
*/

&nbsp;&nbsp;&nbsp;&nbsp;arg = SIZE;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = ioctl(audiofd,SOUND_PCM_WRITE_BITS,&arg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(status == -1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("SOUND_PCM_WRITE_BITS ioctl failed\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(arg != SIZE)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("unable to set sample size\n");

&nbsp;&nbsp;&nbsp;&nbsp;arg = CHANNELS;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = ioctl(audiofd,SOUND_PCM_WRITE_CHANNELS,&arg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(status == -1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("SOUND_PCM_WRITE_CHANNELS ioctl failed\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(arg != CHANNELS)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("unable to set number of channels\n");

&nbsp;&nbsp;&nbsp;&nbsp;//arg = RATE;

&nbsp;&nbsp;&nbsp;&nbsp;arg =22050;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = ioctl(audiofd,SOUND_PCM_WRITE_RATE,&arg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(status == -1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("SOUND_PCM_WRITE_WRITE ioctl failed\n");

&nbsp;&nbsp;&nbsp;&nbsp;while(fread(buf,sizeof(buf),1,audiofp) > 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(audiofd,buf,sizeof(buf));

}

void play_thread_create(void)
{
&nbsp;&nbsp;&nbsp;&nbsp;int temp;
&nbsp;&nbsp;&nbsp;memset(&thread, 0, sizeof(thread));          //comment1

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*創(chuàng)建線程*/
&nbsp;&nbsp;&nbsp;if((temp = pthread_create(&thread[0], NULL, thread3, NULL)) != 0)       //comment2

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(" sorry sir thread 3 failed !\n");
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("my sir thread 3 is successful !\n");
&nbsp;&nbsp;&nbsp;&nbsp;if((temp = pthread_create(&thread[1], NULL, thread4, NULL)) != 0)  //comment3

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("sorry sir thread 4 failed !\n");
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("my sir thread 4 is successful !\n");
}

void play_thread_wait(void)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*等待線程結(jié)束*/
&nbsp;&nbsp;&nbsp;&nbsp;if(thread[0] !=0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_join(thread[0],NULL);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("thread 1 was over! \n");
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;if(thread[1] !=0)
&nbsp;&nbsp;&nbsp;&nbsp;{              
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_join(thread[1],NULL);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("thread 2 was over !\n");
&nbsp;&nbsp;&nbsp;&nbsp;}
}


[ 本帖最后由 dreamice 于 2009-8-23 21:53 編輯 ]

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [報(bào)告]
發(fā)表于 2009-08-23 21:54 |只看該作者

回復(fù) #3 buaalinux1 的帖子

應(yīng)該是同步問題造成的,這個(gè)我也沒什么經(jīng)驗(yàn)

論壇徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵節(jié)徽章
日期:2015-03-06 15:50:392015亞冠之大阪鋼巴
日期:2015-06-12 16:01:352015年中國系統(tǒng)架構(gòu)師大會(huì)
日期:2015-06-29 16:11:2815-16賽季CBA聯(lián)賽之四川
日期:2018-12-17 14:10:21
5 [報(bào)告]
發(fā)表于 2009-08-24 11:19 |只看該作者
加個(gè)timeline
然后聲音的數(shù)據(jù)掛在timeline上,視頻的也掛在timeline上
對(duì)比一下,就可以同步了,一般來說,是視頻跟隨聲音的
圖像處理速度慢的話,可以根據(jù)聲音來跳幀

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-08-24 12:47 |只看該作者
一段段的放,同不同步只能靠天了.

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
7 [報(bào)告]
發(fā)表于 2009-08-24 15:05 |只看該作者
原帖由 T-bagwell 于 2009-8-24 11:19 發(fā)表
加個(gè)timeline
然后聲音的數(shù)據(jù)掛在timeline上,視頻的也掛在timeline上
對(duì)比一下,就可以同步了,一般來說,是視頻跟隨聲音的
圖像處理速度慢的話,可以根據(jù)聲音來跳幀


Tbag兄,一般來說,音視頻是同時(shí)存儲(chǔ)在一起的,還是分開存儲(chǔ)的?
我記得以前做的時(shí)候,是同時(shí)存儲(chǔ)的,所以播放的時(shí)候不存在同步的問題。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP