为了测试,我想构建一个对实时音频进行编码然后解码的管道。我尝试过使用mp3或aac编码,如果源是非实时的,我当然可以这样做:
public class ToDoListFragment extends Fragment {
private RecyclerView mToDoListRecyclerView;
private ToDoAdapter mAdapter;
private EditText mTitleEditText;
private ToDo mToDo;
private Button mAddButton;
private Button mDeleteButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_to_do_list, container, false);
mTitleEditText = (EditText) view.findViewById(R.id.editText_toDo);
mAddButton = (Button) view.findViewById(R.id.addButton_toDo);
mDeleteButton = (Button) view.findViewById(R.id.deleteButton_toDo);
mAddButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mToDo = new ToDo();
mToDo.setTitle(mTitleEditText.getText().toString());
ToDoListLab.get(getActivity()).addToDo(mToDo);
mAdapter.notifyDataSetChanged();
}
});
/*mDeleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mToDo.isSolved() == true){
ToDoListLab.get(getActivity()).removeToDo(mToDo);
mAdapter.notifyDataSetChanged();
}
}
});*/
mToDoListRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_toDo);
mToDoListRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
updateUI();
return view;
}
private void updateUI() {
ToDoListLab ToDoLab = ToDoListLab.get(getActivity());
List<ToDo> toDo = ToDoLab.getToDo();
mAdapter = new ToDoAdapter(toDo);
mToDoListRecyclerView.setAdapter(mAdapter);
}
private class ToDoHolder extends RecyclerView.ViewHolder{
private ToDo mToDo;
private TextView mTitleTextView;
private CheckBox mSolvedCheckBox;
public ToDoHolder (View itemView){
super(itemView);
mTitleTextView = (TextView) itemView.findViewById(R.id.textview_toDo);
mSolvedCheckBox = (CheckBox) itemView.findViewById(R.id.checkbox_toDo);
/*mSolvedCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mToDo.setSolved(isChecked);
}
});*/
}
public void bindToDo(ToDo toDo){
mToDo = toDo;
mTitleTextView.setText(mToDo.getTitle());
mSolvedCheckBox.setChecked(mToDo.isSolved());
}
}
private class ToDoAdapter extends RecyclerView.Adapter<ToDoHolder>{
private List<ToDo> mToDos;
public ToDoAdapter(List<ToDo> toDos){
mToDos = toDos;
}
@Override
public ToDoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
View view = layoutInflater.inflate(R.layout.list_item_to_do, parent, false);
return new ToDoHolder(view);
}
@Override
public void onBindViewHolder(ToDoHolder holder, int position) {
ToDo toDo = mToDos.get(position);
holder.bindToDo(toDo);
}
@Override
public int getItemCount() {
return mToDos.size();
}
}
}
在上述情况下,管道构建完毕,我可以听到播放的音频。但是,如果源是实时的,则管道无法播放,但没有播放音频。
我确定我错过了一些关键概念,但看不到什么!
答案 0 :(得分:0)
它可能是您使用的实时源导致问题吗?它可能有额外的延迟,导致音频接收器丢弃所有样本。
这条管道怎么样:
$ gst-launch-1.0 audiotestsrc is-live=true ! faac ! aacparse ! faad ! autoaudiosink
这里的audiotestsrc就好像它是一个实时源。另请注意,建议在编码器元素之后添加解析器。所以&#34; aacparse&#34;对于AAC音频和&#34; mpegaudioparse&#34;用于MP3音频。