⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ao_null.c

📁 自己移植的linux下的流媒体播放器原代码,支持mms协议,支持ftp和http协议.
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/time.h>#include "config.h"#include "libaf/af_format.h"#include "audio_out.h"#include "audio_out_internal.h"static ao_info_t info = {	"Null audio output",	"null",	"Tobias Diedrich",	""};LIBAO_EXTERN(null)struct	timeval last_tv;int	buffer;static void drain(){     struct timeval now_tv;    int temp, temp2;    gettimeofday(&now_tv, 0);    temp = now_tv.tv_sec - last_tv.tv_sec;    temp *= ao_data.bps;        temp2 = now_tv.tv_usec - last_tv.tv_usec;    temp2 /= 1000;    temp2 *= ao_data.bps;    temp2 /= 1000;    temp += temp2;    buffer-=temp;    if (buffer<0) buffer=0;    if(temp>0) last_tv = now_tv;//mplayer is fast}// to set/get/query special features/parametersstatic int control(int cmd,void *arg){    return -1;}// open & setup audio device// return: 1=success 0=failstatic int init(int rate,int channels,int format,int flags){    ao_data.buffersize= 65536;    ao_data.outburst=1024;    ao_data.channels=channels;    ao_data.samplerate=rate;    ao_data.format=format;    ao_data.bps=channels*rate;    if (format != AF_FORMAT_U8 && format != AF_FORMAT_S8)	ao_data.bps*=2;     buffer=0;    gettimeofday(&last_tv, 0);    return 1;}// close audio devicestatic void uninit(int immed){}// stop playing and empty buffers (for seeking/pause)static void reset(){    buffer=0;}// stop playing, keep buffers (for pause)static void audio_pause(){    // for now, just call reset();    reset();}// resume playing, after audio_pause()static void audio_resume(){}// return: how many bytes can be played without blockingstatic int get_space(){    drain();    return ao_data.buffersize - buffer;}// plays 'len' bytes of 'data'// it should round it down to outburst*n// return: number of bytes playedstatic int play(void* data,int len,int flags){    int maxbursts = (ao_data.buffersize - buffer) / ao_data.outburst;    int playbursts = len / ao_data.outburst;    int bursts = playbursts > maxbursts ? maxbursts : playbursts;    buffer += bursts * ao_data.outburst;    return bursts * ao_data.outburst;}// return: delay in seconds between first and last sample in bufferstatic float get_delay(){    drain();    return (float) buffer / (float) ao_data.bps;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -