想要从设备中挑选视频并对其进行解码,以便更改其帧速率,然后进行编码并将其保存到设备中。如何使用MediaCodec实现这一目标?经历了许多文档,但找不到方法。我有以下代码进行解码。这对我的目的是否有益。如果是,如何使用该解码数据以更改的fps保存它。
public class RecordsAdapter extends RecyclerView.Adapter<RecordsAdapter.RecordViewHolder> {
private Context mCtx;
private List<Record> recordList;
public RecordsAdapter(Context mCtx, List<Record> recordList) {
this.mCtx = mCtx;
this.recordList = recordList;
}
@NonNull
@Override
public RecordViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mCtx);
View view = inflater.inflate(R.layout.record_logs_card, null);
return new RecordViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecordViewHolder holder, int position) {
Record record = recordList.get(position);
holder.date.setText(record.getDate());
holder.qty.setText(String.valueOf(record.getQty()));
holder.rate.setText(String.valueOf(record.getRate()));
holder.total.setText(String.valueOf(record.getTotal()));
}
@Override
public int getItemCount() {
return recordList.size();
}
class RecordViewHolder extends RecyclerView.ViewHolder {
TextView date, qty, rate, total;
public RecordViewHolder(View itemView) {
super(itemView);
date = itemView.findViewById(R.id.date);
qty = itemView.findViewById(R.id.qty);
rate = itemView.findViewById(R.id.rate);
total = itemView.findViewById(R.id.total);
}
}
答案 0 :(得分:2)
您可以查看Vue.set,这是使用曲面进行解码和重新编码的绝佳起点(解码器的输出曲面 - >编码器的输入曲面)。
特别注意这个方法
private void editVideoData(VideoChunks inputData, MediaCodec decoder,
OutputSurface outputSurface, InputSurface inputSurface, MediaCodec encoder,
VideoChunks outputData)
您必须遵循的工作流程类似于以下:
提取视频片段(MediaExtractor)
输入解码器输入缓冲区
将解码后的帧渲染到表面
额外链接:一些示例